支付宝刷脸——我们进入了一个怎样的刷脸时代

Posted 山在岭就在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支付宝刷脸——我们进入了一个怎样的刷脸时代相关的知识,希望对你有一定的参考价值。

  随着2016年6月份左右支付宝的一次更新,其中的刷脸功能终于从幕后走到前台,这次我就借支付宝上的刷脸系统,来聊聊人脸识别的那些事儿。事先声明,这是一篇科普小文章,言语轻松。

  一、简单界面蕴含不简单道理

  下面是支付宝刷脸过程中的一个界面(截图来自网络):

  这个刷脸界面主要元素有三个:脸部框、“眨眨眼”、一张脸。接下来我们逐一介绍。

  1、脸部框——人脸监测与人脸识别不可兼得

  支付宝刷脸的一个基本要求就是需要用户赏个脸,并且要把脸赏在界面的指定框线内,这样做实际上是节省了一个非常大的算法开销:人脸检测。

  首先说明一个问题,就是人脸检测和人脸识别是完全不同的两个领域,这也是人脸识别检测初学者容易混淆的两个概念。人脸检测重在检测,目标是在复杂场景中把人脸区域框出来,至于能不能正确识别,那人家不管;人脸识别重在识别,目标是确定眼前这张脸是谁(人脸识别)或者不是谁(人脸认证),至于怎么分割得到这张脸,这就是人脸检测的事儿了。研究人脸检测的学者不会关心怎么识别人脸的问题,同样人脸识别的研究者也不会关心怎么分割检测人脸的问题。搞人脸识别,默认就是人脸检测已经完成了,直接拿已经截好的人脸图像做训练做测试就成。想当初我刚刚接触人脸识别方面的研究生课题,曾花了好长时间去研究怎么制作训练样本,怎么把人脸分割的完美,后来发现实在是一大弯路。

  但话说回来,人脸检测和人脸识别虽然在理论研究上分属于不同领域,但在实际应用中去不能分家。肯定是先人脸检测分割出人脸,在人脸识别确定脸是谁的,但有一个问题,要想准确快速的进行人脸检测与人脸识别,算法运算的开销两个简直不相上下,相对于手机平台都非常大。于是无外乎以下两种解决方式:

  方案一:人脸检测和人脸识别同时运行,打造全智能平台。

  这种方案听起来很酷炫,什么都让机器来做,先检测分割人脸再识别人脸,但是这样做出的系统性能却不理想,假如人脸检测的成功率为0.9,人脸识别的成功率也是0.9,那么整个系统正确检测人脸再加上正确识别人脸的成功率只有0.81;性能大打折扣,运算开销却翻了一番,目前来说不可取。

  这种方案另外一个致命的问题就是算法性能。对于手机端人脸识别程序来说,真正的人脸识别算法可以放到服务器端来做,在手机端只需简单的评估一下图像质量,然后就把采集的图像放到服务器上,费时的事儿让服务器做就行,最后只需把人脸识别的记结果(一个标签而已)再传给手机端就行,网络流量什么的都不是问题。而人脸检测则不行,人脸检测的整个阶段必须都在手机端进行,就算我们能够找到检测率达99.99%的人脸检测算法,但却不一定能移植到手机上。

  方案二:外加限制条件,简化人脸检测流程

  这种做法在目前的应用环境中明显值得一试,支付宝就是这样做的。提前预定义一个人脸框,很友好的要求人们把要刷的脸赏在里面,可以说当我们把脸放在人脸框里的时候,就已经帮助手机系统完成了人脸检测,因为我们已经提前告诉了程序“框框里面的图像就是人脸,你专心做识别就好”,程序接下来要做的就是对图像的质量(光照是否均匀等等)把把关,做一些人脸检测的辅助工作,然后就把人脸图像传给服务器就完事儿了,坐等服务器返回的识别匹配结果即可。

  这里有一点我想多说两句,就是在图像检测、图像识别过程中我们并不反对人为的添加外界辅助条件、人为的创造适宜的检测环境,并且鼓励使用好的、合适的辅助方法。一个典型的例子就是在基于图像的工业异常检测中,往往需要在传送带、生产线等地方外加一个稳定的光源,为异常检测创造好的环境。有时候稍稍进行一点人为干预,就能大幅降低算法研究以及硬件运算上的成本,并且能够得到更加稳定的检测识别结果,何乐而不为呢?没有万能的算法,但也没有解决不了的问题。对于支付宝刷脸来说,人脸检测可能就是一个技术上的难点,因为人们可能会在任意时间、任意地点就拿出手机刷个脸,图像的光照、背景环境十分恶劣,想要在这种极度不可控条件下精准的完成人脸检测确实难度很大,于是我们迂回了一下,添加了一个人脸框,让用户协助我们解决了这个难题,并且也没降低多少体验度。

  2、眨眨眼——活体检测

  “活体检测”这句话听起来蛮吓人的,说白了就是确认摄像头前面赏脸的是否是一个真正的活人,而非一张照片、设置一段视频什么的。在刷脸过程中,系统会提示用户进行一些指定动作,例如“眨眨眼”、“向某个方向转头”等等。这可并不是一般人眼中的无稽之谈,而是人脸识别在实际应用中防伪造非常重要的一步。假如有人拿一张当事人的照片来刷脸,那照片是不会眨眼的,所以能防伪;更极端的假设,有人拿了一段包含当时人头像的视频来伪造,视频中的人脸虽然能动,但却不能做出指定动作(如事先录好的眨眼视频,无法应对转头命令等等),而且由于显示屏的反光问题,目前想针对显示屏显示的图像进行人脸识别还是很难做到的,也没人去研究。

  二、人们对刷脸过程中存在的疑虑

  毕竟人脸识别在实际应用中算是一项比较新的技术,相对于已有的指纹识别、虹膜识别等已经广泛应用的识别技术来说,还没有被广大人民所接受。相应的在实际使用中人们也会对人脸识别的安全性、可行性产生各种各样的疑虑,接下来我们就一一解释一下人脸识别在实际应用过程中可能会遇到的常见问题和挑战。

  1、人脸识别和人脸认证

  这是一个人脸识别研究领域的科班问题,也是目前人脸识别算法研究的两个不同方向。简单来说,人脸识别是判断当前这张人脸图像是谁的,人脸认证是判断当前这张人脸图像是不是谁的。之所以在这里提这两个概念,是因为在实际的刷脸系统中,往往都是使用的人脸认证,即用来判断当前人脸是不是属于某个用户,而无需识别出当前人脸具体属于哪个用户的。人脸认证属于二分类问题(“是”与“不是”),而人脸识别则属于多分类问题(有多少种待识别人脸就需要识别多少类)。就目前的算法可靠性来说,人脸认证要一定程度上优于人脸识别,所以在实际应用中人脸认证要走的更远。用一句话来总结一下人脸认证,那就是“把对的识别错了没关系,再多刷两次就行了,但把错的识别成对的,后果就很严重”。

  2、刷脸过程中存在的挑战和干扰因素

  俗话说:没有万能的算法。当今人脸识别技术虽然发展迅速,但也不是没有软肋。在刷脸过程中,最怕图像的质量太差,导致有过多的噪声干扰。这里直接说噪声干扰什么的显得太笼统,人脸识别过程中的干扰主要有光照、表情、人脸朝向等干扰因素,如下图所示:

  以上这几种情况的干扰会严重影响刷脸过程中的准确率,这也是为什么支付宝在刷脸时提示我们要“正对摄像头,保证光线充足”。说实话,人脸识别算法是很矫情的,光照不均了效果会差,脑袋方向不正了效果也会差,脸上有表情了效果还会差。如果能够尽可能高的提高算法对于这些干扰的适应性(也就是平常所说的算法鲁棒性),那就可以把它拿出来卖钱了,face++就是一个典型的例子。

  三、目前刷脸过程中那些问题还需解决

  还是那句话,没有万能的算法。刷脸技术虽然相对于以前已经取得了突破性的进展,但在算法研究和实际应用阶段依然还存在一些没有解决但又十分棘手的难题,这里就简单例举几个。

  1、证件照与当前实际人脸图像间的差异

  在刷脸过程中,本质上就是拿当前这张人脸图像与数据库中预存的人脸图像进行比对(只是比对的过程十分复杂,目前主流的都是用DeepLearning来做),来确定当前的刷脸者是谁。这也就意味着需要事先采集用户的权威人脸照片作为存根,放在数据库中以备刷脸比对之用。那么如何获取能够代表用户本人的具有权威甚至法律效率的人脸照片呢?对于一些小的刷脸系统,如各个公司的门禁考勤、小区的门禁系统等等,其用户人数也就几百到一千人之间,这种数量级的应用在采集比对样本的过程中完全可以让每个刷脸用户提交一张自己近期的免冠照片,毕竟人少好管理。相比之下像各大银行、支付宝等电商等机构要采集用户的权威人脸图像比对样本可就不是特别容易了。首先是用户群体庞大,一般都是几十万至上百万人,让大家每人提交照片工作量非常大;再者就是这些机构的业务都和金钱相关,对安全性要求极强,对应的要求用户提供的比对样本也要一定程度上具有法律效率,不易伪造。那么话说回来,什么样的人脸图像样本既容易采集,又能够作为金钱交易的凭证呢?那就是身份证。

  的确,用身份证上的人脸图像作为预留比对样本既容易采集(甚至说可以不用采集,因为这些电商、银行机构在用户注册过程中基本上已经拿到用户的身份证图片了),又具有权威性。但问题是每个人的身份证都会用十几年,这将直接导致用户当前的相貌与当年身份证上留存的证件照避免不了的会有较大差异,如何在存在这种差异的情况下仍然能够将用户现在的人脸照片与若干年前的身份证图片进行准确匹配,这是理论上的一个难点,不过值得庆幸的是支付宝所用的刷脸系统貌似已经把这个问题解决的差不多了。

  2、相似脸问题

  有一个问题值得思考,那就是对于真正意义上相似的两张脸,例如同卵双胞胎,人眼都很难分辨,那刷脸系统会怎么解决呢?答案是:目前没法解决。刷脸刷脸,我们看的只是脸,脸一样了(或者说是高度相似),刷脸系统就会认为人也是一样的,因此刷脸认证大多数是一种辅助识别手段。当然我们如果真要在这个问题上较真的话,那么世界上有没有两个人的脸是百分之百相同的呢?答案肯定是没有,至于人脸识别算法能够识别到什么样的精度,区分出什么样相似程度的相似脸,这就要靠学者们的努力了。

  3、准确率问题

  这个问题无需多说,坦白的讲,现阶段人脸识别的准确率还赶不上指纹识别。这也就是为什么支付宝涉及现金相关的支付操作仍然是以密码和指纹为主,没有放权给刷脸系统。具体将来怎么发展,还需要看人脸识别领域的算法研究进展如何。

  四、漫谈人脸识别

  说了这么多刷脸的东西,其实最本质的还是归功于人脸识别算法的突飞猛进。从90年代的子空间方法(直接算欧氏距离广义上也算一种子空间),到如今研究得如火如荼的深度学习方法,人脸识别的算法一直在发展,准确率、鲁棒性一直在提升,这也促使刷脸系统从科幻电影里真正走到了我们的生活之中,在这篇文章的最后,简单聊聊人脸识别发展历程中那些具有里程碑意义的东西。

  1、子空间中的人脸识别——空间映射的变换魔法

  子空间人脸识别可以说是最早的、理论相对系统的人脸识别算法,最具代表性的是当时提出的PCA(Eigenface)和Fisher(Fisherface)。子空间的精髓就是映射,原始图像可以看成存在于基本的高维欧氏空间(有多少像素就是多少维)。在基本欧氏空间直接度量距离效果不佳,那就通过某种映射方式将图像映射到别的子空间去,不同的映射方式会构建出不同的映射子空间,在映射过程中维数可升可降。PCA是一种映射方式,Fisher是一种映射方式,核函数也算一种映射方式,流形呢?也算,还有一种终极的映射方式,那就是支持向量机。在这个子空间不同类样本间不易区分,在别的子空间就有可能更容易区别,找到一个易于区分不同类样本的维度空间,便是子空间方法的目的所在。

  2、几何形态特征的人脸识别——可见特征的构造大赛

  在人脸识别研究过程中,人们从单纯的像素映射,开始向人为构造特征的方向转变。在这个阶段,人们更加注重人脸图像中的相对宏观的几何特征,更倾向于利用像素之前存在的特殊关系来描述人脸。人们对原始人脸图像中的像素进行重组,计算它们、抽象它们,在它们的基础上再构造出更具体、特性更显而易见的特征,然后再拿这些构造出的特征去计算相似度。在子空间阶段,特征提取的概念还很模糊,子空间既算是特征(如PCA算是主成分特征),又可以看成一种度量方法;而在几何形态特征研究阶段,人们越来越意识到特征提取相对于图像识别的重要性,“特征提取+模式分类”的模式识别框架正式形成。在这个阶段,人们热衷于去构建特征,去构建出好的、描述能力强、特性突出的特征对图像进行重组、进行再表示,这也衍生出了当时极具代表性的诸如LBP、Shift、Gabor等特征描述子,极大的提高了图像识别算法的性能。不过在这个时期分类器方面的研究进展则相对缓慢,基本上是支持向量机一统天下。

  3、稀疏表示人脸识别——面向数据学习的里程碑

  在LBP、Shift、Gabor这些高效特征描述子横行天下的时候,很多学者都认为,图像像素本身包含的信息虽然最全面(任何特征提取都会丢失一定的数据信息),但像素数目庞大、信息过于冗余、无规律可循,因此当时很少有算法会直接在图像像素数据层面上做操作。然而随着稀疏表示理论的提出,指明了图像的原始像素数据在人脸识别中所起的重大作用。在稀疏表示领域研究中一个里程碑意义的文章:《Robust Face Recognition via Sparse Representation》,这篇文章里对稀疏表示介绍得十分详细,是稀疏表示方面论文中必定引言的一篇文献。稀疏表示作为一种面向数据学习的分类识别方法,其核心是最优化问题的求解,算法相对较为复杂,效果却出奇的好。毕竟在不提取任何特征的情况下,就能把人脸识别的正确率提高到95%以上,在当时看来确实有点难以相信。

  4、深度学习人脸识别——现阶段的最大赢家

  目前最火的人脸识别算法是基于DeepLearning的。由于它实在太火了,一两句话说不清楚,所以我之前专门写了一篇博文进行介绍:深度学习卷积神经网络大事件一览



如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。


以上是关于支付宝刷脸——我们进入了一个怎样的刷脸时代的主要内容,如果未能解决你的问题,请参考以下文章

支付宝刷脸支付落地北京 技术已在三四线城市铺开

扫码支付即将成为过去式?刷脸支付将带来更大风暴

支付宝刷脸认证

面部识别科普(刷脸支付)

刷脸认证怎么操作?

thinkphp有没有集成支付宝双功能付款的详细教程呢,在网上找了好多,出现好多问题,求大神指点。