深度学习在人脸识别中的应用——优图祖母模型的“进化”
本文转自:腾讯优图
说到人工智能(Artificial Intelligence, AI)人们总是很容易和全知、全能这样的词联系起来。大量关于AI的科幻电影更给人工智能蒙上一层神秘的色彩。强如《黑客帝国》、《机械公敌》中的AI要翻身做主人统治全人类。稍弱点的《机械姬》里EVA懂得利用美貌欺骗中二程序员,杀死主人逃出升天。最不济也可以蠢萌蠢萌的像WALL·E能陪玩、送礼物还能谈个恋爱。
其实人工智能这个词在1956年达特茅斯会议上正式诞生时,目标就是想要让机器的行为看起来像是人所表现出的智能行为一样的“强”人工智能。然而人工智能的研究是高度技术性和专业性的,各分支领域都是深入且各不相通的,因而涉及范围极广。正是这种复杂属性,导致人们对人工智能的研究进程总是磕磕碰碰,反复地经历过分乐观的浪潮与极度悲观的寒冬。时至今日,想要完成全知、全能的强人工智能仍然只是一个长远目标。
虽然目前的技术水平还远不能实现强人工智能,但在一些非常特定的领域里,弱人工智能技术正在经历前所未有的迅猛发展,达到或已超越人类的最高水平。例如深蓝、Alpha Go分别在国际象棋和围棋领域击败世界冠军。例如自然语言理解、语音识别和
人脸识别
接近、达到甚至超越普通人的识别水平。虽然这些弱人工智能技术并不能真正地推理、理解和解决问题,但是面对特定的任务它们所给出的“判断”看起来是具有智能的。而正是这些看似“弱弱”的人工智能技术,在悄悄的改变人类生活的方方面面。它们以点带面完成越来越多的“简单任务”,为人们提供更加简洁、方便和安全的服务。
人脸识别正是众多“弱弱”的人工智能技术之一。通过看人的面孔识别其身份,对每一个正常的人来说都是再简单不过的。如果强行将人脸识别的难度和下围棋来比,应该没有人会觉得人脸识别更难。然而从计算机的角度来看,至少在输入数据的复杂度上人脸识别是远超围棋单步走子决策的。如图1(a)所示,一张Angelababy的图像在计算机看来,其实就是一个数字矩阵如图1(b)。数字矩阵的每个元素取值范围是0-255的整数。通常人脸识别算法所需的输入图像至少在以上,大的可能达到。理论上不同的可能输入共有种(每个像素的取值范围为0-255)。而围棋任意单步走子的可能局面上限为(每个棋盘格只能有黑子,白子,无子三种情况),远远小于人脸识别。无论是围棋还是人脸识别,通过遍历完整的输入空间来做出最优的决策,就计算复杂度而言都是完全无法接受的。
图1:数字化的人脸识别 VS. 围棋单步决策
其实对几乎所有人工智能问题,如何通过更高层次的抽象来理解输入从而更快速的做出决策都是解决问题的关键所在。近十年来引领新一波人工智能浪潮的核心技术“深度学习”就是这样一种方法,它通过少则近几层多则上百层人工 神经网络 不断地对高维的输入数据块进行抽象与理解并最终做出“智能”的决策。单凭深度学习技术可能仍然难以完成全知全能的“强”人工智能,但它却是完成任何特定“弱”智能任务的一把牛刀。正是看到深度学习技术如此巨大的潜力,国际互联网巨头Google,Facebook,Microsoft纷纷抢先布局,国内互联网领袖BAT也不惜资源进行技术储备,作为腾讯内部顶级的机器学习研发团队,优图也投入精英人力专注于深度学习技术的研发与产品落地。
本文着重以人脸识别为例介绍深度学习技术在其中的应用,以及优图团队经过近五年的积累对人脸识别技术乃至整个人工智能领域的一些认识和分享。
回顾——人脸识别的“浅”时代
在介绍深度学习技术在人脸识别中的应用之前,我们先看看深度学习技术兴起前的“浅”时代人脸识别技术。前面提到高维输入是所有类人工智能问题的一个普遍难题,学界称之为“维数灾难”(The curse of dimensionality)。其实在机器自动人脸识别技术研究的早期研究者们尝试过用一些非常简单的几何特征来进行人脸识别, 如图2所示(请原谅图片的质量,摘自93年的一篇人脸识别领域奠基之作[1])。
图2:基于几何特征的人脸识别
这样的朴素想法具有特征维数少的优点,所以不会遭遇维数灾难问题。然而由于稳定性差、区分能力弱和难以自动化等原因,这种做法很早就被抛弃。研究人员们发现,设计各种几何特征,折腾大半天还不如直接比较像素区域的差别准确,也就是所谓的模板匹配技术。然而,直接比对像素误差有个很容易想到的缺点,不同人脸区域对区分人的身份的重要性并不一样。事实上研究[2]表明眉毛和眼睛是区分人身份最重要的区域,其次是嘴巴,而大片脸颊区域所包含的身份信息是有限的。如图3所示,人类最难鉴别身份的是去掉眉毛和眼睛的人脸。
图3:不同区域对人脸识别的重要性
为了解决这样的问题,很长时间人脸识别都非常依赖于判别性特征的学习,最有代表性的工作莫过于fisherfaces[3],所谓判别性信息就是那种独一无二特征,就好像图4中所示,成龙的大鼻子,姚晨的大嘴,李勇的招牌马脸,姚明的魔性笑容。总而言之,只要能找到你独特的“气质”就能更好的认识你。
图4:具有判别性的人脸
判别性特征的想法非常直观有效也取得了一定成功,但是由于人脸的像素特征非常不稳定,不同拍摄设备和拍摄场景、不同的光照条件和拍摄角度等都会造成相同人脸的像素差异巨大。想要在各种复杂影响因素下找到一张人脸稳定且独特的特征就很难了。为了解决这些问题,研究人员开始研究比简单像素值更加稳定的图像描述子。其中比较主流的一种描述子Gabor描述子借鉴了人类大脑的视觉皮层中对视觉信息进行预处理的过程。大脑皮层中对视觉信息加工处理的操作主要有两种,一种是在简单细胞中进行的线性操作,一种是在复杂细胞中进行的非线性汇聚。如图5所示的是MIT大脑和认知科学学院人工智能实验室的主任Poggio教授提出的一个叫HMAX[4]的类脑视觉信息处理流程:
图5: HMAX图像信息处理过程
这其中的简单单元“S1 units”和“S2 units”进行了一种叫做Gabor小波滤波的操作。而复杂单元“C1 units”和“C2 units”进行了一种叫做Max Pooling的取局部区域最大值的操作。事实上除却直接使用事先设定的Gabor滤波器,HMAX等价于一个四层的神经网络,实际上已经初步具备了现代深度模型的雏形。
在深度学习诞生前的“浅”时代,人脸识别研究人员不断改进预处理过程、使用更好的描述子,提取更有判别性的特征,这些都在慢慢的提高计算机识别人脸的能力。然而直到深度学习横空出世前,“浅”时代的各种人脸识别方法,对人类本身所具有的人脸识别能力仍然望尘莫及。
拥抱——人脸识别的“深”时代
要赋予计算机完整的人脸识别能力,除了能认识人外其实还有几步非常重要的预处理过程。如图6所示,完整的人脸自动识别算法需要能自己从图像里找到哪有人脸,学界称之为人脸检测?哪里是眼睛鼻子嘴,学界称之为人脸特征点定位?最后才是提取前面说到的具有判别性的特征进行身份的识别,即狭义上的人脸识别。
图6:完整的自动人脸识别流程
在深度学习出现以前关于人脸检测、特征点定位和人脸识别这三个子任务的研究都是相对独立的展开的。从上个世纪90年代开始到2010年左右,经过不断的摸索,研究人员们对每个子任务都发现了一些比较有效的特征与方法的组合来解决问题如图7所示。然而由于研究人员需要根据每个子任务本身的特点设计不同的特征,选择不同的机器学习方法,因此技术的发展相对缓慢。
从2012年左右,受深度学习在整个机器视觉领域迅猛发展的影响,人脸识别的“深”时代正式拉开序幕。短短的四年时间里,基于深度卷积神经网络的方法不断在这三个子任务中刷新人工智能算法的世界记录。人脸识别“浅”时代让人眼花缭乱的各种技术和方法仿佛一页之间成为历史。人脸识别研究人员,不需要在挖空心思的设计特征,也不需要担心后面需要什么样的学习算法。所有的经验的积累过程转换为了深度神经网路算法自动学习过程。这正式深度学习算法最大的优点:自动学习对特定任务最有用的特征!
图7:人脸识别
考察一个单项的“弱”人工智能技术是否成熟,达到乃至超过人类的平均水平应该是一个比较通用的准则。说到这里不得不提一个人脸识别的标准评测数据库LFW(Labeled Face in the Wild)数据库。在2014年,Facebook使用一个叫做DeepFace的深度学习方法,第一次在LFW数据库上接近人类的识别水平(DeepFace: 97.35% VS. Human: 97.53%),其结果如图8所示:
图8: DeepFace深度学习网络
“Talk is cheap, show me the code”,自从DeepFace在人脸识别领域一战成名,让研究人员们看到了超越人类识别能力的曙光。随着几大开源深度学习项目(例如CAFFE,TORCH, TensorFlow)的发展壮大,基于深度学习的方法真正如雨后春笋般席卷整个人脸识别领域。事实也证明深度学习确实能够做到,短短一年以后就有很多基于深度学习的方法在LFW数据库上超过人类的识别能力,例如优图的人脸识别算法就在15年取得当时世界第一的99.65%准确率。
深度学习为什么如此神奇,能在短短的几年时间里一统江湖呢?抛开技术细节不谈,原理上来说最为关键的两个因素就是:层级式抽象和端到端可学习。
在回顾“浅”时代人脸识别方法历史时曾经介绍了基于几何特征的方法(图2)和基于判别性特征的方法(图4)。下图这些特征无疑都是针对人脸的某种抽象。由于原始图像输入的搜索空间巨大,只有通过恰当的抽象缩小搜索范围,才能最终做出合理的决策。对一个复杂的概念想要通过一层的抽象就将所有结构梳理清楚会是很难甚至不可能的,而深度神经网络这种多层结构给自底向上的逐级抽象提供了天然的模具。只要将足够多的数据输入到具有多层结构的深度神经网络并告知它你想要的输出结果,网络可以自动的学习中间层的抽象概念,如图9所示,好奇的研究人员将一个能够识别1000类物体的神经网络中的特征进行了可视化:
图9:深度神经网络特征可视化结果
从图中可以看到在深度神经网络的第一层有点类似人类科学家积累多年经验找到的Gabor特征。第二层学习到的是更复杂的纹理特征。第三层的特征更加复杂,已经开始出现一些简单的结构,例如车轮、蜂窝、人头。到了第四、五层机器输出的表现已经足以让人误以为它具备一定的智能,能够对一些明确的抽象概念例如狗、花、钟表、甚至键盘做出特别的响应。研究人员们积累几年甚至十几年设计出来的特征例如Gabor、SIFT,其实可以通过深度神经网络自动的学习出来(如图9中“Layer 1”),甚至自动学习出它的人类“爸爸”难以言喻的更高层次抽象。从某种意义上来说,人工智能科学家就是机器的父母,需要“教”机器宝宝认识这个世界。谁都希望自己有个聪明宝宝,只用教它“知其然”,它自己慢慢总结消化然后“知其所以然”。深度神经网络就像个聪明的机器宝宝自己会学习、会抽象、会总结。
端到端可学习,乍一听这个名词可能觉得头有点“方”,其实可以简单理解为全局最优。图7中总结了在“浅”时代,人脸识别的各个子问题都需要通过两个甚至更多个步骤来完成,而多个步骤之间完全独立的进行优化。这是典型贪心规则,很难达到全局最优。事实上,受限于优化算法深度神经网络也很难达到全局最优解,但是它的优化目标是全局最优的。近几年深度学习在各种任务上的成功经验,表明机器宝宝也是需要有梦想的,直接对准“远方”的全局最优目标进行学习,即使得不到最优解也也远远好过小碎步的局部贪心算法。想要达到真正的“强”人工智能,深度神经网络还有很长的路要走,星爷的名言对神经宝宝同样适用,做人没有梦想和咸鱼有什么分别?
进击——优图祖母模型的“进化”
随着深度神经网络的机器学习技术的发展,在LFW人脸数据库上,三、四年前让所有机器学习算法宝宝们望尘莫及的人类识别能力早已被超越。虽然优图也曾在LFW上取得99.65%超越人类平均水平的好成绩,但是我们清楚的明白刷库还远远不够,在实际场景中的应用更重要也更具挑战性,在实践中优图已经根据落地需求对各种应用场景和应用类型做出了细分,以便实现各种场景下人脸识别任务的各个击破。目前在落地应用中,常见的照片场景类型有生活照,自拍照、监控视频、门禁闸机、西方人及其他人种照片,如图10所示。
图10:常见人脸识别场景类型
互联网上有海量的人脸照片,通过搜索引擎优图也积累了海量带身份标注的互联网人脸数据。这部分数据无论从人数,图像数、数据多样性上都是最好的,为优图人脸识别技术的研发提供了基础条件。随着人脸识别技术的日渐成熟,实际业务中涌现出大量新场景下的应用需求,例如微众银行的核身业务,会议签到业务都涉及证件照和手机自拍照的比对,公安的监控需要视频监控数据与证件照的比对。不同场景下获取的人脸图像存在巨大差异,如何对人脸识别模型进行快速调整,在各个不同场景下快速落地就成为一个非常具有挑战性的问题。
为了在日趋白热化的市场竞争中占得先机,优图在三年深耕人脸识别和深度学习的基础上建立了自己在场景迁移与适应上的一整套方法论。这个方法论可以用一句话来概括:祖母模型的“进化”。这句话有两个关键点。首先我们需要建立适用于一般场景的、功能强大的人脸识别模型,也就是祖母模型。其次祖母模型通过“进化”来适应新场景下的人脸识别。
建立祖母模型家族
祖母模型并不特指一个深度神经网络模型,而是具有某种结构特点的一类神经网络模型,因此更为合适的叫法应该是祖母模型族。不同业务场景下的应用,用户对人脸识别的速度和精度可能有不一样的需求。祖母模型族必须像一个兵器库,既包含能够快速发射的机关枪也需要杀伤力强大冷却时间长的原子弹。
图11:深度神经网络局部结构分类
目前最为流行的深度神经网络结构大致可以归为三类:1.直线型(如AlexNet,VGGNet);2.局部双分支型(ResNet);3.局部多分支型(GoogleNet)。其中直线型网络结构设计最为简单,但是当网络深度超过20后这种结构的网络将变的难以优化。局部多分支型网络模型能力强,计算效率更高,但是设计也最为复杂。在建立祖母模型家族的初期,我们选择了模型能力相对较强设计又相对简单的局部双分支型网络ResNet来构建优图人脸识别的祖母模型族。一方面ResNet本身具有强大的学习能力,是去年深度学习领域最新的研究进展。MSRA凭借一个152 层的ResNet深度网络摘取了图像识别领域最具影响力的ImageNet2015竞赛多个单项的第一名。另一方面ResNet设计相对简单,一个最大的特点就是识别能力基本与神经网络深度成正比。神经网络的深度又与计算复杂度直接相关,这就为训练不同识别精度与运行速度的多个模型从而建立祖母模型族提供了极大的方便。当选定了祖母模型的网络结构后,我们将其在数据量最大的互联网生活照数据集上训练,以保证祖母模型的通用人脸识别能力,图12所示。
图12:优图人脸识别祖母模型
在基于局部双分支模型族建立完成后,我们也开始尝试使用更复杂的局部多分支组件来进一步提高模型效率,丰富我们的祖母模型族。
祖母模型的“进化”
迁移学习是近些年来在人工智能领域提出的处理不同场景下识别问题的主流方法。相比于浅时代的简单方法,深度神经网络模型具备更加优秀的迁移学习能力。并有一套简单有效的迁移方法,概括来说就是在复杂任务上进行基础模型的预训练(pre-train),在特定任务上对模型进行精细化调整(fine-tune)。套用在人脸识别问题上,只需要将训练好的优图祖母模型在新场景的新数据上进行精细化调整。
图13:优图祖母模型的进化
这种传统的迁移学习方法确实能帮助祖母模型更好的完成新场景下的人脸识别任务。但这只能算特异化,无法将迁移学习中学到的新信息反馈给祖母模型。迁移之后的特异化模型只能应用在特定场景,在原集合上的性能甚至可能会大幅下降。在没有深度学习的“浅”时代,模型没有同时处理多个场景的能力,这可能是最好的适应新场景的方法。然而在实践中我们发现,由于深度神经网络的强大表达能力,完全可以在迁移学习过程中保持祖母模型的通用性能。采用增量学习的方式进行新场景的适应,在完成新场景下识别的同时也能保持其他场景下的能力,从而得到通用性更好的优图祖母模型,即优图祖母模型的“进化”。
随着各个场景下的数据不断积累,优图祖母模型将不断进化,变的更加强大。
后续我们将根据业务需求,继续积累在新场景下的人脸识别能力。并尝试将这种深度神经网络的神奇“进化”能力推广到更多的问题上。通过不断进化,祖母模型变的越来越聪明,也许有一天我们真的能创造出全知全能的“优图大脑”!
本文授权转载自腾讯优图,如需转载请获得原作者授权