DeepID已经三代。如今,深度学习方兴未艾,大数据风起云涌,各个领域都在处于使用深度学习进行突破的阶段,人脸识别也不例外,香港中文大学的团队使用卷积神经网络学习特征,将之用于人脸识别的子领域人脸验证方面,取得了不错的效果。使用的卷积神经网络已经改进了三次。故而在这里将DeepID神经网络的三代进化史总结一下,以期相互讨论,互有增益。

在说明具体的结论之前,我先进行总结式的几段文字,然后再做详细的技术说明,以防有些过来寻求科普的人看到一坨坨的公式便拂袖远去,没看到什么干货。

1. 问题引入及算法流程

DeepID所应用的领域是人脸识别的子领域——人脸验证,就是判断两张图片是不是同一个人。人脸验证问题很容易就可以转成人脸识别问题,人脸识别就是多次人脸验证。DeepID达到的效果都是在LFW数据集上验证,该数据集是wild人脸数据集,即没有经过对齐的人脸,背景变化比较大。该数据集太小,很多identities都只有一张人脸,5000个人只有13000张图片。所以DeepID引入了外部数据集CelebFaces和CelebFaces+,每次模型更新都会使用更大的数据集,这在后面介绍DeepID时再细说。

卷积神经网络在DeepID中的作用是学习特征,即将图片输入进去,学习到一个160维的向量。然后在这个160维向量上,套用各种现成的分类器,即可得到结果。DeepID之所以有效,首先在于卷积神经网络学习到的特征的区分能力比较强,为了得到比较强的结果,DeepID采取了目前最常用的手法——增大数据集,只有大的数据集才能使得卷积神经网络训练的更加的充分。
增大数据集有两种手法,
第一种手法,就是采集好的数据,即CelebFaces数据集的引入。
第二种手法,就是将图片多尺度多通道多区域的切分,分别进行训练,再把得到的向量连接起来,得到最后的向量。DeepID的算法流程如下:

在上述的流程中,DeepID可以换为Hog,LBP等传统特征提取算法。Classifier可以是SVM,Joint Bayes,LR,NN等任意的machine learning分类算法。
在引入外部数据集的情况下,训练流程是这样的。首先,外部数据集4:1进行切分,4那份用来训练DeepID,1那份作为训练DeepID的验证集。
如此,想必大家对DeepID的应用场景已经熟悉了,下面开始讲三代DeepID的进化。

2. DeepID

2.1 DeepID网络结构

DeepID是第一代,其结构与普通的卷积神经网络差不多。结构图如下:
该结构与普通的卷积神经网络的结构相似,但是在隐含层,也就是倒数第二层,与Convolutional layer 4和Max-pooling layer3相连,鉴于卷积神经网络层数越高视野域越大的特性,这样的连接方式可以既考虑局部的特征,又考虑全局的特征。

2.2 DeepID实验设置

实验中,人脸图片的预处理方式,也就是切分方式的样例如下:

在DeepID的实验过程中,使用的外部数据集为CelebFaces+,有10177人,202599张图片;8700人训练DeepID,1477人训练Joint Bayesian分类器。切分的patch(也就是上图这样的数据)数目为100,使用了五种不同的scale。每张图片最后形成的向量长度为32000,使用PCA降维到150。如此,达到97.20的效果。使用某种Transfer Learning的算法后,达到97.45%的最终效果。

2.3 实验结论

使用multi-scale patches的convnet比只使用一个只有整张人脸的patch的效果要好。DeepID自身的分类错误率在40%到60%之间震荡,虽然较高,但DeepID是用来学特征的,并不需要要关注自身分类错误率。使用DeepID神经网络的最后一层softmax层作为特征表示,效果很差。随着DeepID的训练集人数的增长,DeepID本身的分类正确率和LFW的验证正确率都在增加。

这就是DeepID第一代。

3 DeepID2

DeepID2相对于DeepID有了较大的提高。其主要原因在于在DeepID的基础上添加了验证信号。具体来说,原本的卷积神经网络最后一层softmax使用的是Logistic Regression作为最终的目标函数,也就是识别信号;但在DeepID2中,目标函数上添加了验证信号,两个信号使用加权的方式进行了组合。(softmax使类间距离变大而验证信号使类内距离变小)

3.1 两种信号及训练过程

识别信号公式如下:

验证信号公式如下:

由于验证信号的计算需要两个样本,所以整个卷积神经网络的训练过程也就发生了变化,之前是将全部数据切分为小的batch来进行训练。现在则是每次迭代时随机抽取两个样本,然后进行训练。训练过程如下:

在训练过程中,lambda是验证信号的加权参数。动态调整,调整策略是使最近的训练样本上的验证错误率最低。

3.2 实验设置

