前言

这是人脸识别系列的第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,期待和你一起交流机器学习,深度学习,图像算法,优化技术,比赛及日常生活等。

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

  1. Python_机器学习_算法_第1章_K-近邻算法

    Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...

  2. python人脸识别特征脸法_人脸识别经典算法一 特征脸方法(Eigenface)

    这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新.特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的.特征脸用到的理论基础PCA在另一篇博客里:特征脸(Eig ...

  3. python识别人脸的年龄和性别_人脸识别是如何判断性别和年龄的?

    你能看出郭德纲和林志颖是同龄人吗?都是47岁,反正我看不出来. 虽说肉眼看不出来,很多人脸识别算法却可以识别出来. 在探讨人脸识别算法如何判断性别和年龄之前,需要先厘清人脸识别的原理. 我们人类记忆和 ...

  4. python人脸识别框很小_人脸识别:从传统方法到深度学习

    人脸识别:从传统方法到深度学习 这开始于上世纪七十年代,人脸识别成为了计算机视觉领域和生物识别领域最具有研究型的话题之一.传统方法依赖于手工制作模型特征,通过深度神经网络训练大量的数据集的方法也在最近 ...

  5. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项 - 全文

    人脸识别考勤机概要 人脸识别考勤机是一种新型的存储类考勤机,事先只需采集员工的面像,并建立档案,当员工上下班站在人脸识别考勤机的识别区域内,考勤机上就会快速的记录考勤状况并保存记录. 人脸识别考勤机是 ...

  6. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项

    人脸识别考勤机概要 人脸识别考勤机是一种新型的存储类考勤机,事先只需采集员工的面像,并建立档案,当员工上下班站在人脸识别考勤机的识别区域内,考勤机上就会快速的记录考勤状况并保存记录. 人脸识别考勤机是 ...

  7. 基于python的人脸识别检测开题报告_人脸识别系统的研究与实现(开题报告+论文+源程序)...

    人脸识别系统的研究与实现(开题报告+论文+源程序) 摘要 人脸识别因其在安全验证系统.信用卡验证.医学.档案管理.视频会 议.人机交互.系统公安(罪犯识别等)等方面的巨大应用前景而越来越成为 当前模式 ...

  8. 中艺人脸识别考勤机使用方法_人脸识别考勤机说明书.pdf

    人脸识别管理系统说明书 目 录 第一部分 使用概述 1 第一章 前言 1 第二章 安装说明 2 安装与连接2 使用环境需求5 使用流程6 开机6 第二部分 管理员配置与操作 8 第一章 配置管理员 8 ...

  9. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法

    展开全部 1."MENU" ->管理员验证,进入系统->登记用户->输入"工号"按OK->人脸图像采集,完62616964757a686 ...

最新文章

  1. C++ 四种强制类型转变与区别之处
  2. NDoc修改版,支持中文注释及中文界面。
  3. html5视频播放事件相关
  4. TCP流式套接字的异步事件WSAAsyncSelect编程
  5. linux top功能,[每日一题]说说Linux top命令的功能和用法
  6. 2020中国移动创客马拉松大赛移动云专题赛决赛成功举办
  7. 按键精灵post请求_按键精灵post数据库
  8. 数据结构_C语言_实验三_图 ——六度空间
  9. Java实现 LeetCode 134 加油站
  10. 虎牙直播电脑配置推荐2021 虎牙直播电脑配置清单
  11. jenkins插件管理提示_jenkins插件管理及安装
  12. 毛不易 胡同 伴奏 高品质定制纯伴奏
  13. 免费小巧的录屏软件Captura
  14. mongodb 10、mongodb从节点失联解决方法
  15. Content-Type 类型浅析汇总
  16. 将java文件打成jar包
  17. 人工智能时代下机器的未来
  18. 删除/清除/过滤标点(所有中英文标点)的正则表达式——Desktop Search开发笔记【经验积累】
  19. 第九课511遇见易语言大漠透明图制作与使用]
  20. Fail to execute goa; org.apache.maven.plugins:maven-complier-plugin:3.8.0:compile错误解决方法

热门文章

  1. 验证OpenStack安装
  2. 各大券商进军人工智能 业内人士:应多措并举促发展
  3. TensorFlow CIFAR-10数据集
  4. ubuntu搭建zookeeper集群
  5. Redis持久化 RDB和AOF 比较与选择
  6. C++原子操作 atomic的使用及效率
  7. lt、le、eq、ne、ge、gt的含义
  8. Spark _06_补充部分算子【一】
  9. 无招胜有招之Java进阶JVM(二)
  10. 打印出重复的姓名和重复的次数,并按重复次数排序: