这一策略使我们更接近于在设备上运行深度卷积网络,以彻底扫描图像。但网络复杂性和规模仍然是性能的关键瓶颈。克服这一挑战不仅意味着将网络限制在一个简单的拓扑结构中,而且还要限制网络层数,每层信道数量和卷积滤波器的内核大小。这些限制提出了一个至关重要的问题:我们的网络能够产生可接受的准确性,不过是很简单的,大多数网络超过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.