人脸识别三大经典算法_人脸识别系列四 | DeepID1算法

6baf8f606fc4a1fa5fd3c353e8ad4c01.png

前言

这是人脸识别系列的第5篇文章,前4篇文章可以在公众号的人脸识别栏里找到,这篇文章主要是解析CVPR 2014年的经典人脸识别论文DeepID1算法。论文的地址如下:http://mmlab.ie.cuhk.edu.hk/pdf/YiSun_CVPR14.pdf 。

题外话

前面4篇人脸识别系列推文中我们介绍了基于传统方法的人脸识别算法,代表性的就是特征脸法。传统人脸识别存在很多弊端,如侧脸,模糊图片,光照遮挡等都会对人脸识别过程造成影响。在基于深度学习的人脸识别技术没有出现以前,传统的人脸识别方法的性能都是很差的,难以实际应用到对安全系数要求很高的场景中。而自从基于深度学习的人脸识别技术一点点演进到今天,人脸识别结果已经可以和人工相比了,有的甚至还会由于人工识别的结果。这就使得人脸识别可以应用到对安全系数要求较为严格的场景,如门禁系统甚至是金融场景。同时,由于人脸识别非常方便,对信息采集设备的要求不是很高,可以通过云端进行识别,这样更推进了人脸识别技术的快速落地。然后基于深度学习的人脸识别方法主要分为两个大的类别,第一个是基于度量学习的方法,第二种是基于边界分类的方法。所谓度量学习(Metric Learning)是专门研究如何让一个算法更好的学习到一种度量的方向,如欧式距离,余弦相似度都是一种度量方法。

介绍

DeepID1是CVPR2014的论文,作者是著名的港中文大学和中科院高等技术研究所的汤晓鸥,王晓刚团队。这个算法以人脸识别的子领域人脸验证(Face Verification)为目标,算法并没有直接用二类分类CNN做人脸验证,而是通过学习一个多类(10000累,每个类大概有20个实例)人脸识别任务来学习特征,并把学习到的特征应用到人脸验证上。算法使用人脸图片的不同patch(也就是一张图片的子区域)训练多个单独的CovNet,每个ConvNet的最后一个隐层是提取到的特征,论文称为DeepID(Deep hidden IDentitiy feature)。最后将这些patch提取到的DeepID在通道上concat起来,构成一个整张人脸图片的特征向量送入Joint Bayesian分类器,做二分类就可以实现人脸验证了。

贡献

用多个不同的Face patch分别训练一个很难的分类任务的卷积网络,因为这里有10000个不同身份的人,然后得到一些分辨力很强的特征表示,最后再不需要严格对其的前提下在LFW上取得了97.45%的人脸对比精度。

算法原理

算法过程

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191126223533794.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVp dGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1c3Rfc29ydA==,size_16,color_FFFFFF,t_70) 如上图所示,这是特征提取的示意图,实际上这篇文章核心点就是这个特征提取部分,验证部分直接做二分类就好。首先,从输入人脸扣出一部分patch(下面也称为块),然后把这些patch输入同一个结构不同参数的ConvNet提取160维的DeepID特征,最后把这些DeepID特征concat起来就是这个人脸的特征了。需要注意的是,每一个块对应了一个单独的ConvNet网络提取对应的DeepID特征,并且 DeepID特征是在最后一个隐层提取,而不是输出层,那个10000个节点的输出层,是训练时候才有的,最后多个块的DeepID连接层最后整个人脸的特征,所以最后一张人脸的特征长度是160*patch的个数。

网络结构

55ea44278afb8b17e62195fe25faea20.png

ConvNet特征提取网络的结构图如上面所示。一共有5层,越往后神经元个数越少,到最后只剩下160个神经元的输出,上面的人脸块是经过对齐后的人脸块,也就是说以左(右)眼为中心的人脸区域块,嘴角为中心的人脸区域块等等,这样就有多个不同的块输入到特定的ConvNet中,最后使用了Max pooling layer3+Conv layer4的输出作为特征。这里论文解释是不同层次的特征抽象程度不一样,而且经过连续的采样,Conv layer4所含的神经元太少,前面损失了太多的信息,所以加入Max Pooling layer3缓和一下。 网络的输入图像有两种类型,即

个人脸图像块和
个图像块,其中
代表图像的通道数,同时人脸还会使用3个尺度,激活函数用ReLU,使用随机梯度下降算法优化网络。

人脸的最后特征

774b1eaac79e7eadd1893fdfba9f8885.png

如上图所示,每个人脸会提取3个尺度的10个patch(以鼻头,左眼,右眼,左嘴角,右嘴角为中心)然后彩色图加上灰度图,加上水平翻转数量又翻倍数量又翻倍,一共是:

。然后将这120个输出图片分别送入到60个ConvNet(水平翻转和原图,用同一个Conv Net),提取了一共
维度的特征向量,作为这个脸的最终特征送入联合贝叶斯分类器做分类。另外有些特例,两个以嘴角和两个眼球为中心的这四个patch,不做翻转操作,直接用他们的对称patch最为他们翻转图的特征。

训练

DeepID1的训练使用了CelebFaces+,有10177人,202599张图片;8700人训练DeepID,1477人训练Joint Bayesian分类器。切分的patch数目是100,使用了5种不同的scale。每张图片最后形成的向量长度为32000,使用PCA降维到150。训练ConvNet的时候使用10000类的交叉熵损失函数作为目标函数,最后论文在LFW上达到了97.45%的验证精度。

结论

论文通过实验证明使用Multi-scale patches的Conv Net比只使用一个只有整张人脸的patch的效果要好。DeepID1是2014年的论文距离今天快5年了,这5年人脸识别的准确率已经非常高了,但经典论文留给我们的思路仍然是值得借鉴的。毕竟,万丈高楼平地起。

代码实现

这里推荐一个Tensorflow版本的代码实现,代码结构简单易懂。 使用了开放的 Youtube Aligned Face 数据集,在 8:1:1 的切分下达到了 95% 的识别精度。地址为: https://github.com/jinze1994/DeepID1

参考

https://zhuanlan.zhihu.com/p/82448662


欢迎关注我的微信公众号GiantPadaCV,期待和你一起交流机器学习,深度学习,图像算法,优化技术,比赛及日常生活等。

9611b2a12e493ff72dd0ac8798d03f18.png
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值