北京物流信息联盟

一种用于人脸检测的基于设备的深度神经网络

2022-07-24 09:25:25

点击蓝字关注这个神奇的公众号~

英文

An On-device Deep Neural Network for Face Detection

Vol. 1 ,Issue 7 ∙ November 2017 . by Computer Vision Machine Learning Team


介绍

Apple首先通过CIDetector类在Core Image框架的公共API中发布了人脸检测。这个API也被Apple应用程序内部使用,例如Photos。CIDetector的最早版本使用了基于Viola-Jones检测算法的方法[1]。我们根据CIDetector对传统计算机视觉方面的进展进行了后续改进。


随着深度学习的出现,以及其在计算机视觉问题中的应用,人脸检测精度的最新进展发生了巨大的飞跃。我们必须彻底重新思考以前采用的方法,以便我们能够利用这种模式转变。与传统的计算机视觉相比,深度学习的学习模型需要更多的内存,更多的磁盘存储以及更多的计算资源。


像今天的手机一样,典型的高端手机并不是一个可行的深度学习视觉模型平台。大多数行业通过基于云的API提供深度学习解决方案来解决这个问题。在基于云的解决方案中,使用深度学习推理将图像发送到服务器进行分析以检测人脸。基于云的服务通常使用功能强大的桌面级GPU,并提供大量内存。非常大的网络模型以及潜在的大型模型可以在服务器端运行,从而允许客户端(可以是手机)利用大型深度学习架构,这在本地运行是不切实际的。


苹果的iCloud照片库是一个基于云的照片和视频存储解决方案。但是,由于苹果对用户隐私的强烈承诺,我们无法将iCloud服务器用于计算机视觉计算。发送到iCloud照片库的每张照片和视频在发送到云存储设备之前都会在设备上进行加密,并且只能通过注册到iCloud帐户的设备进行解密。因此,为了给我们的客户提供基于深度学习的计算机视觉解决方案,我们必须直接解决在iPhone上运行深度学习算法所面临的挑战。


我们面临着几个挑战。深度学习模式需要作为操作系统的一部分进行发货,占用宝贵的NAND存储空间。它们也需要加载到RAM中,并且在GPU和/或CPU上需要大量的计算时间。与基于云计算的服务不同,云计算的资源只能专注于视觉问题,因此必须在与其他正在运行的应用程序共享这些系统资源的同时进行设备上的计算。最后,计算必须足够高效,以在相当短的时间内处理一个大的照片库,但没有显着的功耗或热量增加。

本文的其余部分讨论了我们的基于深度学习的人脸检测的算法,以及我们如何成功地应对挑战,以实现最新的精度。我们讨论:


我们如何充分利用我们的GPU和CPU(使用BNNS和金属)

内存优化网络推断,图像加载和缓存

我们如何以不妨碍iPhone预期的其他多项任务同时进行的方式实施网络


从Viola-Jones走向深度学习

在2014年,当我们开始研究深度学习方法来检测图像中的人脸时,深度卷积网络(DCN)刚刚开始在物体检测任务上产生有希望的结果。其中最突出的是一种名为“OverFeat”的方法[2],该方法推广了一些简单的想法,这些想法表明DCN在为对象扫描图像方面非常有效。


OverFeat绘制了神经网络的全连接层与卷积层之间的等价性,与输入具有相同空间维度的滤波器的有效卷积。这项工作表明,一个固定的接受领域的二元分类网络(例如32x32,自然跨度为16像素)可以有效地应用于任意大小的图像(例如,320x320),以产生适当大小的输出图(在这个例子中是20x20)。OverFeat文件还提供了巧妙的配方,通过有效地减少网络步幅来产生更密集的输出映射。


我们基于OverFeat论文的一些见解构建了我们的初始架构,从而形成了一个完整的卷积网络(参见图1),其中包含以下多任务目标:


二进制分类来预测输入中面部的存在与否,以及预测边界框参数的回归,以最佳地定位输入中的面部


