BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs

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.ppmy.cn/news/1516578.html

相关文章

从数据生成到图数据库:Linux下Neo4j的CSV导入

文章目录 简介找到import文件夹准备csv表格数据导入neo4jTeacherStudent 简介 介绍如何在Linux系统中设置和使用Neo4j数据库。 首先,找到Neo4j的import文件夹,通常位于Neo4j安装目录下的data文件夹内,并展示通过neo4j.conf配置文件查找和修…

MySQL 数据库的规范化与反规范化详解

在数据库设计中,规范化(Normalization)和反规范化(Denormalization)是两个重要的概念,它们直接影响数据的存储效率、数据一致性以及查询性能。本文将详细介绍 MySQL 中的第一范式、第二范式和第三范式&…

qt圆环饼状图,非常小的窗口都能显示

非常小的窗口都能显示 QT core gui charts#include <QtCharts> using namespace QtCharts;//创建饼状图 void MainWindow::createpieSewies() {//饼状图QPieSeries * my_pieSeries new QPieSeries();//中间圆与大圆的比例my_pieSeries->setHoleSize(0.35);//…

Python知识点:如何使用PostgreSQL与Psycopg2进行数据库操作

要使用PostgreSQL与Psycopg2进行数据库操作&#xff0c;首先需要确保你的环境中已经安装了PostgreSQL和Psycopg2库。以下是一个简单的指南&#xff0c;展示如何使用Psycopg2与PostgreSQL进行连接和执行基本的数据库操作。 1. 安装Psycopg2 如果你还没有安装Psycopg2&#xff…

【SQL基础】【leetcode】SQL50题

查询 &#xff08;1&#xff09;可回收且低脂的产品 题目链接 SELECT product_id FROM Products WHERE low_fatsY AND recyclableY;很简单&#xff0c;最基础的sql语句。 &#xff08;2&#xff09;寻找用户推荐人 题目链接 SELECT name FROM Customer WHERE referee_id …

嵌入式面经篇十——驱动开发

文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么?2、内核程序中申请内存使用什么函数?3、内核程序中申请内存和应用程序时申请内存有什么区别?4、自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用自旋锁还是信号量?5、驱动卸载异常可能是…

了解一下 CSS 的了解font-variant-alternates属性

font-variant-alternates 是 CSS Fonts 模块中的一个属性&#xff0c;它允许你控制字体的变体&#xff08;variants&#xff09;和替代字形&#xff08;alternate glyphs&#xff09;的显示。这个属性提供了比 font-variant 更细粒度的控制&#xff0c;特别是当字体包含多种样式…

计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 知识图谱

1.selenium爬取微博热搜、文章、评论数据存入mysql数据库&#xff0c;对评论lstm情感分析模型建模分析; 2.使用mapreduce对mysql中微博数据清洗&#xff0c;转为.csv文件上传hdfs文件系统&#xff1b; 3.使用hive建库建表,导入.csv数据集&#xff1b; 4.一半指标hive_sql进行离…

代码随想录算法训练营第三十九天 | 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

目录 198.打家劫舍 思路 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一&#xff1a; 动态规划-一维 方法二&#xff1a;动态规划-二维 方法三&#xff1a;动态规划-两个变…

JVM上篇:内存与垃圾回收篇-07-方法区

笔记来源&#xff1a;尚硅谷 JVM 全套教程&#xff0c;百万播放&#xff0c;全网巅峰&#xff08;宋红康详解 java 虚拟机&#xff09; 文章目录 7. 方法区7.1. 栈、堆、方法区的交互关系7.2. 方法区的理解7.2.1. 方法区在哪里&#xff1f;7.2.2. 方法区的基本理解7.2.3. HotSp…

基于 Transformer 的深度学习混合架构用于相位展开

原文&#xff1a;Transformer based deep learning hybrid architecture for phase unwrapping &#x1f4a1; 摘要&#xff1a;提出了一种用于相位展开的深度学习混合架构。混合架构基于卷积神经网络 (CNN) 与视觉变换器的集成。将混合架构/网络在相位展开中的性能与基于 CNN …

使用AWS的EC2服务如何降低成本

在现代企业中&#xff0c;云计算已经成为推动业务创新和发展的重要工具。亚马逊云服务&#xff08;AWS&#xff09;的弹性计算云&#xff08;EC2&#xff09;提供了灵活的计算能力&#xff0c;企业可以根据需求快速部署和管理应用。然而&#xff0c;如何在使用EC2服务的过程中有…

【MySql】深入解析MySQL底层基础知识:存储引擎、数据结构与磁盘交互

一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统&#xff0c;其底层基础知识对于数据库管理员和开发者来说至关重要。本文将详细介绍MySQL的存储引擎、数据结构以及数据在磁盘上的存储和读取机制&#xff0c;帮助读者更好地理解MySQL的内部工作原理。 二、MySQL存…

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档&#xff0c;需要详细讨论微服务架构的核心概念、优缺点、关键技术&#xff0c;以及在分布式系统中的应用。以下是文档的大纲和内容概述&#xff1a; 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

Java学习笔记(04)String与可变字符序列:StringBuffer、StringBuilder的区别

前言&#xff1a; 因为String对象是不可变对象&#xff0c;虽然可以共享常量对象&#xff0c;但是对于频繁字符串的修改和拼接操作&#xff0c;效率极低&#xff0c;空间消耗也比较高。因此&#xff0c;JDK又在java.lang包提供了可变字符序列StringBuffer和StringBuilder类型。…

opencv-4.8.0 Yes everything works with CUDA 12.3 and cuDNN 8.9.7.

opencv-4.8.0 CUDA 12.3 DNN 8.9.7 完美编译运行 脚本&#xff1a; sudo apt-get install libeigen3-dev sudo apt-get install protobuf-compiler sudo apt-get install libeigen3-dev sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen cd ${current_path}/deps…

8月26日,恭喜CUUG 肖同学获得19c OCM证书!

8月26日&#xff0c;恭喜CUUG 肖同学获得Oracle 19c OCM证书。 19c OCM 考试大纲&#xff1a; Skillset 1&#xff1a;常用数据库与网络管理 Skillset 2.1&#xff1a;管理数据库的可用性 Skillset 2.2&#xff1a;数据仓库管理 Skillset 2.3&#xff1a;数据管理 Skillse…

【ORACLE】如何使用 EXPLAIN PLAN来分析和优化包含 GROUP BY 的查询?

在Oracle数据库中&#xff0c;使用EXPLAIN PLAN来分析和优化包含GROUP BY的查询是一个重要的性能调优步骤。以下是如何使用EXPLAIN PLAN来分析这类查询&#xff0c;并提供一些优化建议的步骤&#xff1a; 步骤 1: 生成执行计划 首先&#xff0c;你需要为包含GROUP BY的查询生…

MySQL中的锁详解

1.概念 锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题&#xff0c;锁的冲突也是影响数据库并发访问性能的一个重要因素&#xff0c;所以数据库中锁的应用极为重要&#xff0c;其复杂度也更高。 …

Kafka的生产者和消费者机制

目录 1.基础的客户端 1.1消息发送者的主流程 1.2消息消费者主流程 2.客户端工作机制 2.1消费者分组消费机制 2.2生产者拦截器机制 2.3消息序列化机制 2.4消息分区路由机制 2.5生产者消息缓存机制 2.6发送应答机制 2.7生产者消息幂等性 (1)生产者消息幂等性介绍 (2…