论文精读 MediaPipe BlazeFace

news2024/10/5 21:20:04

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.coloradmin.cn/o/1209176.html

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

相关文章

AI大模型的制作:RAG和向量数据库,分别是什么?

目录 一、什么是 AI 大模型 二、RAG 三、向量数据库 四、如何制作一个好的 AI 大模型 一、什么是 AI 大模型 AI大模型是指具有大规模参数和复杂结构的人工智能模型。传统的机器学习模型通常有限的参数量,而AI大模型则通过增加参数量和层数来提升模型的表达能力…

《洛谷深入浅出进阶篇》 P2367语文成绩——差分

上链接:P2367 语文成绩 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P2367 上题干: 题目背景 语文考试结束了,成绩还是一如既往地有问题。 题目描述 语文老师总是写错成绩,所以当她修改成绩的…

【vue+amap】高德地图绘制多边形区域

参考文档&#xff1a; 高德地图参考手册 高德地图示例代码 1、高德地图控制台创建应用&#xff0c;获取权限ak 高德地图控制台 Ps.本项目里按钮等基础控件使用的是element-ui版本控件 2、项目内全局引入 index.html内引入高德地图代码&#xff1a; <script type"te…

【Linux系统编程十七】:(基础IO4)--文件系统(inode与软硬链接)

【Linux系统编程十六】&#xff1a;文件系统&#xff08;inode与软硬链接&#xff09; 一.磁盘硬件二.文件系统(inode)三.软硬链接 一.磁盘硬件 Linux下的文件在磁盘中存储&#xff0c;文件的内容和属性是分开存储的&#xff01; 文件的内容存储在数据块。 文件的属性存储在in…

github 私人仓库clone的问题

github 私人仓库clone的问题 公共仓库直接克隆就可以&#xff0c;私人仓库需要权限验证&#xff0c;要先申请token 1、登录到github&#xff0c;点击setting 打开的页面最底下&#xff0c;有一个developer setting 这里申请到token之后&#xff0c;注意要保存起来&#xff…

【3】Spring Boot 3 集成mybatis-plus+druid+mysql

目录 【3】Spring Boot 3 集成组件&#xff1a;Druid Mybatis Plus Mysql集成方案1. Hikari jdbc mysql 集成方案增加依赖添加配置Spring Testng 测试用例 2. Druid Mybatis Plus Mysql集成方案2.1 配置Druid添加依赖配置启动Spring Boot Web StarterSpring Testng测试用…

VS项目属性变量

VS项目属性变量 $(SolutionDir) 获取解决方案的路径 $(Platform) 平台名字 → x86 / x64 $(ProjectName) 工程名字 $(Configuration) 当前的项目模式 → Debug / Release

第十九章总结:Java绘图

19.1&#xff1a;Java绘图类 19.2&#xff1a;绘制图形 package nineteentn; import java.awt.*; import javax.swing.*;public class DrawCircle extends JFrame {private final int OVAL_WIDTH 80; // 圆形的宽private final int OVAL_HEIGHT 80; // 圆形的高public DrawC…

接口测试和功能测试有什么区别

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1…

JavaScript中的事件冒泡、事件捕获、事件委托

DOM事件流&#xff08;event flow &#xff09;存在三个阶段&#xff1a;事件捕获阶段、处于目标阶段、事件冒泡阶段。 Dom标准事件流的触发的先后顺序为&#xff1a;先捕获再冒泡。即当触发dom事件时&#xff0c;会先进行事件捕获&#xff0c;捕获到事件源之后通过事件传播进行…

应届裁员,天胡开局——谈谈我的前端一年经历

应届裁员&#xff0c;天胡开局——谈谈我的前端一年经历 许久没有更新了&#xff0c;最近一个月都在忙&#xff0c;没错&#xff0c;正如题目所说&#xff0c;裁员然后找工作… 这周刚重新上班&#xff0c;工作第二天&#xff0c;感慨良多&#xff0c;记录些什么吧。 去年十…

AWS实战(一)-创建S3 存储桶

1&#xff09;登录AWS账号&#xff0c;选择服务—>存储—>S3。 2&#xff09;查看存储桶列表 3&#xff09;点击"创建存储桶"创建bucket。 4&#xff09;设置跨域 点击编辑&#xff0c;修改跨域设置即可。

基于SSM+Vue的健身房管理系统

基于SSMVue的健身房管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 课程信息 健身器材 管理员界面 用户界面 摘要 健身房管理系统是一种利用现…

Day40 Advanced Docking System使用方法

1.ads简介 Qt自带的铆接部件是QDockWidget&#xff0c;也被称为浮动窗口部件。QDockWidget可以用来创建可停靠的面板&#xff0c;它能够与QMainWindow、QDialog或任何具有centralWidget的QMainWindow派生类进行连接。QDockWidget提供了一个框架&#xff0c;允许用户将内容面板放…

Duplicate keys detected: ‘0‘. This may cause an update error

Duplicate keys detected: ‘0’. This may cause an update error.当遇到该节点内容更新时&#xff0c;会因为重复的key导致无法更新。 该错误&#xff0c;是因为同级节点下存在两个由0开始的key&#xff0c;当遇到该节点内容更新时&#xff0c;会因为重复的key导致无法更新。…

AD9371 AGC

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

【springmvc框架一文搞定】

SpringMVC框架 1. 搭建springmvc测试项目1.1 创建maven项目1.2 导入依赖pom.xml1.3 将springmvc容器加载到tomcat中1.4 启动tomcat插件1.5 访问路径&#xff1a; 2. 剖析启动过程2.1 启动服务器初始化过程2.2 访问路径执行过程 3.spring-springmvc bean的管理3.1 因为功能不同&…

信号发生器为什么输出信号和配置参数对不上?

1.问题&#xff1a; 今天在调试时遇到信号发生器输出信号与我实际输入的参数不符的问题。 我原本打算输出一个中心点是2.5V然后上下偏移1.5V的信号。刚操作信号发生器的时候&#xff0c;调节到正弦波输出&#xff0c;参数部分&#xff0c;必须要输入High,Low电平。这个很不方…