我们尝试了几种训练这种网络的方法。例如,简单的训练过程是创建一个固定大小的图像块的大数据集,该图像块对应于网络的最小有效输入,使得每个块产生来自网络的单个输出。训练数据集是理想的平衡,所以一半的瓦片包含一个人脸(正类),另一半不包含人脸(负类)。对于每个正片,我们提供了真正的位置(x,y,w,h)。我们训练网络来优化前面描述的多任务目标。一旦训练完毕,网络就能够预测一个图块是否包含一个人脸,如果是的话,它还提供该图块中人脸的坐标和比例。


图1.修改后的面部检测DCN体系结构

由于网络是完全卷积的,因此可以高效地处理任意大小的图像并生成2D输出图。地图上的每个点对应于输入图像中的图块,并且包含来自网络的关于该图块中是否存在人脸及其位置/比例的预测(参见图中的DCN的输入和输出1)。


给定这样一个网络,我们可以建立一个相当标准的处理流水线来执行人脸检测,包括一个多尺度图像金字塔,人脸检测器网络和一个后期处理模块。我们需要一个多尺度的金字塔来处理各种尺寸的面孔。我们将网络应用到金字塔的每个级别,并从每一层收集候选检测。(见图2)。后处理模块然后将这些候选检测结果跨度进行组合,以产生对应于网络对图像中的脸部的最终预测的边界框的列表。


图2.人脸检测工作流程

这一策略使我们更接近于在设备上运行深度卷积网络,以彻底扫描图像。但网络复杂性和规模仍然是性能的关键瓶颈。克服这一挑战不仅意味着将网络限制在一个简单的拓扑结构中,而且还要限制网络层数,每层信道数量和卷积滤波器的内核大小。这些限制提出了一个至关重要的问题:我们的网络能够产生可接受的准确性,不过是很简单的,大多数网络超过20层,由几个网络中的网络组成[3]模块。在前面描述的图像扫描框架中使用这样的网络将是完全不可行的。他们导致了不可接受的性能和用电量。事实上,我们甚至无法将网络加载到内存中。当时的挑战是如何训练一个简单而紧凑的网络,以模拟准确但复杂的网络的行为。


我们决定采用一种非正式的“师生”训练方式[4]。这种方法为我们提供了一个机制来训练第二个薄而深的网络(“学生”),使得它非常接近我们已经培训的大型复杂网络(“老师”)的输出如前所述。学生网络由一个简单的3x3卷积和层叠重复结构组成,其架构经过精心设计,可最大限度地利用我们的神经网络推理引擎。(见图1)


现在,最后,我们有一个用于面部检测的深度神经网络的算法,对于设备上的执行是可行的。我们迭代了几轮训练,以获得足够精确的网络模型,以启用所需的应用程序。虽然这个网络是准确可行的,但仍然有大量的工作要做,以便在数百万用户设备上部署。


优化图像管道

对深度学习的实际考虑因素深深地影响了我们为开发人员设计的易于使用的框架,我们称之为Vision。很明显,伟大的算法不足以创建一个伟大的框架。我们必须有一个高度优化的成像管道。


我们不希望开发人员考虑缩放,颜色转换或图像源。无论是用于实时相机捕捉流,视频处理,还是从光盘或网络处理图像,人脸检测都应运行良好。它应该工作,不管图像的表示和格式。


我们关心的是功耗和内存使用情况,尤其是流媒体和图像捕获。我们担心内存占用,比如64兆像素全景所需的大内存。我们通过使用部分二次采样解码技术和自动平铺技术来解决这些担忧,即使在非典型的高宽比下,也可以在大图像上执行计算机视觉任务。


另一个挑战是色彩空间匹配。苹果公司拥有广泛的色彩空间API,但我们不希望让开发人员承担色彩匹配任务。视觉框架处理颜色匹配,从而降低成功采用计算机视觉到任何应用程序的门槛。


Vision还通过有效处理和重复使用中间体来优化。人脸检测,人脸标志检测以及其他一些计算机视觉任务可以从相同的缩放中间图像中工作。通过将算法的接口抽象出来,找到要处理的图像或缓冲区的所有权位置,Vision可以创建和缓存中间图像,以提高多个计算机视觉任务的性能,而无需开发人员进行任何工作。


