BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs

news2024/11/27 1:27:25

Abstract

我们提出了BlazeFace,这是一种轻量级且性能优异的面部检测器,专为移动GPU推理而设计。它在旗舰设备上运行速度可达200到1000+ FPS。这种超实时性能使其能够应用于任何增强现实管道中,作为任务特定模型的输入来准确识别面部感兴趣区域,例如2D/3D面部关键点或几何估计、面部特征或表情分类以及面部区域分割。我们的贡献包括一个轻量级的特征提取网络,该网络受到MobileNetV1/V2的启发但有所不同,基于单次多框检测器(SSD)修改的适合GPU的锚点方案,以及一种改进的替代非极大值抑制的平局分辨策略。

1. Introduction

近年来,深度网络中的各种架构改进([4, 6, 8])使实时物体检测成为可能。在移动应用中,这通常是视频处理管道中的第一步,接下来是特定任务的组件,如分割、跟踪或几何推理。因此,物体检测模型的推理必须尽可能快,最好性能远高于标准的实时基准。

我们提出了一种新的面部检测框架,称为BlazeFace,该框架针对移动GPU推理进行了优化,并改编自单次多框检测器(SSD)框架[4]。我们的主要贡献包括:

  1. 与推理速度相关的改进: 1.1. 一个非常紧凑的特征提取卷积神经网络,结构上与MobileNetV1/V2 [3, 9]相关,专门为轻量级物体检测设计。 1.2. 一个基于SSD [4]修改的新型GPU友好锚点方案,旨在有效利用GPU资源。锚点[8],或SSD术语中的先验,是预定义的静态边界框,作为网络预测调整的基础,并确定预测的精细度。

  2. 与预测质量相关的改进:一种替代非极大值抑制[4, 6, 8]的平局解决策略,在重叠预测之间实现了更稳定、更平滑的平局解决。

2. 增强现实管道中的面部检测

虽然提出的框架适用于各种物体检测任务,但本文的重点是在手机摄像头取景器中检测面部。我们为前置和后置摄像头构建了单独的模型,原因是它们的焦距不同,捕获的物体大小也通常不同。

除了预测轴对齐的面部矩形外,我们的BlazeFace模型还生成6个面部关键点坐标(用于眼睛中心、耳屏、嘴巴中心和鼻尖),使我们能够估计面部旋转角度(滚动角度)。这使得能够将旋转后的面部矩形传递到视频处理管道的后续任务阶段,从而减少了后续处理步骤中对显著平移和旋转不变性的要求(见第5节)。

3. 模型架构和设计

BlazeFace模型架构围绕以下讨论的四个重要设计考虑因素构建。

扩大感受野尺寸

虽然大多数现代卷积神经网络架构(包括MobileNet [3, 9] 版本)倾向于在整个模型图中使用3×3卷积核,但我们注意到深度可分离卷积计算主要由它们的逐点部分主导。在一个尺寸为s×s×c的输入张量上,k×k深度卷积涉及s²ck²次乘加操作,而后续的1×1卷积到d输出通道则包含s²cd次操作,其与深度部分的操作差异因子为d/k²。

例如,在Apple iPhone X上使用Metal Performance Shaders实现时,使用16位浮点数运算的3×3深度卷积对56×56×128张量的计算时间为0.07毫秒,而后续的从128到128通道的1×1卷积则慢4.3倍,为0.3毫秒(由于固定成本和内存访问因素,这与纯算术操作数量差异并不完全一致)。

这一观察表明,增加深度部分的卷积核尺寸的成本相对较低。我们在模型架构瓶颈中采用5×5卷积核,使用卷积核尺寸的增加来减少达到特定感受野尺寸所需的瓶颈总数(见图1)。

MobileNetV2 [9]的瓶颈包含深度增加的扩展和深度减少的投影逐点卷积,由非线性操作隔开。为了适应中间张量中较少的通道数,我们交换了这些阶段,使瓶颈中的残差连接在“扩展”的通道分辨率下操作。

