作者丨葛政
学校丨早稻田大学硕士生
研究方向丨深度学习,计算机视觉
个人博客丨Xraft.Lab
相信做机器学习或深度学习的同学们回家总会有这样一个烦恼:亲朋好友询问你从事什么工作的时候,如何通俗地解释能避免尴尬?
我尝试过很多名词来形容自己的工作:机器学习,深度学习,算法工程师/研究员,搞计算机的,程序员…这些词要么自己觉得不满意,要么对方听不懂。经历无数次失败沟通,最后总结了一个简单实用的答案:“做人脸识别的”。
为什么这个答案管用,因为人脸识别在深度学习相关领域的课题中属于商业落地情景多,被普及率广的一项技术,以至于谁说不出几个人脸识别应用,都有那么点落后于时代的意思。
今天出这篇人脸识别,是基于我过去三个月在人脸识别方向小小的探索,希望能为非技术从业者提供人脸识别的基本概念(第一部分),以及为人脸识别爱好者和入门人员提供储备知识和实验数据参考(第二、第三部分),也欢迎专业人士提供宝贵的交流意见。
本文将从接下来三个方面介绍人脸识别,读者可根据自身需求选择性阅读:
Chapter 1:人脸识别是什么?怎么识别?
Chapter 2:科研领域近期进展
Chapter 3:实验及细节
Chapter 1
人脸识别是什么
人脸识别问题宏观上分为两类:1. 人脸验证(又叫人脸比对)2. 人脸识别。
人脸验证做的是 1 比 1 的比对,即判断两张图片里的人是否为同一人。最常见的应用场景便是人脸解锁,终端设备(如手机)只需将用户事先注册的照片与临场采集的照片做对比,判断是否为同一人,即可完成身份验证。
人脸识别做的是 1 比 N 的比对,即判断系统当前见到的人,为事先见过的众多人中的哪一个。比如疑犯追踪,小区门禁,会场签到,以及新零售概念里的客户识别。
这些应用场景的共同特点是:人脸识别系统都事先存储了大量的不同人脸和身份信息,系统运行时需要将见到的人脸与之前存储的大量人脸做比对,找出匹配的人脸。
两者在早期(2012年~2015年)是通过不同的算法框架来实现的,想同时拥有人脸验证和人脸识别系统,需要分开训练两个神经网络。而 2015 年 Google 的 FaceNet [1] 论文的发表改变了这一现状,将两者统一到一个框架里。
人脸识别,怎么识别
这部分只想阐明一个核心思想:不同人脸由不同特征组成。
理解这个思想,首先需要引入的的是“特征”的概念。先看下面这个例子:
假设这 5 个特征足够形容一张人脸,那每张人脸都可表示为这 5 个特征的组合:
(特征1,特征2,特征3,特征4,特征5)
一位双眼皮,挺鼻梁,蓝眼睛,白皮肤,瓜子脸的欧美系小鲜肉即可用特征表示为(见表格加粗项):
(1,1,0,1,0)
那么遍历上面这张特征表格一共可以代表张不同的脸。32 张脸可远远不够覆盖 70 多亿的人口。为了让不同特征组成的人脸能覆盖足够多人脸,我们需要扩充上面那张特征表。扩张特征表可以从行、列两个角度展开。
列的角度很简单,只需要增加特征数量:(特征6.脸型,特征7.两眼之间距离,特征8.嘴唇厚薄…)实际应用中通常应用 128,256,512 或者 1024 个不同特征,这么多特征从哪来,该不会人为一个一个去设计吧?这个问题在后面会解答。
从行的角度扩充也很好理解,比如“特征3”,除了值 0 代表蓝色,值 1 代表灰色,是不是可以增加一个值 2 代表黑色,值 3 代表没有头发呢?此外,除了这些离散的整数,我们也可以取连续的小数,比如特征 3 的值 0.1,代表“蓝中略微带黑”,值 0.9 代表“灰中带蓝”……
经过这样的扩充,特征空间便会变得无限大。扩充后特征空间里的一张脸可能表示为:
(0, 1, 0.3, 0.5, 0.1, 2, 2.3, 1.75,…)
之前提出的问题:用于表示人脸的大量特征从哪来?这便是深度学习(深度神经网络)发挥作用的地方。它通过在千万甚至亿级别的人脸数据库上学习训练后,会自动总结出最适合于计算机理解和区分的人脸特征。
算法工程师通常需要一定的可视化手段才能知道机器到底学习到了哪些利于区分不同人的特征,当然这部分不是本节重点。
阐明了不同人脸由不同特征组成后,我们便有了足够的知识来分析人脸识别,到底怎么识别。
现在考虑最简单最理想的情况,用于区分不同人的特征只有两个:特征1和特征2。那么每一张脸都可以表示为一个坐标(特征1,特征2),即特征空间(这个例子里是二维空间)内的一个点。
人脸识别基于一个默认成立的假设:同一个人在不同照片里的脸,在特征空间里非常接近。
为什么这个假设默认成立,设想一下,一个棕色头发的人,在不同光照,遮挡,角度条件下,发色看起来虽然有轻微的区别,但依然与真实颜色非常接近,反应在发色的特征值上,可能是 0 到 0.1 之间的浮动。
深度学习的另一任务和挑战便是在各种极端复杂的环境条件下,精确的识别各个特征。
上图是在熊本做大规模人脸数据集去噪演讲时用的 PPT,三张山下智久的照片经过神经网络提取出 128 维的特征后,变成了 3 个在 128 维空间中的点(红色),石原里美的特征点为绿色。
这张 PPT 想表达同样的意思:同一人的不通照片提取出的特征,在特征空间里距离很近,不同人的脸在特征空间里相距较远。
再来考虑人脸识别领域的两个问题:人脸验证和人脸识别。
人脸验证
比如 FaceID 人脸解锁,iPhone 事先存了一张用户的照片(需要用户注册),这张照片变成了转换成了一连串特征数值(即特征空间里的一个点),用户解锁时,手机只需要对比当前采集到的脸和事先注册的脸在特征空间里的几何距离,如果距离足够近,则判断为同一人,如果距离不够近,则解锁失败。距离阈值的设定,则是算法工程师通过大量实验得到的。
人脸识别
同样考虑一个场景,人脸考勤。公司 X 有员工 A,B,C,公司会要求三名员工在入职的时候各提供一张个人照片用于注册在公司系统里,静静地躺在特征空间中。
第二天早上员工 A 上班打卡时,将脸对准考勤机器,系统会把当前员工 A 的脸放到特征空间里,与之前特征空间里注册好的脸一一对比,发现注册的脸中距离当前采集到的脸最近的特征脸是员工 A,打卡完毕。