另一面也是如此。从中心接口的角度来看,我们可以将算法开发推向方向,以便更好地重用或共享中间体。Vision承载了几种不同的,独立的计算机视觉算法。为了使各种算法能够很好地协同工作,实现使用输入分辨率和颜色空间,尽可能多的算法共享.。


优化设备上的性能

如果我们的人脸检测API无法在实时应用程序和后台系统进程中使用,那么易用性的快感将很快消失。用户希望在处理照片库进行人脸识别或在拍摄后立即分析照片时,能够流畅地运行人脸检测。他们不希望电池耗尽或系统的性能缓慢爬行。苹果的移动设备是多任务设备。背景计算机视觉处理因此不应该显著地影响系统的其余部分的特征。


我们实施了几种策略来最大限度地减少内存占用和GPU使用。为了减少内存占用,我们通过分析计算图来分配神经网络的中间层。这允许我们将多个图层别名到同一个缓冲区。虽然是完全确定性的,但这种技术可以减少内存占用,而不会影响性能或分配碎片,并且可以在CPU或GPU上使用。


对于Vision,检测器运行5个网络(每个图像金字塔比例一个,如图2所示)。这5个网络共享相同的权重和参数,但其输入,输出和中间层具有不同的形状。为了进一步减少占用空间,我们在由这5个网络组成的联合图上运行基于活性的内存优化算法,大大减少了占用空间。此外,多个网络重复使用相同的权重和参数缓冲区,从而减少内存需求。


为了获得更好的性能,我们利用了网络的完全卷积性:所有的尺度都被动态调整大小以匹配输入图像的分辨率。与将图像拟合在方形网络视网膜(由无效带填充)相比,将网络适合图像的大小允许我们大大减少总操作的数量。由于操作的拓扑结构并没有因分配器其余部分的重构和高性能而改变,所以动态整形不会引入与分配有关的性能开销。


为了确保在深层神经网络在后台运行时的UI响应性和流畅性,我们为网络的每一层分割GPU工作项,直到每个单独时间少于一毫秒。这使操作员能够及时将情境切换到更高优先级的任务,如UI动画,从而减少并有时消除丢帧。


综合起来,所有这些策略确保我们的用户可以享受本地,低延迟,私密的深度学习推断,而不必意识到他们的手机每秒钟运行数百gigaflops的神经网络。


使用视觉框架

我们是否已经完成了我们设定的目标,即开发一个高性能,易于使用的人脸检测API?你可以试试Vision框架并为自己判断。以下是如何开始:


观看WWDC演示:Vision Framework : Building on Core ML

阅读 Vision Framework Reference

在iOS 11教程中试用Core ML和Vision:机器学习[5]


References

[1] Viola, P. and Jones, M.J. 

Robust Real-time Object Detection Using a Boosted Cascade of Simple Features. In Proceedings of the Computer Vision and Pattern Recognition Conference, 2001.


[2] Sermanet, Pierre, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, and Yann LeCun.

OverFeat: Integrated Recognition, Localization and Detection Using Convolutional Networks.  arXiv:1312.6229 [Cs], December, 2013.


[3] Lin, Min, Qiang Chen, and Shuicheng Yan. 

Network In Network. 

arXiv:1312.4400 [Cs], December, 2013.


[4] Romero, Adriana, Nicolas Ballas, Samira Ebrahimi Kahou, Antoine Chassang, Carlo Gatta, and Yoshua Bengio. 

FitNets: Hints for Thin Deep Nets. 

arXiv:1412.6550 [Cs], December, 2014.


[5] Tam, A. 

Core ML and Vision: Machine learning in iOS Tutorial. 

Retrieved from https://www.raywenderlich.com, September, 2017.


fastai深度学习官方网站

fastai深度学习社区

微信号:fastai2017

官网:fastai.com.cn


友情链接

Copyright © 2023 All Rights Reserved 版权所有 北京物流信息联盟