最后,深度卷积的低开销使我们能够在这两个逐点卷积之间引入另一个深度卷积层,加快了感受野尺寸的进展。这构成了BlazeFace高级抽象层的瓶颈——双BlazeBlock的精髓(见图1,右)。

特征提取器

具体来说,我们以前置摄像头模型的特征提取器为例。它需要处理的物体尺度范围较小,因此计算需求较低。提取器接收128×128像素的RGB输入,包括一个2D卷积,随后是5个单BlazeBlock和6个双BlazeBlock(完整布局见附录A中的表4)。最高张量深度(通道分辨率)为96,最低空间分辨率为8×8(与SSD相比,SSD的分辨率降低至1×1)。

后处理

由于我们的特征提取器未将分辨率降低到8×8以下,随着物体大小的增加,重叠给定物体的锚点数量显著增加。在典型的非极大值抑制(NMS)场景中,只有一个锚点“胜出”并作为最终算法结果。当将此类模型应用于后续的视频帧时,预测往往在不同的锚点之间波动,并表现出时间抖动(人类可察觉的噪声)。

为了尽量减少这种现象,我们用一种混合策略代替了抑制算法,该策略通过对重叠预测的加权平均来估计边界框的回归参数。它对原始NMS算法几乎没有额外成本。对于我们的面部检测任务,这一调整使准确度提高了10%。

我们通过将几个略有偏移的相同输入图像版本传递给网络,观察模型结果(调整以考虑平移)受到的影响来量化抖动。经过描述的平局解决策略修改后,抖动度量——定义为原始和位移输入的预测之间的均方根差——在我们的前置摄像头数据集上下降了40%,在包含较小面部的后置摄像头数据集上下降了30%。

4. 实验

我们在一个包含66K张图像的数据集上训练了我们的模型。在评估过程中,我们使用了一个由2K张图像组成的私有地理多样性数据集。对于前置摄像头模型,由于其预期的使用场景,仅考虑那些占据图像面积超过20%的面部(对于后置摄像头模型,该阈值为5%)。

为了保持尺度不变性,我们将回归参数误差通过眼间距离(IOD)进行归一化处理,测得的中位绝对误差为7.4%的IOD。通过上述提到的程序评估的抖动指标为IOD的3%。

表1展示了平均精度(AP)指标(使用标准的0.5交并比匹配阈值)和所提出的前置人脸检测网络在移动GPU上的推理时间,并将其与使用相同锚点编码方案的基于MobileNetV2的目标检测器(MobileNetV2-SSD)进行了比较。我们在推理时间评估中使用了16位浮点模式下的TensorFlow Lite GPU框架。

表3展示了由于模型尺寸较小而导致的回归参数预测质量的下降量。正如在以下章节中探讨的,这并不一定会导致整个AR管线质量的成比例下降。

5. Applications

所提出的模型在整个图像或视频帧上运行,可以作为几乎任何与人脸相关的计算机视觉应用的第一步,例如2D/3D人脸关键点、轮廓或表面几何估计、人脸特征或表情分类以及人脸区域分割。因此,计算机视觉管线中的后续任务可以根据合适的人脸裁剪来定义。结合BlazeFace提供的少量人脸关键点估计,这个裁剪也可以旋转,使得裁剪内的人脸居中、尺度归一化并且滚转角度接近零。这消除了任务特定模型对显著平移和旋转不变性的需求,从而允许更好的计算资源分配。

我们通过一个具体的人脸轮廓估计例子来说明这种管线方法。在图3中,我们展示了BlazeFace的输出(即预测的边界框和人脸的6个关键点,红色)如何通过更复杂的人脸轮廓估计模型进一步优化,应用于一个略微扩展的裁剪。详细的关键点产生了更精确的边界框估计(绿色),可以在后续帧的跟踪中重复使用,而无需再次运行人脸检测器。为了检测这种计算节约策略的失败情况,轮廓模型还可以检测人脸是否确实存在并且在提供的矩形裁剪中合理对齐。每当这一条件被违反时,BlazeFace人脸检测器将再次在整个视频帧上运行。

