1. ByteDance AI Camp 创意换脸项目

1.1 人脸关键点检测

1.2 人脸对齐

1.3 人脸融合

给定两个图片 I I I J J J,我们可以直接将两个图片的每个像素加权融合起来形成一个中间图片 M M M

M ( x , y ) = ( 1 α ) I ( x , y ) + α J ( x , y ) M(x, y) = (1 - \alpha)I(x, y) + \alpha J(x, y) M(x,y)=(1α)I(x,y)+αJ(x,y)

然而,取 α = 0.5 \alpha =0.5 α=0.5 时,我们会得到如下所示的结果。

可见,想要得到一个完美融合的图片,我们至少需要在融合之前先把眼睛、嘴巴等部位对齐。

假设我们知道图片 I I I 位于 ( x i , y i ) (x_i, y_i) (xi,yi) 的像素正好对应于图片 J J J 位于 ( x j , y j ) (x_j, y_j) (xj,yj) 的像素,比如都是鼻尖,那么我们就可以这样先求得中间图片鼻尖的位置。

x m = ( 1 α ) x i + α x j x_m = (1 - \alpha)x_i + \alpha x_j xm=(1α)xi+αxj
y m = ( 1 α ) y i + α y j y_m = (1 - \alpha)y_i + \alpha y_j ym=(1α)yi+αyj

然后,鼻尖处的像素强度则为

M ( x m , y m ) = ( 1 α ) I ( x i , y i ) + α J ( x j , y j ) M(x_m, y_m) = (1 - \alpha)I(x_i, y_i) + \alpha J(x_j, y_j) M(xm,ym)=(1α)I(xi,yi)+αJ(xj,yj)

主要步骤如下:

  • 利用 Dlib 进行人脸关键点检测

  • 德劳内三角化(没有点位于三角形外接圆的内部)

  • 计算出中间图片所有三角形对应的位置

  • 应用仿射变换分别将两个图片的所有三角形区域的像素映射到中间图片上

  • 将得到的两个中间图片进行融合

  • 颜色校正,两张图片的像素分布应该相同

2. 基于深度学习的三维网格去噪

2.1 边缘检测

  • 输出层逻辑回归,01 代表是否是边缘
  • 数据格式 41×41×41
  • 2-D 卷积和 3-D 卷积

2.2 邻域相关性检测

  • 输出层 Tanh,[-1, 1] 代表两个面之间的相关性
  • 数据格式 41×41×41×1
  • 3-D 卷积,两个网络中间拼接

2.3 法向量检测

  • 输出层 Tanh,代表法向量的三个坐标
  • 数据格式 1×20×6,代表邻域的顶点和法向量坐标
  • 3-D 卷积,20 个邻域拼接

  • 输出层 Tanh,代表法向量的三个坐标
  • 数据格式 41×41×41×3,代表邻域的顶点和法向量坐标

2.4 遇到的问题

  • 输出一致:网络结构错误;数据中存在 NAN;数据过大激活后都是 1
  • 在 C/C++ 调用 Python
  • BN 训练调用模型,训练和测试阶段参数更新问题

3. 之江杯全球人工智能大赛零样本图像目标识别

3.1 数据

  • 图片名 标签 ID 真实类别英文名称 属性(30) 类别词向量(300 )

3.2 方法

一个之前只见过马的小孩看到斑马会认出这是一个有黑白条纹的像马的动物,零样本学习就是让网络能够识别出在训练集上没有出现过的类别。

一般认为已知类别和未知类别在一个高维的向量空间中是高度关联的,这个空间称为语义嵌入空间,而图片经过卷积神经网络提取到的特征所在的空间则被称为视觉特征空间

因此,我们要做的就是将视觉特征空间映射到语义嵌入空间,然后在语义特征空间中搜索一个最相近的标签。假设 S S S 代表语义嵌入特征, V V V 代表视觉特征, W W W 代表映射矩阵。

  • 映射到视觉特征空间

  • 岭回归

m i n V W S 2 + λ W 2 min||VW-S||^2+\lambda||W||_2 minVWS2+λW2

  • 语义自编码器

m i n V W T S 2 + λ V W S 2 min||V-W^TS||^2+\lambda||VW-S||^2 minVWTS2+λVWS2

  • 此外,我们还可以学习一个联合嵌入空间,将视觉特征空间和语义嵌入空间都映射到这个空间

  • Discriminative Learning of Latent Features for Zero-Shot Recognition

FNet 负责图像特征提取,ZNet 负责查找有判别力的区域,ENet 负责特征嵌入。其中,特征嵌入包括两部分,一部分是嵌入到用户定义的属性空间,另一部分是嵌入到潜在有判别力的属性空间。

获取更多精彩,请关注「seniusen」!