前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人脸识别系列四 | DeepID1算法

人脸识别系列四 | DeepID1算法

作者头像
BBuf
发布2019-12-04 18:12:33
1.2K0
发布2019-12-04 18:12:33
举报
文章被收录于专栏:GiantPandaCV

前言

这是人脸识别系列的第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的个数。

网络结构

在这里插入图片描述

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

人脸的最后特征

在这里插入图片描述

如上图所示,每个人脸会提取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,期待和你一起交流机器学习,深度学习,图像算法,优化技术,比赛及日常生活等。

欢迎在后台回复“交流群”加入GiantPandaCV交流群和我讨论算法哦,顺便看到这里的话在右下角点下在看哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 题外话
  • 介绍
  • 贡献
  • 算法原理
    • 算法过程
    • 网络结构
    • 人脸的最后特征
    • 训练
    • 结论
    • 代码实现
    • 参考
    相关产品与服务
    人脸识别
    腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档