论文精读 MediaPipe BlazeFace

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面部关键点或几何估计、面部特征或表情分类以及面部区域分割。我们的贡献包括:

  1. 一个受 MobileNet V1/V2 启发但不同于MobileNet的轻量级特征提取网络
  2. 一个从单次多盒检测器(SSD)修改而来的GPU友好锚定方案
  3. 以及一个改进的平局分辨率策略,以替代非最大值抑制

二、应用

所提出的模型对完整图像或视频帧进行操作,可以作为几乎任何与面部相关的计算机视觉应用的第一步,例如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卷积核,但我们注意到,深度可分离的卷积计算由其逐点部分主导。在 s*s*c 输入张量上,k*k 深度卷积涉及 s^{2}ck^{2} 乘加运算,而随后到 d 个输出通道的1×1卷积由 s^{2}cd 这样的运算组成,在深度部分的 d/k^{2} 因子内。

例如,在实践中,在具有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 特征提取网络架构

>>> 如有疑问,欢迎评论区一起探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenVINO】基于 OpenVINO C# API 部署 RT-DETR 模型

基于 OpenVINO C# API 部署 RT-DETR 模型 1. RT-DETR2. OpenVINO3. 环境配置4. 模型下载与转换5. C#代码实现5.1 模型推理类实现1. 模型推理类初始化2. 图片预测API 5.2 模型数据处理类RTDETRProcess1. 定义RTDETRProcess2. 输入数据处理方法3. 预测结果数据处理方法 6. 预测结…

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解前言GoogLeNet(InceptionV1)讲解Inception结构InceptionV1结构1x1卷积的作用辅助分类器 GoogLeNet(Inceptio…

算法通关村第十六关青铜挑战——原来滑动窗口如此简单!

大家好,我是怒码少年小码。 从本篇开始,我们就要开始算法的新篇章了——四大思想:滑动窗口、贪心、回溯、动态规划。现在,向我们迎面走来的是——滑动窗口思想!😝 滑动窗口思想 概念 在数组双指针里&am…

虚拟化服务器+华为防火墙+kiwi_syslog访问留痕

一、适用场景 1、大中型企业需要对接入用户的访问进行记录时,以前用3CDaemon时,只能用于小型网络当中,记录的数据量太大时,本例采用破解版的kiwi_syslog。 2、当网监、公安查到有非法访问时,可提供基于五元组的外网访…

SPI协议详解

SPI协议详解 文章目录 SPI协议详解前言一、SPI是什么?二、通信原理SPI 通信的 4 种工作模式 总结 前言 好久没写这种协议了,最近正好需要用到,便详细的复习一下。 一、SPI是什么? SPI是串行外设接口(Serial Periphe…

MES系统如何赋能制造企业实现4M防错追溯?

生产过程4M管理和MES系统的结合是现代制造业中关键的质量管理实践,它有助于提高生产效率、降低生产成本并保证产品质量。本文将深入探讨4M管理的概念,以及MES系统如何赋能制造企业实现4M防错追溯。 一、4M管理的概念 4M管理是指在制造过程中管理和控制四…

leetCode 92.反转链表 II + 图解

92. 反转链表 II - 力扣&#xff08;LeetCode&#xff09; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 206. 反转链表 - 力扣&#xff08;LeetCode&am…

区块链链游合约系统开发项目模式技术方案

​随着区块链技术的发展&#xff0c;链游合约系统开发逐渐成为了一个备受关注的项目。本文将探讨区块链链游合约系统开发项目的技术方案&#xff0c;包括项目背景、开发目标、技术架构、系统流程、安全措施等方面的内容。 一、项目背景 链游是一种基于区块链技术的游戏&#xf…

加密磁盘密钥设置方案浅析 — LUKS1

虚拟化加密磁盘密钥设置方案浅析 前言元数据分析元数据格式整体格式头部格式加密算法密码校验key slot格式其它字段 流程验证 前言 我们在虚拟化加密磁盘密钥设置方案浅析 — TKS1中介绍了加密磁盘密钥设置方案&#xff0c;TKS1对密钥设置(Linux Unified Key Setup)的流程和方…

阿里云容器镜像服务的运维总结

一、背景 容器镜像服务&#xff0c;作为一个可选付费产品&#xff0c;主要作用是存储docker的镜像仓库&#xff0c;供k8s拉取到Pod节点里。 你可以自己搭建一个harbor镜像仓库&#xff0c;在公司的开发环境下&#xff0c;将image推送到仓库&#xff1b;然后在生产k8s从仓库拉取…

ECharts:显示暂无数据

ECharts 是一个使用 JavaScript 实现的开源可视化库&#xff0c;涵盖各行业图表&#xff0c;满足各种需求&#xff0c;实现各种炫酷的统计图表效果。 如上图所示&#xff0c;有数据的时候固然好看&#xff0c;但是当它没有数据的时候&#xff0c;就是光秃秃的一片&#xff0c;所…

排序算法之-快速

算法原理 丛待排序的数列中选择一个基准值&#xff0c;通过遍历数列&#xff0c;将数列分成两个子数列&#xff1a;小于基准值数列、大于基准值数列&#xff0c;准确来说还有个子数列&#xff1a;等于基准值即&#xff1a; 算法图解 选出基准元素pivot&#xff08;可以选择…

[文件读取]shopxo 文件读取(CNVD-2021-15822)

1.1漏洞描述 漏洞编号CNVD-2021-15822漏洞类型文件读取漏洞等级⭐⭐漏洞环境VULFOCUS攻击方式 描述: ShopXO是一套开源的企业级开源电子商务系统。 ShopXO存在任意文件读取漏洞&#xff0c;攻击者可利用该漏洞获取敏感信息。 1.2漏洞等级 高危 1.3影响版本 ShopXO 1.4漏洞复现…

【Git】第一篇:Git安装(centos)

git查看安装版本 以我自己的centos7.6为例&#xff0c;我们可以输入以下指令查看自己是否安装了git. git --version安装了的话就会显示自己安装的版本。 git 安装 安装很简单&#xff0c;一条命令即可 sudo yum install git -ygit 卸载 sudo yum remove git -y

《使用EasyExcel在Excel中增加序号列的方法》

《使用EasyExcel在Excel中增加序号列的方法》 1、简介2、正文3、核心代码4、使用方法5、效果 1、简介 在处理Excel文件时&#xff0c;有时候需要为表格增加序号列。本文介绍了如何使用Java代码实现在Excel中增加序号列的功能&#xff0c;并提供了一个示例代码。 2、正文 在处理…

Android 图层列表 、 LayerDrawable 、 layer-list \ 改变 seekbar thumb 滑块 的颜色

android 官网 &#xff1a; 图层列表 LayerDrawable / layer-list LayerDrawable 是管理其他可绘制对象数组的可绘制对象。列表中的每个可绘制对象均按照列表顺序绘制。列表中的最后一个可绘制对象绘于顶部。 每个可绘制对象均由单个 <layer-list> 元素内的 <item>…

【服务发现与配置】Consul特性及搭建

文章目录 一、前言二、概念2.1、什么是Consul&#xff1f;2.2、Consul具有哪些特点?2.3、Consul 架构图2.4、Consul的使用场景 三、安装3.1. 下载3.2. 解压3.3. 拷贝到usr目录下3.4. 查看 安装是否成功3.5. 启动 四、Consul 开机自启动4.1. 路径/usr/lib/systemd/system/&…

前端开发项目中使用字体库

开发中有些项目要求使用固定的字体&#xff0c;这就需要项目中使用字体库。 首先需要下载字体库 将下载的字体文件放进项目中 在项目代码样式文件中定义字体 font-face {font-family: "Tobias-SemiBold";src: url("./assets/font/Tobias-SemiBold.ttf"…

vscode因为大文件而无限崩溃的问题,窗口意外终止(原因:“oom“,代码:“-536870904“

复制了一大堆的代码&#xff08;好几兆&#xff09;到一个文件里&#xff0c;然后就导致 vscode 卡死&#xff0c; 之后就算把该文件删掉了&#xff0c;打开vscode还是会默认打开该文件而卡死 解决办法&#xff1a; win R 输入 %appdata%/code/ 删除该文件夹下的 backups/ 文件…

OpenCV 实现透视变换

一&#xff1a;OpenCV透视变换的概念 仿射变换(affine transform)与透视变换(perspective transform)在图像还原、图像局部变化处理方面有重要意义。通常&#xff0c;在2D平面中&#xff0c;仿射变换的应用较多&#xff0c;而在3D平面中&#xff0c;透视变换又有了自己的一席之…