aoi学院

Aisaka's Blog, School of Aoi, Aisaka University

人脸识别-人脸识别合集 | 2 DeepID解析(港中文 CVPR2014)

DeepID(Deep hidden IDentity features, 深度隐藏的身份特征)是港中文孙祎、汤晓鸥于CVPR2014年发表,通过深度学习得到了高度紧凑和有判别度的特征DeepID,Deep Learning Face Representation from Predicting 10,000 Classes


主要思想

  • DeepID:为了人脸验证而通过face identification来学习深度模型的高级人脸身份特征,称为 DeepID 。这里的人脸识别是多分类,通过用少量隐藏变量表示大量不同的身份,获得了高度紧凑和有判别度的特征DeepID。
  • DeepID先通过多分类人脸识别任务来学习,再用于人脸验证,可以推广到其他任务(例如验证)和看不见身份的新训练集。
    • 这种高维预测任务比face verification更具挑战性,特征表示有良好泛化性。
    • 先讨论了face identification的1:n比对,即将训练n个身份图像分类;最终用于face verification 1:1的比对。
  • 人脸表示(人脸识别):用CelebFaces训练卷积网络,最后是全连接的DeepID层和指示身份类别的Softmax层,DeepID特征是160维
  • 关键点检测:使用Sun等人提出的面部点检测方法检测5个面部标志点
  • 人脸对齐(弱对齐):根据两个眼睛中心和两个嘴角的中点,通过相似性变换对人脸进行全局对齐。
  • 对齐图片的数据增广:将一个弱对齐人脸切分成10个区域、3种尺度、2种通道的60个patch,每个部分都训练一个模型,然后模型聚合。从不同面部区域提取的特征是互补的,提高了性能。
  • 特征提取:一张人脸图用60个ConvNets提取60个patch,最终用于人脸验证的总DeepID特征的长度为19200(160×2×60)。
  • 人脸验证:有两种验证方法
    • 联合贝叶斯模型:先用PCA将60x160维降维到150维,再学习联合贝叶斯模型
    • 神经网络:将两张人脸图的总DeepID特征分为60组,即每组包含待比较的一对patch的640个特征,再将60个模型聚合,训练出一个Sigmoid输出层的神经网络
  • LFW上实现了97.45%的人脸验证精度,而且是只需要弱对齐的人脸。

相关工作

许多人脸验证方法都是用高维过完备(over-complete)的人脸描述符表示人脸,其次是浅模型。Cao等人将每张人脸图像编码为26K个基于学习的(LE)描述符,然后经过PCA计算出LE描述符之间的L2距离。Chen等人在多尺度密集的面部地标提取了100K个LBP描述符,PCA后使用联合贝叶斯进行验证。Simonyan等人在尺度和空间上密集计算了1.7M SIFT描述符,将密集SIFT特征编码成Fisher向量,并学习线性投影进行判别降维。Huang等人将1.2M CMD和SLBP描述符结合起来,学习了稀疏的Mahalanobis度量用于人脸验证。


卷积网络的设计(人脸表示)

  • ConvNets包含4个卷积层(3个最大池化层)以分层提取特征,然后是全连接的DeepID层和指示身份类别的softmax输出层。图中采用39×31×1输入,并预测n个身份类别(本文用10000),当输入大小改变时,随后层中图的高度和宽度将相应改变。
  • DeepID层的尺寸固定为160维,而输出层的尺寸根据其预测的类别数而变化。特征数目沿着特征提取层次结构继续减少,直到形成高度紧凑和预测特征的最后一个隐藏层(DeepID层),其根据少量特征预测更大数量的身份类别。
  • DeepID的最后一个隐藏层全连接到第四个和第三个卷积层(在最大池化之后),使得它能观察到多尺度特征。
    • 第四个卷积层中的特征比第三个卷积层中的特征更全局,这对于特征学习至关重要,因为在沿着级联连续下采样之后,第四个卷积层包含太少的神经元并且成为信息传播的瓶颈。在第三卷积层(称为跳跃层)和最后隐藏层之间添加旁路连接减少了第四卷积层中可能的信息丢失。
  • ConvNet输出是n路Softmax,用于预测n个不同身份的概率分布。
    • 最后一层线性组合了160个DeepID特征,以xi为第j个神经元的输入,输出为类别概率yj。
    • 通过最小化交叉熵损失函数- log(y_t)来学习,用SGD和反向传播来计算梯度。

提取的特征

  • DeepID特征取自每个ConvNet的最后一个隐藏层,高度紧凑的160维DeepID包含丰富的身份信息,并且直接预测更大数量(如10000)的身份类别。下图每层旁标记了神经元数量。
  • DeepID维度远远低于预测的身份类别,这是学习高度紧凑和可辨识特征的关键。
  • Multiple ConvNets,特征提取时用了多个卷积网络来提取,本文用了60个。

特征提取的方法

  • 关键点检测:使用Sun等人提出的面部点检测方法检测5个面部标志点,包括两个眼睛中心,鼻尖和两个嘴角。
  • 人脸对齐(弱对齐):根据两个眼睛中心和两个嘴角的中点,通过相似性变换对人脸进行全局对齐。
  • 对齐图片的预处理(增大数据集):再基于弱对齐图像从10个区域、3种尺度、RGB和灰色2种通道方面截取出60个面部块,将从中提取特征。图中显示了10个面部区域和两个特定面部区域的3个尺度:(只用于人脸验证,训练DeepID时不用它)
    • 上图:中等尺度的10个面部区域。
      • 左上角的五个区域是从弱对齐的面部取得的全局区域,没有DeepFace那么复杂,只用5点来对齐;
      • 右上角的另外五个是分别以5个面部标志点为中心的局部区域。
    • 下图:某两个块的3个尺度。左边是全局区域,右边是局部区域。
  • 提取特征:用60个ConvNets提取60个patch,每个ConvNet在每个块及其水平翻转的块中共提取了2个160维DeepID向量,最终DeepID向量的总长度为19200(160×2×60),它将用于人脸验证。(60个patch中不含水平翻转)
    • 除了两眼中心和两个嘴角附近的patch不用自身翻转,而是使用对称的patch,也就是说左眼中心的patch的翻转是通过翻转右眼中心的patch得到的。

