×
嵌入式 > 技术百科 > 详情

为了让iPhone实时运行人脸检测算法,苹果背后做了这么多努力

发布时间:2020-06-23 发布时间:
|

苹果从iOS11开始正式在系统中带有机器学习API,同步提供了许多基于机器学习/深度学习的手机功能。其实这之前苹果就已经做了很多研究和开发,但当他们决定在手机上运行深度神经网络、提供好用的功能同时还不要干扰正常的用户体验的时候,重大的挑战同样也等待苹果解决。

近日苹果机器学习博客的一篇新文章就介绍了苹果是如何设计、实现在iPhone上运行的人脸检测系统的,不仅模型设计花了功夫,运行环境的优化也用了多种技巧。结合苹果机器学习博客往期的几篇文章,我们也继续感受到许多企业、许多创业者所说过的,有创新只是第一步,把创新变成实实在在的产品还有很长的路要走、还有很多的困难要克服。

爱板网 AI 科技评论把这篇文章全文翻译如下。

自iOS10以来,苹果开始把基于深度学习的人脸检测方法融入系统中。随着苹果的Vision框架的发布,开发者们可以在自己的app中运用这项技术以及许多其它的计算机视觉算法。为了能够保护用户隐私以及高效地在本地设备上运行,苹果在开发过程中也遇到了不小的困难。这篇文章中就讨论了这些困难,并且介绍了苹果的人脸检测算法是如何解决这些困难的。

简介

苹果最初是通过 CIDdetector 类中 Core Image 框架的一个公有API 提供人脸检测功能的。苹果自己编写的应用(比如照片)内部也在使用这个API。最早版本的 CIDdetector 基于 Viola-Jones 检测算法(雷锋网 AI 科技评论注:Viola Jones Face Detector是Paul viola 和 Michael J Jones 在CVPR2001论文中共同提出的一种人脸检测框架。它极大地提高了人脸检测的速度和准确率,是第一个实时的人脸检测算法,即便到现在也还有巨大影响力),然后苹果又在 CIDdetector 中加入了一些基于传统计算机视觉方法的优化。

随着深度学习逐步发展,以及深度学习在计算机视觉中的应用越来越多,顶级的人脸检测算法准确率也有了大踏步的提升。苹果的开发人员们意识到自己需要重新思考面部识别的做法,以便跟上这种新的范式。与传统计算机视觉方法相比,深度学习学到的模型消耗的内存要多几个数量级,更不用提需要更多的磁盘空间以及对计算资源的渴求。

即便今天的智能手机已经有了长足的性能增长和丰富的功能支持,典型的高端手机仍然不足以让基于深度学习的计算机视觉模型运行起来。业界内比较普遍的做法是绕过这个困难,通过云计算API提供深度学习功能。在基于云计算的方案中,移动设备需要把图像发送到服务器,在服务器上运行深度学习推理,分析、检测其中的人脸。云计算服务通常要使用性能强劲的、带有大量可用显存的桌面级GPU。大规模的深度神经网络模型,甚至多个大规模网络的融合模型就可以在服务器端运行,让客户端(比如智能手机)享受到深度学习带来的种种好处,而且无需在本地运行(实际上也无法在本地运行)。 

苹果的 iClould Photo Library 就是一个视频和图像的云存储解决方案,按理说可以方便地用服务器识别用户已经上传的内容。然而,由于苹果对用户隐私做出了很高的承诺、以高标准处理用户信息,他们就无法在 iCloud 服务器上做计算机视觉的相关计算。每张上传到 iClould Photo Library 的照片、每段上传的视频都是首先在设备上加密之后才上传服务器的,要解密也只有这个 iCloud 账户下注册的设备才可以解密。所以,如果要给客户们带来基于深度学习的计算机视觉解决方案的话,苹果只能直接面对、尝试解决这个困难:让深度学习算法在iPhone本地运行。

苹果的开发人员们面对的困难有好几个。

首先,深度学习模型要作为操作系统的一部分,随着手机一起来到用户手中,这会占据珍贵的设备中的NAND闪存存储空间;其次,模型需要加载到RAM中,并且需要消耗可观的GPU和/或CPU计算时间;基于云的服务往往是专用服务器,其上的所有资源都可以集中提供给一个视觉问题使用,而在设备上本地进行的计算就需要和其它正在运行的应用一起共享系统资源;最后,计算过程必须足够高效,在合理的短时间内就能处理完一个很大的照片库,同时还不能有大幅度的功耗增加、不能有明显的发热。

这篇文章余下的篇幅就介绍了苹果是如何设计深度学习人脸检测算法、如何克服困难达到顶级的准确率的。主要讨论的内容有:

如何全面利用GPU和CPU(使用 BNNS 和 Metal)

优化网络推理、图像加载和缓存时的内存使用

如何在与iPhone的其它大量同时运行的功能时间不造成冲突的条件下实现这个网络

从Viola-Jones算法到深度学习

当苹果的开发人员们在2014年开始研究基于深度学习的图像中的人脸检测方法时,深度卷积网络(deep convolutional networks,DCN)才刚刚开始在物体检测任务中崭露头角。当时最突出的是一个名叫“OverFeat”的方法,它让很多简单的卷积神经网络思想变得流行起来,也表明了深度卷积网络扫描图像寻找物体时的高效性。

OverFeat在神经网络的全连接层和卷积网络的卷积层之间找到了平衡,它的做法是把相同空间维度的过滤器的有效卷积作为输入。这项研究清楚地表明,一个感受野大小固定(比如32x32大小,带有16像素的自然步幅)的二分分类网络可以高效地应用于任意大小的图像(比如320x320的图像),并且生成合适大小的输出映射(这种情况下大小为20x20)。OverFeat这篇论文也提供了巧妙的做法,通过高效地降低网络步幅产生更高密度的输出映射。 

苹果的开发人员们根据OverFeat论文中学到的新观点构建了最初的模型架构,做出了一个全卷积网络( 图1),它可以执行如下两个功能:

一个预测输入中是否包含人脸的二分类分类器

一个回归函数,预测一组参数,它们形成的边界框能最好地框出输入中的人脸

为了训练这样的网络,苹果的开发人员们做了好几种不同的实验。比如,一种简单的训练方式就是建立一个数据集,其中包含大量固定大小的图像块,这些图像块的大小和模型允许的最小输入大小相同;这样,每个图像块在经过网络之后都只得到一个输出。训练数据集是平衡到理想状态的,也就是说一半的图像块里包含一张脸(正例),另一半图像里不包含人脸(负例)。对于每一个正例,都会同步提供给模型这张脸的真实位置(x,y,w,h)。然后苹果就以前述的两条网络功能为目标,训练优化这个网络。经过训练后,网络就可以预测图像块中是否包含有一张人脸;如果包含有人脸的话,它同时还会输出图像块中人脸的位置坐标和大小。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展