tips:
1)数据驱动训练端到端的训练,减少人工干预,少做人为假设,机器自己学习最优参数。
2)对齐和检测识别合二为一,共享底层特征。
采访内容转载自:http://www.sohu.com/a/197222568_465975,以下为采访实录:
人脸识别领域的「激荡 20 年」
我从 97 年做本科毕业设计的时候就开始做人脸识别,概括下来,这 20 年里人脸识别领域经历了几次小起伏和一次大起伏。
如果从历史的角度看,94 年到 97 年其实是一个人脸识别的小高潮。美国的国家标准与技术研究院(NIST)在 1994-1995 年的时候举办了一个竞赛,叫 FERET(Face Recognition Technology),并且建了一个包含一千一百多人,数千张照片的人脸数据库。虽然现在看来这个数据库规模很小,但是在当时已经是很大的数据了。当时有一些美国的知名高校,比如 CMU、UMD、哥大,在 94、95 年参加竞赛,取得了一些进步,然后在 97 年的时候发表了一些文章。其中有一篇发表在 PAMI 上面的,叫做 Fisherface [1],可能现在还是自 91 年的 Eigenface [2] 以来,整个人脸识别领域引用最高的文章之一。Fisher 代表的是费舍尔线性判别分析(Fisher Discriminative Analysis)算法,对输入图像 X 用 W 做线性变换 Y = WX,将其降维映射到另一个空间得到向量 Y,而问题的核心在于如何找到合适的 W。97 年 Fisherface 这篇文章采用了线性判别分析方法,简单来说就是找一个空间,在这个空间里同一个人的照片尽可能聚集在一起,不同人的照片尽可能远离。这就是就是费舍尔判别准则:把同一个人的照片间距离称为类内距离,不同人的称为类间距离,判别函数试图让类内距离尽可能小,类间距离尽可能大。而 Fisherface 就基于这样一个准则去寻找 W,做线性变换。这个工作的影响非常深远,一直到 2010 年前后,很多人脸识别方法都还是在以这个准则为目标来寻求所谓最优的变换。
90 年代的小高峰过去之后,2002 年到 2004 年还有一些非常重要的工作,在对图像进行线性变换前先对它做特征提取。其中影响力最大的是 Gabor 小波变换 [3] 和 LBP(Local Binary Patterns)[4]。其中,Gabor 小波其实是一个加窗的傅里叶变换。我们把原图用 Gabor 滤波器函数进行处理,处理后维度可能比原图更高,例如,用了 40 个 Gabor 小波滤波器的话,维度会变成原图的 40 倍,我们在此基础上再去求 W,一方面 W 可以把特征维度降低,另一方面还是通过 W 实现类似 Fisher 的目标。
Gabor 小波变换是很早就有的方法,但是这个工作的意义体现在和后来的深度学习有密切的关系。Gabor 小波滤波器的参数,或者说权重,是通过 Gabor 小波人为定义出来的。深度学习的底层其实也是一些滤波器,它和传统方法的不同就是参数不是人为定出来而是通过数据学习出来的。而二者的联系在于,通过学习得来的底层滤波器非常像 Gabor 小波滤波器或者高斯导数滤波器。尤其是在一个不是特别深的卷积神经网络里,前面几层,尤其是第一层的滤波器会非常像人为定义出来的滤波器。这并不是一个偶然现象,其中是存在必然联系的,我们可以认为二者都是在试图提取一些特定朝向的边缘特征。除了与深度学习的联系之外,这个工作在性能上也较 Fisherface 有了大幅度的提高。
后来大家普遍觉得,寻求一个把不同人分得很开的低维空间这样一个非常复杂的目标可能不是一个简单的线性变换能够解决的。毕竟我们要把图像从非常高维的空间映射到非常低维的空间,同时又希望获得好的判别能力。所以大家想方设法地去找一些非线性的变换。我们实验室在 2007 年发过一篇 ICCV 的工作 [5],是在 Gabor 小波滤波器的基础上做分段线性来逼近一个可能非常复杂的非线性函数。这个工作后来也申请了专利,并授权给合作伙伴银晨做了大量的应用。这些应用包括国家出入境管理局的基于数亿护照照片的人脸识别系统,以及全国十余个省的省厅级大库人员比对系统。这也是人脸识别的在国内第一波成功应用,解决的是一个人有多个户口或护照的「多重身份问题」,这些系统最多在一个省内就识别出数以万计的有多重身份的人,其中不乏洗白了身份的在逃人员。
除了分段线性外,另一种常见方法是用 Kernel 技巧做非线性的特征提取。此外,2000 年《科学》杂志上的两篇文章,Isomap [6] 和 LLE [7],引领了流形学习这个领域的进展。因此 2000 年前后,特别是 03、04 年的时候,国内和国际上很多人开始做流形学习。流形学习试图找一个非线性的变换,得到一个好的空间,能够把类内聚集,类间分开这个目标实现得更好,本质上也是想解决非线性问题。
2009 年有一个稍显昙花一现的方法是稀疏表示。它本质上还是一个线性模型,只不过没有添加 L2 正则项,而是添加了 L1 或者 L0 的。我们倾向于认为它在信号处理等底层视觉处理上是有用的,但在人脸这样高层任务的处理上,不解决特征提取这个最根本问题。
2012 年左右,ImageNet 的巨大成功直接把深度学习带到了人脸识别领域。从 2013 年开始,人脸识别的所有技术非常迅速地切换到了深度学习上。深度学习的核心就是特征学习,换句话说,就是不再人为定义 Y = WX 形式的特征,而是交给数据去学习一个通过神经网络实现的 Y=f(X) 形式的变换。
深度学习有几个非常重要的特征:第一是非线性,并且和 Kernel 方法相比,是一个显式的非线性。Kernel 方法是通过在原始空间中进行 Kernel 函数计算逼近目标空间中的两个输入的点积,但由于 Kernel 函数的种类非常有限,所以不一定能找到适合特定问题的 Kernel 函数。第二是逐层抽象,这非常符合过去研究者一直期望找到的特征提取方式:从底层的边缘、角、点这样的基础特征,到圆、椭圆这样的稍微复杂的模式,再到眼睛、鼻子、嘴这样的部件,到脸型、是否带眼镜等属性,最后是性别、身份、表情等高级属性。这样的特征提取方式非常符合人在认知方面的需求。第三是技术上解决了多层特征提取问题,原来人为设计滤波器的时候做不了很多层。比如在一层 Gabor 小波滤波器的基础上再做一层 Gabor 小波滤波器的话,我们已经不知道是什么意思了。LBP、SIFT [8]、HOG 等方法尝试在滤波器的基础上做直方图的表达,然而再往上抽象,就又遇到瓶颈了。
我认为深度学习给人脸识别领域带来了一次跨越式的发展。举个例子,在 12 年甚至 13 年的时候,研究者还普遍认为,基于二代身份证的人证比对是一个不可能完成的任务。它的难度太大了:身份证的照片可能是多年以前差别很大的旧照,大小又只有 102×126,而且被从 30k 左右强制压缩到了 1k,损失了非常多信息。但是现在我们已经可以做到,在人配合地去看镜头的时候,做到 0.01% 的误识率(false accept rate)的情况下,有 98% 以上的识别率(Recognition rate)。也就是说一万个人冒充你,只有一个人能成功的条件下,自己本人被正确识别的概率在 98% 以上。在 13 年之前,万分之一精度可能只有 20% 不到的召回率。
图像识别「问题解决」目标尚远
如今,虽然 ImageNet 竞赛已经结束了,但是图像识别问题还远远没有解决。如果我们寄希望于用深度学习解决图像识别问题,就意味着我们要收集所有待识别物体的大量有标注数据。这件事情需要多少人力、物力、时间是不可知的,我们甚至无法定义这个世界上有多少需要识别的物体种类。ImageNet 中有一千类,然而日常生活中需要识别的物体至少在万类规模,大千世界里出现过的物体可能有百万类甚至更多。另外,实际应用中的大量需求是难以想象的,例如对车辆安检需求,可能需要拍车底部的照片。这样的问题是否只能通过采集大量数据来解决,还要打一个大大的问号,而且对于做科学技术的人来说,这个过程非常痛苦,不是一个「优雅」的解决办法。
我们期望有一个像人一样解决问题的办法。以让小区里的巡逻机器人学会检测狗屎为例:
在前深度学习时代,这个过程大概分三步:第一步,花几个月时间收集和标注几百或上千张图;第二步,观察并人为设计形状、颜色、纹理等特征;第三步,尝试各种分类器做测试,如果测试结果不好,返回第二步不断地迭代。人脸检测就是这样进行的,从上世纪八十年代开始做,大量研究者花了大概二十年时间,才得到了一个基本可用的模型,能较好地解决人脸检测的问题。而后在监控场景下做行人和车辆的检测,前后也花了大概十年的时间。就算基于这些经验,做出好用的狗屎检测器,至少还是需要一年左右的时间。
在深度学习时代,开发一个狗屎检测器的流程被大大缩短了。尽管深度学习需要收集大量的数据并进行标注(用矩形把图中的狗屎位置框出来),但由于众包平台的繁荣,收集一万张左右的数据可能只需要两星期。接下来,我们只需要挑几个已经被证明有效的深度学习模型进行优化训练就可以了,训练优化大概需要一个星期,就算换几个模型再试试看。这样完成整个过程只需要一两个月而已。而在后深度学习时代,我们期待先花几分钟时间,在网上随便收集几张狗屎照片,交给机器去完成余下所有的模型选择与优化工作,或许最终只需要一、两星期解决这个问题。
总之,我们认为,图像识别,或是说计算机视觉问题,应该有不依靠大数据的、更优雅的解决方案。我们的团队现在也作了一些这方面的尝试。例如以大量数据学习出来的人脸识别的模型为基础,使用少量数据精调,来完成表情识别、年龄估计等任务,这样得到的技术甚至赢得了国际竞赛的冠军或亚军。此外,在数据有限的情况下,我们还尝试了在深度学习过程中融入人类专家知识,以减少对数据量的需求。我们的一种策略是把神经网络中需要大量数据进行优化的低层连接权重,替换成人为定义的特征,例如传统的 Gabor 特征,从而减少对大数据的需求,也获得了不错的结果。
深度学习的端到端思想对人脸识别的影响
前深度学习时代的人脸识别的标准流程里,第一步是人脸检测,其结果就是在图片中的脸部区域打一个矩形框。第二步是寻找眼睛、鼻子、嘴等特征点,目的是把脸对齐,也就是把眼鼻嘴放在近乎相同的位置,好像所有的脸都能「串成一串」一样,且只保留脸的中心区域,甚至连头发不要。第三步是光照的预处理,通过高斯平滑、直方图均衡化等来进行亮度调节、偏光纠正等。第四步是做Y= f(X)的变换。第五步,是计算两张照片得到的Y的相似程度,如果超过特定的阈值,就认定是同一个人。
深度学习的到来对整个流程有一个巨大的冲击。
一开始,研究者用深度学习完成人脸检测、特征点定位、预处理、特征提取和识别等每个独立的步骤。而后首先被砍掉的是预处理,我们发现这个步骤是完全不必要的。理论上来解释,深度学习学出来的底层滤波器本身就可以完成光照的预处理,而且这个预处理是以「识别更准确」为目标进行的,而不是像原来的预处理一样,以「让人看得更清楚」为目标。人的知识和机器的知识其实是有冲突的,人类觉得好的知识不一定对机器识别有利。
而最近的一些工作,包括我们在今年ICCV上的一个工作[9],就是把第二步特征点定位砍掉。因为神经网络也可以进行对齐变换,所以我们的工作通过空间变换(spatial transform),将图片自动按需进行矫正。并且我有一个猜测:传统的刻意把非正面照片转成正面照片的做法,也未必是有利于识别的。因为一个观察结果是,同一个人的两张正面照相似度可能小于一张正面、一张稍微转向的照片的相似度。最终,我们希望进行以识别为目标的对齐(recognition oriented alignment)。
在未来,或许检测和识别也可能合二为一。现在的检测是对一个通用的人脸的检测,未来或许可以实现检测和识别全部端到端完成:只有特定的某个人脸出现,才会触发检测框出现。
第五步的相似度(或距离测度)的计算方法存在一定的争议。我认为特征提取的过程已经通过损失函数暗含了距离测度的计算,所以深度特征提取与深度测度学习有一定的等价性。但也有不少学者在研究特征之间距离测度的学习,乃至于省略掉特征提取,直接学习输入两张人脸图片时的距离测度。
总体来说,深度学习的引入体现了端到端、数据驱动的思想:尽可能少地对流程进行干预、尽可能少地做人为假设。
当然,这一切的前提是大数据,否则还是需要人的知识嵌入。从进化的角度,人脑在出生时就是一个历代祖先大数据学习的结果。而人的个体的后天发育是通过观察得到的小数据和教育给予的知识对大脑进行适应性修改的过程。将现在的人工智能与人类进行对比,就能发现人工智能是专科智能而非全科智能,而且专科智能还太依赖大数据。我们可以认为深度学习其实只是归纳法的胜利,而人的学习还有很大一部分是基于演绎推理。因此,我认为在未来,会出现知识与数据联合驱动的方法,但这面临着一个非常大的挑战,即机器知识和人类知识在表示上的鸿沟的弥合。人的知识表达在书本上,机器的知识蕴含在神经网络里,现在二者没有办法对应,更不能互相转化。这是未来非常值得去研究的一件事情。