基于联合贝叶斯的人脸验证

  • 基于DeepID的人脸验证时的第一种方法是使用联合贝叶斯(Joint Bayesian) ,在学习联合贝叶斯模型之前,我们使用PCA降维将特征维度降为150维。
  • 它把提取的面部特征x(在减去平均值之后)分为两个独立高斯变量之和:x = µ + ε
    • u为不同人的类间差异,均值为0方差为S_u的高斯分布,代表人脸识别;ε为同一人的类内差异的分布,均值为0方差为S_ε。
  • 联合贝叶斯要算不同类内外条件H下的联合概率 P(x1,x2|H_I)和 P(x1,x2|H_E),联合概率也是高斯分布,同一人和不同人的联合概率分布如下:
    • H_I代表类内两张图片是同一人,H_E代表类外不同人,S_u和S_ε是用EM算法从数据中学到的。
  • 在测试中,可计算似然比,大于1则对应是同一人:

基于神经网络的人脸验证

  • 作者还训练了神经网络进行人脸验证,并将其与Joint Bayesian进行比较。实心的神经元形成了一个子网,每个层旁边都标有图层类型和尺寸。
  • 输入层:接受DeepID特征,输入的特征被分为60组,每组包含640个特征,这些特征是从具有特定ConvNet的特定一对patch中提取的,最后要将60个模型聚合(一个patch是160x2=320维的,验证需要两个人脸图像,因此就是一对patch是640维)。同一组的特征是高度相关的。
  • 局部连接层:它的神经元只和一组特征连接,学习它们的局部相关性,同时降维。各组权重不共享。每80个神经元局部连接60组输入神经元中的一组。
  • 全连接层学习全局关系,输出只有1个神经元。其中隐含层用的激活函数是ReLU,输出层是sigmoid。
  • 输入神经元不能使用dropout,因为所学习的特征是紧凑的分布式表示(用很少的神经元表示大量的恒等式),并且必须相互协作才能很好地表示恒等式。
    • 但如果不用dropout会容易出现梯度弥散的问题,高维特征的学习存在一定的困难。所以可以先训练如下图所示的60个子网络(实心),每一个都有一个组特征作为输入。然后,我们使用子网络的第一层权值初始化原始网络的权值,并通过剪切第一层权值调整原始网络的第二层和第三层。
  • 具有相同身份的人脸往往比不同身份的人脸具有更共同的激活神经元(positive特征处于相同位置概率更高)。因此,学习的特征提取了身份信息。如右图
  • DeepID的总体算法流程如下:DeepID可以换为Hog,LBP等传统特征提取算法;Classifier可以是SVM,Joint Bayes,LR,NN等任意的machine learning分类算法。

数据集

在CelebFaces库上训练,在LFW上测试。CelebFaces有5436个名人,共计87628张图片,平均每人16张,它和LFW库是互不相容的。后面又扩展到了CelebFaces+,包含202599张人脸图片,10177位名人。

  • 特征学习:随机挑选 CelebFaces 中80%的人(4349)来训练DeepID特征。
    • 验证数据集:我们随机选取每个训练人员10%的图像生成验证数据。在每个训练周期之后,我们观察top-1验证集的错误率,并选择提供最低错误率的模型。
  • 人脸验证:CelebFaces剩下的20%用来学习人脸验证模型(联合贝叶斯或者神经网络)。在学习联合贝叶斯模型之前,我们使用PCA降维将特征维度降为150维。验证的性能在很大的维度范围内都可以保持稳定。测试阶段,通过比较联合贝叶斯似然比和一个阈值进行人脸对的分类,而这个阈值是在训练数据中按照最优化原则得到的。

测试结果

  • 联合贝叶斯(红线)比神经网络(蓝线)用作人脸验证的准确性要好。且同时对大量的身份进行分类对学习到具有判别性和紧致的隐藏特征是关键
    • 左图:ConvNets分别用136、272、544、1087、2175和4349个身份类训练,类别越多性能越好。
    • 右图:在联合贝叶斯网络和神经网络中,对60个patch中提取的特征进行组合,其准确率分别比最佳单个patch提高了4:53%和5:27%。提取更多的特征性能越好。
  • DeepID在数据集CelebFaces+预训练后再用在LWF上测试人脸验证,精度达到97.45%,与人的97.53%的性能相当。对比的前四种最佳方法使用了稠密的人脸标志点,而本文的人脸仅与5个点弱对齐。
  • DeepFace在LFW上实现了97.25%准确率的第二好表现, 它利用3D对齐和姿势变换作为预处理,并有超过七百万的外部训练图像加上来自LFW的训练图像。

r表示有监督训练协议,其中LFW给出的6000个人脸对用于十倍交叉验证。u表示无监督监督数据,而没有使用来自LFW的培训数据。o+r表示在有监督协议中同时使用外部数据和LFW数据进行训练。(o+u)表示在无监督协议中同时使用外部数据和LFW数据进行训练。

  • 在LFW上进行ROC比较,TL代表transfer learning Joint Bayesian.

参考资料

https://zhuanlan.zhihu.com/p/76534271
https://zhangting2020.github.io/2018/04/10/DeepID/
https://blog.csdn.net/stdcoutzyx/article/details/42091205
http://www.aboutyun.com/thread-13390-1-1.html