首先使用SDM算法对每张人脸检测出21个landmarks,然后根据这些landmarks,再加上位置、尺度、通道、水平翻转等因素,每张人脸形成了400张patch,使用200个CNN对其进行训练,水平翻转形成的patch跟原始图片放在一起进行训练。这样,就形成了400×160维的向量。
这样形成的特征维数太高,所以要进行特征选择,不同于之前的DeepID直接采用PCA的方式,DeepID2先对patch进行选取,使用前向-后向贪心算法选取了25个最有效的patch,这样就只有25×160维向量,然后使用PCA进行降维,降维后为180维,然后再输入到联合贝叶斯模型中进行分类。
DeepID2使用的外部数据集仍然是CelebFaces+,但先把CelebFaces+进行了切分,切分成了CelebFaces+A(8192个人)和CelebFaces+B(1985个人)。首先,训练DeepID2,CelebFaces+A做训练集,此时CelebFaces+B做验证集;其次,CelebFaces+B切分为1485人和500人两个部分,进行特征选择,选择25个patch。最后在CelebFaces+B整个数据集上训练联合贝叶斯模型,然后在LFW上进行测试。在上一段描述的基础上,进行了组合模型的加强,即在选取特征时进行了七次。第一次选效果最好的25个patch,第二次从剩余的patch中再选25个,以此类推。然后将七个联合贝叶斯模型使用SVM进行融合。最终达到了99.15%的结果。

其中,选取的25个patch如下:

3.3 实验结论

对lambda进行调整,也即对识别信号和验证信号进行平衡,发现lambda在0.05的时候最好。使用LDA中计算类间方差和类内方差的方法进行计算。得到的结果如下:

可以发现,在lambda=0.05的时候,类间方差几乎不变,类内方差下降了很多。这样就保证了类间区分性,而减少了类内区分性。如果lambda为无穷大,即只有验证信号时,类间方差和类内方差都变得很小,不利于最后的分类。

DeepID的训练集人数越多,最后的验证率越高。对不同的验证信号,包括L1,L2,cosin等分别进行了实验,发现L2 Norm最好。

4 DeepID2+

DeepID2+有如下贡献,第一点是继续更改了网络结构;第二点是对卷积神经网络进行了大量的分析,发现了几大特征,包括:+神经单元的适度稀疏性,该性质甚至可以保证即便经过二值化后,仍然可以达到较好的识别效果; 高层的神经单元对人比较敏感,即对同一个人的头像来说,总有一些单元处于一直激活或者一直抑制的态;DeepID2+的输出对遮挡非常鲁棒。

4.1 网络结构变化

相比于DeepID2,DeepID2+做了如下三点修改:
DeepID层从160维提高到512维。
训练集将CelebFaces+和WDRef数据集进行了融合,共有12000人,290000张图片。
将DeepID层不仅将第四层和第三层的max-pooling层与链接层连接,还连接了第一层和第二层的max-pooling层。

最后的DeepID2+的网络结构如下:

上图中,ve表示监督信号(即验证信号和识别信号的加权和)。FC-n表示第几层的max-pooling。

4.2 实验设置

训练数据共有12000人,290000张图像。其中2000人用于在训练DeepID2+时做验证集,以及训练联合贝叶斯模型。

4.3 实验结论

分别对只从FC-4反向传播下来进行训练的模型、使用少量数据的、使用小的特征向量的DeepID2+模型算法进行分析。结果如下:

DeepID2选取了25个patch,DeepID2+选取了同样的25个patch,然后抽取的特征分别训练联合贝叶斯模型,得到的结果是DeepID2+平均比DeepID2提高2%。

4.4 适度稀疏与二值化

DeepID2+有一个性质,即对每个人,最后的DeepID层都大概有半数的单元是激活的,半数的单元是抑制的。而不同的人,激活或抑制的单元是不同的。基于此性质。使用阈值对最后输出的512维向量进行了二值化处理,发现效果降低有限。

二值化后会有好处,即通过计算汉明距离就可以进行检索了。然后精度保证的情况下,可以使人脸检索变得速度更快,更接近实用场景。

4.5 特征区分性

存在某个神经单元,只使用普通的阈值法,就能针对某个人得到97%的正确率。不同的神经单元针对不同的人或不同的种族或不同的年龄都有很强的区分性。在这里,对每个单元的激活程度进行由高到低排序,可以得到下图所示:

上图只是其中一张图示,还有针对种族、年龄等的激活分析。此处不赘述。
但值得说的是,这种分析方法对我们很有启发。卷积神经网络的输出的含义是什么,很难解释,通过这种方法,或许可以得到一些结论。

4.6 遮挡鲁棒性

在训练数据中没有遮挡的情况下,DeepID2+自动就对遮挡有了很好的鲁棒性。有两种方式对人脸进行多种尺度的遮挡,第一种是从下往上进行遮挡,从10%-70%。第二种是不同大小的黑块随机放,黑块的大小从10×10到70×70。


结论是遮挡在20%以内,块大小在30×30以下,DeepID2+的输出的向量的验证正确率几乎不变。

5 总结

至此,DeepID的三代进化史就讲完了。简单的说一下我的感受。
首先是卷积神经网络的作用,虽说之前听说过卷积神经网络既可以分类,也可以学习特征,但ImageNet上的卷积神经网络都是分类的,这次终于见到不关注分类错误率而关注特征的卷积神经网络。
其次,卷积神经网络的改进方式,无非如下几种:增大网络深度和宽度,增加数据,将网络隐含层连接到前面几层来,添加其他的信号。
再次,也是最重要的,就是DeepID在发展过程中对输出向量的分析,尤其是DeepID2+,神经网络的各个单元一直是无法解释的,但这次作者不仅试图去发现规律,还基于规律做出了一些改动,比如二值化。
最后,卷积神经网络的鲁棒性真的很厉害。

