BlazeFace:Sub-millisecond Neural Face Detection on Mobile GPUs
BlazeFace:基于移动GPUs的亚毫秒神经人脸检测
论文地址:arxiv.org/pdf/1907.05047.pdf
源码地址:GitHub - tkat0/PyTorch_BlazeFace: Unofficial PyTorch implementation of BlazeFace
目录
一、摘要
二、应用
三、介绍
(1)与推理速度有关:
(2)与预测质量相关:
四、AR管道人脸检测
五、模型架构和设计
(1)扩大感受野大小
(2)特征提取器
(3)锚定方案
(4)后期处理
六、实验
附录:BalzeFace 特征提取网络架构
一、摘要
我们介绍BlazeFace,一款为移动GPU推理量身定制的轻量级且性能良好的人脸检测器。它在旗舰设备上以200–1000 FPS的速度运行。这种超实时性能使其能够应用于任何需要准确的感兴趣面部区域作为特定任务模型输入的增强现实管道,如2D/3D面部关键点或几何估计、面部特征或表情分类以及面部区域分割。我们的贡献包括:
- 一个受 MobileNet V1/V2 启发但不同于MobileNet的轻量级特征提取网络;
- 一个从单次多盒检测器(SSD)修改而来的GPU友好锚定方案;
- 以及一个改进的平局分辨率策略,以替代非最大值抑制。
二、应用
所提出的模型对完整图像或视频帧进行操作,可以作为几乎任何与面部相关的计算机视觉应用的第一步,例如2D/3D面部关键点、轮廓或表面几何估计、面部特征或表情分类以及面部区域分割。因此,计算机视觉管道中的后续任务可以根据适当的面部裁剪来定义。结合BlazeFace提供的少数面部关键点估计,还可以旋转该裁剪,使内部的面部居中,缩放标准化,并使滚动角接近零。这消除了任务特定模型中显著平移和轮换方差的要求,从而实现了更好的计算资源分配。我们用一个人脸轮廓估计的具体例子来说明这种流水线方法。在图3中,我们展示了Blaze Face的输出,即预测的边界框和面部的6个关键点(红色),是如何通过应用于略微扩展裁剪的更复杂的面部轮廓估计模型来进一步细化的。详细的关键点产生了更精细的边界框估计(绿色),该边界框估计可以在不运行面部检测器的情况下被重新用于后续帧中的跟踪。为了检测这种计算节省策略的失败,轮廓模型还可以检测面部是否确实存在并在所提供的矩形裁剪中合理对齐。每当违反该条件时,BlazeFace人脸检测器就会再次在整个视频帧上运行。本文中描述的技术正在推动手机上主要的AR自我表达应用程序和AR开发者API。
三、介绍
近年来,深度网络([4,6,8])中的各种架构改进实现了实时对象检测。在移动应用程序中,这通常是视频处理管道的第一步,然后是特定任务的组件,如分割、跟踪或几何推断。因此,目标检测模型推理必须尽可能快地运行,更可取的是其性能远高于标准实时基准。我们提出了一种新的人脸检测框架BlazeFace,该框架针对移动GPU上的推理进行了优化,改编自Single Shot Multibox Detector(SSD)框架。我们的主要贡献是:
(1)与推理速度有关:
- 一种非常紧凑的特征提取器卷积神经网络,在结构上与 MobileNet V1/V2 相关,专为轻型物体检测而设计。
- 在 SSD 的基础上改进的一种新的GPU友好锚定方案,旨在有效利用GPU。锚(或SSD术语中的先验)是预定义的静态边界框,用作通过网络预测进行调整的基础,并确定预测粒度。
(2)与预测质量相关:
- 非最大值抑制[4,6,8]的平局分辨率策略,在重叠预测之间实现更稳定、更平滑的平局分辨率。
四、AR管道人脸检测
虽然所提出的框架适用于各种物体检测任务,但在本文中,我们专注于在手机相机取景器中检测人脸。由于焦距和典型的拍摄对象大小不同,我们为前置和后置相机分别构建了模型。
除了预测轴对齐的面部矩形外,我们的BlazeFace模型还产生了6个面部关键点坐标(眼睛中心、耳朵区域、嘴中心和鼻尖),使我们能够估计面部旋转(滚动角)。这使得可以将旋转的面部矩形传给视频处理管道的后期任务特定阶段,减轻了后续处理步骤中对显著平移和旋转不变性的要求(见第5节)。
五、模型架构和设计
BlazeFace模型体系结构是围绕以下四个重要的设计考虑因素构建的。
(1)扩大感受野大小
虽然大多数现代卷积神经网络架构(包括两个MobileNet版本)倾向于在模型图的任何地方都支持3×3卷积核,但我们注意到,深度可分离的卷积计算由其逐点部分主导。在 输入张量上, 深度卷积涉及 乘加运算,而随后到 个输出通道的1×1卷积由 这样的运算组成,在深度部分的 因子内。
例如,在实践中,在具有Metal Performance Shaders实现[1]的Apple iPhone X上,
- 对于56×56×128张量,16位浮点运算中的3×3深度卷积需要0.07ms,
- 而从128到128个通道的随后的1×1卷积需要0.3ms,慢4.3倍。
这一观察结果表明,增加深度部分的内核大小是相对便宜的。我们在模型架构瓶颈中使用了5×5个内核,用内核大小的增加来换取达到特定感受野大小所需的瓶颈总量的减少(图1)。
MobileNet V2 瓶颈包含由非线性分隔的随后的深度增加扩展和深度减少投影逐点卷积。为了适应中介张量中较少的通道数量,我们交换了这些阶段,以便瓶颈中的剩余连接以“扩展”(增加)通道分辨率运行。
最后,深度卷积的低开销使我们能够在这两个逐点卷积之间引入另一个这样的层,从而进一步加速感受野大小的进展。这形成了 Double BlazeBlock 的本质,它被用作BlazeFace的更高抽象级别层的选择瓶颈(见图1,右)。
(2)特征提取器
对于一个特定的例子,我们关注的是前置摄像头模型的特征提取器。它必须考虑较小的物体尺度范围,因此计算要求较低。提取器采用128×128像素的RGB输入,由一个2D卷积组成,然后是5个单BlazeBlock和6个双BlazeBlock(完整布局见附录a中的表4)。最高张量深度(通道分辨率)为96,而最低空间分辨率为8×8(与SSD相比,SSD将分辨率一直降低到1×1)。
(3)锚定方案
类似SSD的对象检测模型依赖于预定义的固定大小的基本边界框,称为先验,或Faster-R-CNN[8]术语中的锚点。为每个锚预测一组回归(以及可能的分类)参数,例如中心偏移和尺寸调整。它们用于将预定义的锚点位置调整为紧密的边界矩形。
根据对象比例范围以多个分辨率级别定义锚点是一种常见的做法。主动下采样也是计算资源优化的一种手段。典型的SSD模型使用1×1,2×2,4×4,8×8和16×16特征图大小的预测。然而,池金字塔网络(PPN)架构[7]的成功意味着,在达到一定的特征图分辨率后,额外的计算可能是多余的。
与CPU计算相比,GPU特有的一个关键特征是调度特定层计算的显著固定成本,这对于流行的CPU定制架构所固有的深度低分辨率层来说变得相对重要。例如,在一个实验中,我们发现在4.9毫秒的MobileNet V1推理时间中,只有3.9毫秒用于实际的GPU着色器计算。
考虑到这一点,我们采用了一种替代锚方案,该方案在没有进一步下采样的情况下停止在8×8特征图维度(图2)。我们将8×8、4×4和2×2分辨率中的每个像素的2个锚替换为8×8的6个锚。由于人脸长宽比的变化有限,发现将锚固件限制在1:1的纵横比足以进行精确的面部检测。
(4)后期处理
由于我们的特征提取器没有将分辨率降低到8×8以下,因此与给定对象重叠的锚的数量随着对象大小的增加而显著增加。在典型的非最大抑制场景中,只有一个锚“获胜”,并被用作最终算法结果。当这种模型应用于后续视频帧时,预测往往在不同的锚点之间波动,并表现出时间抖动(人类可感知的噪声)。
为了最大限度地减少这种现象,我们将抑制算法替换为混合策略,该策略将边界框的回归参数估计为重叠预测之间的加权平均值。它对原始NMS算法几乎没有产生额外的成本。对于我们的人脸检测任务,这种调整导致不准确度增加了10%。
我们通过将同一输入图像的几个稍微偏移的版本传递到网络中,并观察模型结果(根据翻译进行调整)如何受到影响,来量化抖动量。在所述的分辨率策略修改后,抖动度量(定义为原始输入和位移输入预测之间的均方根差)在我们的正面相机数据集上下降了40%,在包含较小人脸的背面相机数据集中下降了30%。
六、实验
我们在66K图像的数据集上训练了我们的模型。为了进行评估,我们使用了一个由2K张图像组成的私人地理多样性数据集。对于前置摄像头型号,由于预期使用情况,仅考虑占据图像面积20%以上的人脸(后置摄像头型号的阈值为5%)。
回归参数误差通过眼间距离(IOD)进行尺度不变性归一化,测量的中值绝对误差为IOD的7.4%。通过上述过程评估的抖动度量是IOD的3%。
表1显示了所提出的正面人脸检测网络的平均精度(AP)度量[5](在并集边界框匹配阈值上具有标准的0.5交点)和移动GPU推断时间,并将sit与具有相同锚点编码方案(MobileNetV2-SSD)的基于MobileNetV2的对象检测器进行了比较推理时间评估。
表2给出了两种网络模型在更多旗舰设备上的GPU推理速度。
表3示出了由较小的模型大小引起的回归参数预测质量的退化量。如下一节所述,这不一定会导致整个AR管道质量的成比例下降。
附录:BalzeFace 特征提取网络架构
>>> 如有疑问,欢迎评论区一起探讨。