本文描述的技术正推动着主要的AR自我表达应用以及手机上的AR开发者API

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

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

相关文章

CST软件仿真案例:圆极化平板天线仿真02

本期继续完成一款圆极化Patch天线的仿真实例。读者可以完整的了解到怎么用CST微波工作室,完成对一款天线建模、设置到仿真分析的完整过程。 本期中,我们要设计的圆极化天线尺寸如下图所示: 本期内容是接着上期部分开始。首先先完成仿真实例0…

k8s部署redis一主两从三哨兵(集群内访问)

一、配置清单 1.基于K8s搭建部署1主2从3哨兵的Redis集群哨兵模式(集群内访问) 2.持久化数据选择用storageclass,动态创建pv存储,动态存储使用longhorn 创建redis配置文件 #注意内容中注释 apiVersion: v1 kind: Namespace metadata:name: prod--- ap…

C#学习第二节课 ,伤害计算

伤害计算 我一直好奇游戏的伤害计算是怎么计算并输出的,这第二节课利用学过的初级语法,Console.WriteLine,Console.ReadLine(),以及基础变量,int,string 和if 判断 组合,来实现打印一下伤害计算吧! 老规矩 先上结果图 代码区域 namespace hello01 {internal class Program …

秒杀商品超出限量购买修复方法

问题:秒杀商品购买会超出限量,多买 修复: 主要修改了以下文件,如果需要了文件全部在附件中,修改的基础版本是v2.3.2如果没有二开过,可以直接覆盖替换;如果二开了,请对比处理, ⚠️注意: 这样修改完以后,可能导致之前的秒杀都库存不足无法购买 ,需要重新添加 修改的记录,以供参…

开源低代码开发工具Lowcoder

Lowcoder_CN 是一个基于Web的低代码开发平台,旨在通过可视化界面和丰富的API,支持快速应用开发、企业内部工具构建以及教育用途。 以下是对Lowcoder_CN的详细介绍: 一、平台特点 开源与免费:Lowcoder_CN是开源的,允许…

【ACM出版 | IEEEACM院士、CCF杰出会员担任组委| 往届会后3个半月检索 】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)将于2024年10月25日-27日在中国-天津举行。新一代人工智能理论的快速发展为信息处理技术的提供了新方法,促进了智能信息处理的发展与应用。智能信息处理是信号与信息领域一个前沿、热点…

颖通控股突击巨额分红6.31亿远超净利润,滞销产品三年累计1750万

《港湾商业观察》黄懿 7月18日,被外界称为香水巨头的颖通控股有限公司(下称“颖通控股”)向港交所主板提交上市申请,BNP Paribas、中信证券为其联席保荐人。颖通(上海)贸易有限公司为其国内运营主体。 据…

[星瞳科技]OpenMV如何进行wifi通信?

OpenMV官方扩展板采用ATWINC1500模组,可以传输图像。 详细资料:http://singtown.cc/product/openmv-wifi扩展板/ 如果想使用ESP8266,使用串口通信就可以。 wifi扫描 无线传输图像 无线传输小球坐标 import sensor import time import netw…

基于PHP+MySQL组合开发的DIY分销商城小程序源码系统 附带源代码包以及搭建部署教程

系统概述 随着消费者对购物便捷性、个性化需求的不断增长,传统的电商模式已难以满足市场多样化需求。分销商城小程序以其低门槛、易传播、高粘性等特点,成为众多商家转型升级的首选。本源码系统正是基于这一市场需求,利用PHP这一成熟稳定的后…

【C++】深度解析:用 C++ 模拟实现 priority_queue类,探索其底层实现细节(仿函数、容器适配器)

目录 ⭐前言 ✨堆 ✨容器适配器 ✨仿函数 ⭐priority_queue介绍 ⭐priority_queue参数介绍 ⭐priority_queue使用 ⭐priority_queue实现 ✨仿函数实现 ✨堆的向上调整和向下调整 ✨完整代码 ⭐前言 ✨堆 堆是一种特殊的树形数据结构,通常以二叉树的…

