人脸识别介绍
1. 目标
在这一讲中,我们将以人脸识别为具体应用,讲解如何用深度神经网络构建一个实用的人脸识别系统。
2. 人脸识别的发展
首先,回顾人脸识别邻域近年来的发展,在2013年AlexNet
提出之后,FaceBook
公司迅速跟进,在2014年构建了一个DeepFace
的卷积神经网络。训练数据库包含4000人、400万张人脸,该模型在LFW
数据集上取得了97.25%
的平均精度,同时在Youtube
数据集上取得了当前最好的结果,比之前的第一整整高出了12.7%
。
2015年,香港中文大学唐晓鸥老师实验室研发了DeepID
卷积神经网络,这一系统在LFW
(Labeled Faces in the Wild
)数据库上获得了99.15%
的人脸辨识率,超过了人用肉眼在LFW
上的辨识率97.52%
。这也是第一个声称表现超过人的人脸识别系统。
以近年来领域的发展和经验讲解如何构建实用的人脸识别系统。首先需要注意的是卷积神经网络提取的特征,例如在上图2中,在卷积神经网络的倒数第二层输出是一个160维的向量,而最后一层SoftMax
输出的维度是类别数,一般来说我们采用的大型人脸识别数据库类别数都是上万甚至上十万。
例如常用的WebFace
数据库,总共有10575
个人,也就是10705
类。所以,最后一个SoftMax
的输出是10575
维。由于测试时如此巨大的维度很冗余,对此采取一个折中的方案,在训练的时候保留最后一层SoftMax
,而在测试的时候却不要最后一层,将倒数第二层160
个维度作为最后人脸识别的特征。在测试时,每张人脸通过卷积神经网络,获得160
维向量,利用距离量度,如欧氏距离和余弦距离等,算出基于这160
维向量的人脸距离,最终通过阈值获得识别结果。当然,倒数第二层也可以不是160维,适当维数即可。
3. 损失函数的改进
接下来讨论近年来人脸识别在损失函数方面的改进。最基础的损失函数为SoftMax
损失函数,SoftMax
损失公式定义为(偏置 b j b_j bj设置为0)
L 1 = 1 N ∑ i − l o g ( e f y i ∑ i e f j ) (1) L_1=\frac1N\sum_i-log\left(\frac{e^{f_{yi}}}{\sum_i e^{f_j}}\right)\tag{1} L1=N1i∑−log(∑iefjefyi)(1)
其中 N N N是样本的数量, i i i代表第 i i i个样本, j j j代表第 j j j个类别, f y i = W y i T x i f_{yi}=W_{yi}^Tx_i fyi=WyiTxi是最后一层全连接的输出,代表着第 i i i个样本所属类别的分数。将其用角度表示为
L i = − l o g ( e ∣ ∣ W y i ∣ ∣ ∣ ∣ x i ∣ ∣ c o s ( θ y i ) ∑ j e ∣ ∣ W j ∣ ∣ ∣ ∣ x i ∣ ∣ c o s ( θ j ) ) (2) L_i=-log\left(\frac{e^{||W_{yi}||||x_i||cos(θ_{yi})}}{\sum_j e^{||W_j||||x_i||cos(θ_j)}}\right)\tag{2} Li=−log(∑je∣∣Wj∣∣∣∣xi∣∣cos(θj)e∣∣Wyi∣∣∣∣xi∣∣cos(θyi))(2)
3.1 L-SoftMax(Large-Margin SoftMax Loss)
对损失函数的第一个改进是2016年Large-Margin SoftMax Loss
,这里以一个二分类问题为例:假定 x x x属于类1,如果我们希望正确分类,则需要满足: