《Deep Learning Face Representation from Predicting 10000 Classes》论文解读
这篇论文来自香港中文大学汤晓鸥课题组,发表于CVPR2014,论文原文见:
人脸验证(Face Verification)就是判断两个人脸是不是同一个人,一个常用的场景是判断身份证是不是本人。
概述
文章使用深度学习的方法来提取人脸高级特征(high-level features),这种特征被称为DeepID。DeepID特征是通过人脸分类任务学习得到的,这样的特征可以使用在人脸验证中,最终在LFW数据集上取得了97.45%的结果。
相关研究
之前的人脸验证任务主要的方法是使用过完备的(over-complete)低层次特征,结合浅层的机器学习模型进行的。过去的方法常常是将人脸提取出几万乃至几百万的特征,然后将特征进行降维,再计算两个特征的相似度。
人脸特征提取
本文使用卷积神经网络来提取人脸特征,特征提取框架如下图所示:
首先将每个人脸分成多个小块(patch),每个patch分别输入到卷积神经网络中。图中CNN里每层旁边的数字代表神经元的数量,最后一个隐层的输出叫做Deep hidden identity features(DeepID),DeepID特征为160维。特征提取的最后,把每个patch的DeepID特征连起来就构成了这张脸的特征。
DeepID
DeepID特征是在人脸识别(face identification,人脸身份认定)任务中训练得到的。人脸识别就是给定一张人脸,然后判断这张人脸属于谁,这个任务可以看成是分类模型,也就是给定一张脸,将它分类到n个身份中的一个。这个任务比人脸验证任务更有挑战性,因此人脸识别任务中学习到的特征可以更好地泛化到别的任务中。
文章使用CNN进行DeepID特征学习。CNN的结构如下图所示:
CNN的训练输入是人脸的某个patch,任务目标是将这个输入图片分类到某个具体的身份类别中。
CNN从左向右使用了4个卷积层,3个池化层。当patch是长方形时,输入尺寸为39*31*k,当patch是正方形时,输入尺寸为31*31*k。这里的k代表颜色通道,k=3代表彩色,k=1代表黑白。值得注意的是CNN最后一层DeepID层不仅和Convolutional layer 4直接相连,也和Max-pooling layer 3相连,作者将之称为Multi-scale ConvNets。这样做的原因是第四层神经元数量少,携带的信息比较少,使用第三层可以减少信息损失。这一步的具体做法是:先将Convolutional layer 4和Max-pooling layer 3这两层拉平(flatten),然后再将其和DeepID层全连接,经过ReLU激活函数后的输出就是DeepID特征。DeepID层后面接着Softmax层,将不同的DeepID特征分类到不同的身份类别中。至此,DeepID特征学习完毕。
Face patch
首先对人脸图片检测5个特征点(两个眼睛,鼻尖,两个嘴角),然后将人脸进行变换对齐。
在对齐的脸上生成10个区域,分别是5个全局区域和以5个特征点为中心的区域。对每个区域还要生成3种尺度,每种尺度有RGB和gray两种颜色,最终10个区域形成60个patch。
文章先使用60个patch训练60个CNN,每个CNN使用patch本身和patch的翻转生成两个160维的DeepID特征,每个人脸最终提取为160*2*60=19200维特征。
人脸验证
上一部分已经提取出了人脸的特征,现在需要做的是判断两张脸是不是同一个人。这篇文章使用了Joint Bayesian和Neural Network两种方法进行区分。
Joint Bayesian
联合贝叶斯在之前的人脸验证任务中取得了良好的效果。