AVI视频损坏了怎么修复?轻松几步解决你的困扰

在数字化时代,视频已成为我们记录生活、分享经验和传递信息的重要方式。AVI作为一种常见的视频格式,因其无损质量的特点而受到广泛欢迎。然而,有时候我们可能会遇到AVI视频文件损坏的情况,导致无法正常播放。别担心,本…

探索paho-mqtt:Python世界的物联网通信桥梁

文章目录 **探索paho-mqtt:Python世界的物联网通信桥梁**第一部分:背景介绍第二部分:paho-mqtt概览第三部分:安装指南第四部分:基础函数使用第五部分:实际应用场景第六部分:常见问题与解决方案第…

VMware vSphere Replication 虚拟机备份及迁移实践

vSphere Replication 介绍 vSphere Replication 是适用于 vSphere 的基于 Hypervisor 管理程序的异步复制解决方案,是 VMware vCenter Server 的扩展,包含在vCenter Server Standard中,可为环境中的所有虚拟机提供灾难恢复和数据保护。 vSph…

上午 2019

信息系统规划方法_信息系统规划有哪些方法-CSDN博客 1. 关键成功因素法(CSF) 在现行系统中,总存在着多个变量影响系统目标的实现,其中若干个因素是关键的和主要的(即关键成功因素)。通过对关键成功因素的识…

SpingBoot 两种方式配置多数据源

第一种&#xff1a;使用与MyBaits-Plus师出同门的“dynamic-datasource-spring-boot-starter” 官网地址&#xff1a; 基础必读&#xff08;免费&#xff09; dynamic-datasource 看云 1&#xff1a;引入依赖 <!-- 苞米豆多数据源 --> <dependency><group…

DID测试套件

DID测试套件 介绍 名称 DID Test Suite 网址 https://github.com/w3c/did-test-suite 功能 用于验证DID实现是否符合W3C DID Core规范的一系列测试反映各DID方法&#xff08;如did:orb、did:key、did:web等&#xff09;的实现对DID Core规范的遵从程度确保不同DID方法、…

揭示 Vue 3 setup 函数的奥秘

setup 是 Vue 3 的新特性&#xff0c;也是组合式 API&#xff08;Composition API&#xff09;的核心。它提供了一种全新的方式设计组件的逻辑&#xff0c;便于复用同时也增加代码可读性。 1. 理解 setup 1、组合式 API 的入口 setup 是在组件实例创建之前执行的&#xff0c…

Windows单机安装配置mongodb+hadoop+spark+pyspark用于大数据分析

目录 版本选择安装配置Java环境配置Hadoop配置Spark配置 安装pyspark使用Jupyter Notebook进行Spark MongoDB测试参考 版本选择 根据Spark Connector&#xff1a;org.mongodb.spark:mongo-spark-connector_2.13:10.3.0 的前提要求 这里选择使用最新的MongoDB 7.0.12社区版 ht…

Qt-frameGeometry介绍使用(12)

描述 这个和上一篇讲的geometry很像&#xff0c;但是又有点不一样&#xff0c;而且还挺容易出问题的&#xff0c;所以这里要专门提一下&#xff0c;首先我们要明白Window frame窗口坐标是有点区别的&#xff0c;如图就像这样的&#xff0c;左上角是有两个需要注意的位置&#…

百元蓝牙耳机买哪一款的好?四款年度平价好用耳机推荐!

蓝牙耳机大家都再熟悉不过了&#xff0c;作为现代人最常用的智能配件之一&#xff0c;谁还没有用过蓝牙耳机呢&#xff0c;但是现在蓝牙耳机的牌子真的是遍地开花&#xff0c;让人眼花缭乱的&#xff0c;这让大众选择起来却更加麻烦了&#xff0c;每个牌子的蓝牙耳机都有各自的…