DeepFace: 实现人类水平的人脸验证与识别.

DeepFace实现了人类水平的深度人脸识别Face Recognition方法,其主要步骤:

  1. 人脸检测Face Detect:从一张图像中检测出人脸;
  2. 人脸对齐Face Align:对检测到的人脸进行矫正;
  3. 人脸表示Face Represent:对校正后的人脸提取特征;
  4. 人脸分类Face Classify:用特征进行识别。

DeepFace采用已有的人脸检测方法,在此基础上设计了人脸对齐和表示学习方法;下面分别进行介绍。

1. Face Align

DeepFace提出的Alignment方法:

(a) 使用$LBP$ $Histograms$和$SVR$的方法检测出$6$个初始基准点 initial fiducial points:两个眼睛中心、鼻尖和嘴的位置;

(b) 拟合一个对基准点的变换(缩放$scale$、旋转$rotate$、平移$translate$)对图像进行裁剪

(c) 用$SVR$对裁剪后的图像定位$67$个基准点,进行三角剖分 Delaunay triangulation,在人脸的轮廓上添加三角形避免不连续性 discontinuities

(d) 用$3D$人脸库USF Human-ID构建一个平均$3D$人脸模型,手工标注$67$个基准点

(e) 用generalized least squares学习$3D$人脸和$2D$人脸之间的映射,并对三角形进行可视化,颜色越深代表越不可见;

(f) 根据学习到的映射把原$2D$图像中的基准点转换成$3D$图像中的基准点;

(g) 得到端正 frontalized的人脸图像;

(h) 把最终图像转换成$3D$模型(not used in this paper)。

2. Face Represent

DeepFace使用卷积神经网络进行人脸表示的特征提取:

C1:卷积层,输入通道数$3$,输出通道数$32$,卷积核大小$11×11$;

M2:最大池化层;

C3:卷积层,输入通道数$32$,输出通道数$16$,卷积核大小$9×9$;

L4:局部卷积层,输入通道数$16$,输出通道数$16$,卷积核大小$9×9$;

L5:局部卷积层,输入通道数$16$,输出通道数$16$,卷积核大小$7×7$;

L6:局部卷积层,输入通道数$16$,输出通道数$16$,卷积核大小$5×5$;

F7:全连接层,输出未标准化的4096维人脸特征向量;

F8:全连接层,$Softmax$分类,用来进行$Face$ $recognition$,4300维是数据库中的人数。

如何训练这个网络呢?使用孪生网络 Siamese Network

对于一张人脸的图像\(x^{(1)}\),使用网络得到一个特征向量\(f(x^{(1)})\);

对于另一张人脸的图像\(x^{(2)}\),喂入具有同样参数的网络,得到特征向量\(f(x^{(2)})\);

训练的目标是,若两张图像是同一个人,则两个特征向量越接近越好;否则差别越大越好;使用一种相似度度量 metric衡量这种差异。

DeepFace使用Weighted χ2 distance。选取两张人脸图像,计算出特征向量之后进行二分类,判断这两个图像是否代表同一个人:

记两张人脸图像\(x^{(i)}\)和\(x^{(j)}\),得到的特征向量为\(f(x^{(i)})\)和\(f(x^{(j)})\),特征向量为$k$维,使用$χ^2$相似度进行分类:

\[\hat{y} = σ(W\frac{(f(x^{(i)})-f(x^{(j)}))^2}{f(x^{(i)})+f(x^{(j)})} + b)\]

3. Face Classify

训练好模型之后,就可以实现人脸验证和识别。

在实际使用中,预先存储已知人脸数据集的人脸对应特征向量;对于一张新的人脸图像,先提取特征再进行比较。