参考链接

DeepID+DeepID2+DeepID3人脸识别算法总结相关推荐

  1. DeepID人脸识别算法之三代

    DeepID人脸识别算法之三代 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/42091205 DeepID,目前最强人脸识别算法,已经三 ...

  2. DeepID:Python基于Caffe的DeepID2实现人脸识别的简介、实现之详细攻略

    DeepID:Python基于Caffe的DeepID2实现人脸识别的简介.实现之详细攻略 目录 基于Caffe的DeepID2实现人脸识别 DeepID2实现人脸识别的实现 基于Caffe的Deep ...

  3. 【华为云技术分享】人脸识别算法的训练之路(下)

    人脸识别算法的训练之路(上) 人脸识别 人脸识别问题本质是一个分类问题,即每一个人作为一类进行分类检测,但实际应用过程中会出现很多问题.第一,人脸类别很多,如果要识别一个城镇的所有人,那么分类类别就将 ...

  4. 研究:即便是最好的人脸识别算法也会受到口罩干扰

    据外媒报道,研究人员发现,口罩不仅能有效防新冠肺炎等空气传播疾病的传播,还能成功阻止面部识别算法.美国国家标准与技术研究所(NIST)在周一发布的一份报告中指出,口罩甚至还能给最先进的面部识别算法造成 ...

  5. 人脸识别算法初次了解

    人脸识别算法初次了解 这是转载别人的帖子,认为好,大家一块学习http://www.cnblogs.com/guoyiqi/archive/2011/07/28/2129300.html 前言 在写此 ...

  6. 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法

    出处"来自微信公众号:我爱计算机视觉" 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法 这篇论文解决的问题与现实中的人脸识别应用场景密切相关,其假设已经有了少量已经标注的 ...

  7. 人脸识别算法_格灵深瞳在人脸识别算法测试(FRVT)中斩获全球第一

    1月6日,美国国家标准与技术研究院(NIST)公布了最新的人脸识别算法测试(FRVT)成果,格灵深瞳再次刷新纪录:在7项测试子任务中,获得2项第一.3项第二,综合排名世界第一的成绩. 过去几个月,很多 ...

  8. 基于改进的RPCA人脸识别算法

    from:http://www.chinaaet.com/article/3000011311 基于改进的RPCA人脸识别算法 作者:首照宇,杨晓帆,莫建文 2015/11/15 18:04:00 摘 ...

  9. 轻量级3d模型查看器_耐能取得两项软件著作权,自研轻量级3D人脸识别算法领先业界...

    近日,耐能收到国家版权局颁发的两份<计算机软件著作权登记证书>,两款软件分别是人脸活体检测和人脸识别开发包软件V1.1.0.卷积神经网络简化和加速开发工具软件V2.2.17.这次取得两项软 ...

最新文章

  1. 某高校教授要求:博士生发表论文,必须把他列为第一作者
  2. 简述RHEL7新特性(一)
  3. [转] SQL的3种连接查询
  4. 多线程(二)线程控制
  5. OpenCV显示图片的实例(附完整代码)
  6. 网络流优化:-1优化与当前弧优化
  7. qq html制作,jquery学习练习:制作QQ简易聊天框
  8. Linux shell multifile content replace with sed
  9. shell字符串的用法
  10. 手机优酷APP怎么上传视频
  11. 如何创建从硬盘安装的硬像文件
  12. Prompt Learning | 一文带你概览Prompt工作新进展
  13. 北漂周记--第5记--拼命编程
  14. 移动API设计与安全存储
  15. java keytool 工具
  16. 免费响应式html模板,值得收藏的25款免费响应式网页模板
  17. android工程如何创建数据库,安卓项目-利用Sqlite数据库,开发新闻发布系统
  18. 当年黄光裕有多么霸气?一张合影令人震撼,现任首富王健林成小弟
  19. monkey的基本操作命令
  20. 人工智能学术论坛参会总结【附PPT】

热门文章

  1. 无人机电池能不能上高铁以及什么型号的电池可以上高铁
  2. jquery 定义html模板,jquery – 使自定义html模板使自举popover工作
  3. wxPython和pycairo练习记录7
  4. 2020.12.28 ps临摹
  5. 怎么查询显卡hdmi接口版本_联想拯救者y7000 2020款怎么样?5999元,价格配置点评可以帮您...
  6. 适配iPhoneX全系详解,更新Xcode10爬坑
  7. CSS 实现三角形 等腰梯形
  8. 手机探索者开发实录—设计时考虑
  9. Canvas 绘制背景小球、与鼠标交互的小球
  10. matlab 周期0-1,周期为2s的方波信号,在【-1 0】取值为-1,在【0 1】取值为1,利用matlab求该方波信号的傅里叶级数展开各项系数...