看点:苹果自爆功法,一文读尽Face ID的算法演进之路。
11月16日,苹果在自家的机器学习日报(machinelearning.apple.com)上自爆功法,发布论文《一种基于深度神经网络的设备端人脸识别(An On-device Deep Neural Network for Face Detection )》,披露脸部识别技术演变。
本期的智能内参,我们推荐苹果技术论文《一种基于深度神经网络的设备端人脸识别》,盘点FaceID从维奥拉-琼斯目标检测框架(Viola-Jones)到深度学习算法的技术演变,解读终端深度学习的实现方案。如果想收藏本文的报告全文,可以在智东西(公众号:zhidxcom)回复关键词“nc206”下载。
以下为智能内参整理呈现的干货:
2017年9月13日(当地时间12日),苹果在乔布斯剧院发布了智能手机iPhone X。这款搭载了64位架构A11神经处理引擎,采用面部识别解锁方式(Face ID)的全面屏手机,号称iPhone手机10周年纪念之作,国行售价8388元起。
事实上,苹果在iOS 10就开始使用深度学习技术用于脸部识别,目前已向开发者开放视觉框架,支持相关应用程序开发。下文将着重讨论计算机视觉技术在隐私保护上遇到的挑战,及基于深度学习的终端人脸识别技术实现方案(更多FaceID技术方案和产业布局参见第186期智能内参)。
终端深度学习模型的挑战
苹果最早发布的脸部识别API是通过CIDetector实现的,一种针对静态影响的特征信息(包括人脸、几何图形、条形码等)进行识别的图像处理单元。最早版本的CIDetector基于维奥拉-琼斯目标检测框架(Viola-Jones),苹果对其进行了传统方式的优化。
后来,随着深度学习的出现,及其在计算机视觉领域的应用,人脸识别的准确性得到了极大的飞跃,给苹果带来了启发。相比于传统的计算机视觉方案,深度学习算法能够给出更好的模型,也要求了更多的记忆、存储/磁盘和可计算源(Computatioal resource)。
矛盾点来了:以目前终端(智能手机)的硬件条件来看,基于深度学习的视觉模型似乎并不是一个可行的方案,而大多数企业的解决方案是提供云接口(Cloud-Based API),先将图片传给能够运行大型深度学习框架的服务器,然后用深度学习检测面部。而云服务往往需要强大的桌面级GPU,需要大量的记忆。
云接口的方案虽然可行,但违背了苹果的隐私保护理念,因此,苹果只提供照片和视频的云服务,所有照片、视频在上传之前需要得到账户的许可,而针对计算机视觉指令,上传云端被认为是不太合适的做法。
最终,苹果还是找到了在终端,也就是iPhone上的深度学习方案,并完成了高度的脸部识别准确性(state-of-the-art accuracy)。这中间需要解决的挑战包括:将深度学习模型整合到操作系统中,占用宝贵的NAND存储空间(一种非易失性存储技术,即断电后仍能保存数据);还需要将其加载到RAM(随机存取存储器)中,利用GPU和/或CPU实现合适的计算时间;此外,跟云端深度学习模型不同的是,终端深度学习还需要解决运行计算机视觉指令的同时,还有其他的后台程序。
总言之,终端深度学习模型要求的是:面向大型的照片库,用极短的时间运行指令,并占用不多的功耗或者说不发烫。
从维奥拉-琼斯到深度学习
2001年,Paul Viola和Michael Jones基于哈尔特征和方向可变滤波器,提出了基于简单特征的对象识别技术,此即维奥拉-琼斯目标检测框架,这个方法在OpenCV中被实现为cvHaarDetectObjects()。基于维奥拉-琼斯框架,iOS 7引入CIDetecor,实现了人脸检测、识别的功能,但此时的人脸识别,准确性和可靠性都不靠谱。
2014年,苹果最开始着手基于深度学习的面部识别的时候,深度卷积神经网络(DCN)才刚刚能够完成物体识别的任务,当时的主流方案是OverFeat(利用卷积网络特征提取算子,实现图片分类、定位和检测),能够有效的对物体图像进行快速扫描。
OverFeat实现了神经网络的连接层与卷积层(相同空间维度的滤波器的有效卷积)之间的等价性,也就是实现了多尺度输入预测(裁一个32x32,像素尺度16的区域,可以输出任意尺寸,比如320x320的图像,生成适当大小的输出映射,比如20x20)。此外,OverFeat还提供了基于更少网络步幅的更密集的输出映射。
基于OverFeat,苹果搭建了初始架构,以实现:
1、二进制分类:识别输入数据中是否有面部信息;
2、回归算法:对输入的人脸信息进行边界预测从而实现人脸定位。
苹果尝试了有些训练方式:创建一个固定大小的图像块的大数据集,对应于网络的最小有效输入,使得每个块产生来自网络的单个输出;定义参数的正负类,训练网络来优化多任务目标,如识别是否有人脸,找出人脸的坐标和缩放比例。高效的完全卷积可以处理任意大小的图像并生成二维输出图。
▲用于脸部识别的DCN框架
整体思路是这样的:在这个人脸检测流程中,包含了多尺度的图像金字塔、人脸检测器以及后处理模块等三大部分。多尺度的金字塔处理各种尺寸的面孔;人脸检测器贯穿金字塔的各个级别,并从每一层收集候选检测;后处理模块然后将这些候选检测结果跨度进行组合,以产生对应于网络对图像中的脸部的最终预测的边界框的列表。
▲人脸检测流程
上述策略基本构成了终端计算机视觉方案,但网络复杂性和规模仍然是性能的关键瓶颈,不仅要将网络限制在一个简单的拓扑结构中,而且还要限制网络层数,每层信道数量和卷积滤波器的内核大小。
为此,苹果提出了“师生”培训方式,即利用已经培训的大型复杂网络(“老师”)的输出,来培训第二个薄而深的网络(“学生”,一个简单的3x3卷积和层叠重复结构组成,它的架构经过设计,能够最好地利用苹果自家的神经网络推理引擎)。
以上方案给出了适合终端的用于面部检测的深度神经网络的算法,并通过几轮训练迭代实现了足够精确的网络模型。
优化图像管道
深度学习提供了一个很牛的计算机视觉框架(Vision Framework),但它还需要高度优化的成像管道。
不管输入图像是什么角度,有无缩放,不管什么颜色转换或图像源/格式,人脸检测都应该运行良好。此外,功耗和内存使用情况也是优化的关键,特别是针对流媒体和图像捕获。对此,苹果采用了部分二次采样解码技术和自动平铺技术,即使在非典型的高宽比下,也能在大图像上执行计算机视觉任务。
此外,苹果还提供了广泛的色彩空间API,计算机视觉框架可以直接处理颜色匹配,从而降低开发人员的相关应用开发门槛(不用承担色彩匹配任务)。
计算机视觉框架还通过有效处理和重复使用中间体来优化。通过将算法的接口抽象出来,找到要处理的图像或缓冲区的所有权位置,算法框架可以创建和缓存中间图像,提供了尽可能多的分辨率和颜色空间,以提高多个计算机视觉任务的性能。
优化终端性能
如前所述,终端人脸检测API必须克服实时应用程序和后台系统进程的问题。用户要的是在处理照片库的同时进行人脸识别,或在拍摄后立即分析照片,流畅地运行人脸检测,还不咋影响功耗,系统不卡。
对此,苹果的方案是最大限度地减少内存占用和GPU使用,即通过分析计算图来分配神经网络的中间层:将多个图层别名到同一个缓冲区,既可以减少内存占用,又不会影响性能或分配碎片,并且可以在CPU或GPU上使用。
苹果计算机视觉的框架的检测器运行5个网络(即对应5个比例的金字塔),共享相同的权重和参数,但其输入,输出和中间层具有不同的形状。为了进一步减少占用空间,不妨在5个网络组成的联合图上运行基于活性的内存优化算法。此外,多个网络重复使用相同的权重和参数缓冲区也可以减少内存需求。
利用网络的完全卷积性,将所有图像都动态调整到输入图像的分辨率的大小,也能大大减少总操作的数量。由于操作的拓扑结构并没有因分配器其余部分的重构和高性能而改变,所以动态整形不会引入与分配有关的性能开销。
为了确保在深层神经网络在后台运行时的UI响应性和流畅性,苹果为网络的每一层分割GPU工作项,直到每个单独时间少于一毫秒。所有这些策略综合起来,确保用户可以享受本地,低延迟,隐私保护的深度学习算法,而不意识到手机每秒运行数百万浮点的神经网络。
智东西认为,苹果基于比较成熟的计算机视觉/人脸识别技术,为终端深度学习需要克服的很多难点,包括功能的可靠性/准确性、功耗、可能的后台程序冲突等,提供了除了云以外的思路。比如庞大的训练数据和计算量与终端硬件限制的矛盾,可以通过“师生”培训、中间层、联合图、分割GPU工作项、匹配框架的神经引擎等方案解决。
下载提醒:如果想收藏本文的报告,可以在智东西(公众号:zhidxcom)回复关键词“nc206”下载。
本文系网易新闻·网易号“各有态度”特色内容