0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

比闪电还快,人脸检测中的战斗鸡!

nlfO_thejiangme 来源:YXQ 2019-07-17 17:22 次阅读

人脸检测是应用最为广泛的计算机视觉任务之一,特别是在移动端上发挥着不可替代的重要作用,包括美颜、人脸跟踪、VR、人脸特效、人脸识别等任务以及刷脸支付、直播、试妆等应用上都有着广泛的引用,几乎涵盖了人工智能落地的方方面面。作为很多后续工作的第一步,人脸检测器需要达到非常高效的性能,尽可能高速准确地完成检测任务。

为了不断提升用户的流程体验、促进人脸相关应用的进一步发展、拓宽支持人脸检测的设备范围,来自谷歌的研究人员通过改造mobileNet提出更为紧凑的轻量级特征提取方法、结合适用于移动端GPU高效运行的新型锚框机制,以及代替非极大值抑制的加权方法保证检测结果的稳定性,在移动端上实现了超高速的高性能人脸检测BlazeFace最快不到一毫秒的检测速度为众多人脸相关的应用提供了更广阔的发展空间。

强大的模型一定有强大的细节在支撑。

BlazeFace模型一共从四个方面进行了有效改进,从而大幅减小了计算量并提高了检测精度与稳定性。它提升了mobilenet中深度可分离卷积的计算效率和感受野,基于此构建了有效的特征抽取器、改进锚框机制后处理过程。

更大的感受野更快的计算。mobilenet中的深度可分离架构包含了每个通道上的3*3卷积和逐点进行的在深度方向上的1*1的卷积操作。

深度可分离卷积

研究人员发现,其中大部分计算量都发生在最后逐点计算1*1的过程中。例如针对一个s*s*c的张量,如果使用k*k卷积核为大小的深度可分离操作,那么第一步操作的计算量是s^2*c*k^2,第二步针对d个通道的输出进行逐点1*1卷积的计算量则是s^2*c*d,第二步相对于第一步的计算量消耗是d/k^2倍。在mobilenet论文中也提高1*1卷积对于计算资源的占比较高。

让我们再来直观的感受一下这两种操作计算量的大小。针对实际的iPhoneX手机,其中基于Metal Performance Shader实现的3*3卷积,针对56*56*128大小的16比特浮点张量操作需要0.07ms,而使用1*1卷积对128通道到128通道的操作则需要耗时0.3ms,几乎是前者的四倍多。

这样的结果为研究人员指明了提高效率的方向,增加深度可分离卷积操作中第一步核的大小是相对高效的选择。所以在BlazeFace中研究人员将卷积核的大小扩大成了5*5。卷积核的增大在bottleneck总量减小的情况下保证了模型感受野的大小。

此外,MobileNetV2的bottleneck通过非线性将深度增加的扩张和深度缩减的投影分开。

mobileNet中的深度可分离卷积单元

为了适应Blaze单元中更少的通道数,研究人员对这一阶段进行扫描使得残差可以实现类似拓展通道分辨率的操作。

BlazeBlock的单元构造,包括增大的卷积核与残差连接。

左图是基本的blaze单元,右图是双blaze单元

由于增大了卷积核后的Blaze单元的开销很小,使得另一个层的加入成为可能。于是研究人员又在上面模块的基础上开发出了双份的Blaze单元。不仅增加了感受野的大小,同时也提高了特征的抽象。

特征抽取器。虽然这一模型同时适合与后摄和前摄,研究人员在文章中针对前视摄像头作为例子来构建特征抽取器,前视摄像头需要搜索的范围更小,计算需求也更少。

模型的输入是针对128*128大小的rgb图像展开的,在一个卷积后叠加了5个单Blaze单元和6个双Blaze单元,可以看到通道数最多的时候达到了96,而最低的空间分辨率则不低于8*8的大小。

可以发现这一模型的最大通道数大大小于其他模型,而最低空间分辨率也较高。下面是模型的构造细节:

锚框机制。锚框在目标检测中广泛使用,通常为了适应多尺度的目标,预定义的锚框都包含了多个不同的分辨率。同时大幅度的将采样也为目标检测中的计算量带来了较多的优化。虽然SSD中使用了多个不同尺度的特征度来进行预测,单池化金字塔架构中却表明过多尺度的特征图可能在某个分辨率后变得冗余。

同时GPU计算相比于CPU存在一个需要注意的关键问题,针对特定层的计算GPU存在固定的调度开销,在对低分辨率层进行计算时会尤其明显。例如测试中的MobileNetV1耗时4.9ms,其中只有3.9ms真正在进行计算。

综上考虑,研究人员对于锚框的设计作出了以下几个方面的改进:

首先特征图的尺寸不低于8*8,避免更深的下采样;

其次将8*8,4*4和2*2各个特征图上的两个锚框用8*8特征图上的6个锚框代替;

由于人脸的宽高比相对问题,在实际过程中使用1*1的锚框比例已经能够达到足够的精度了。

后处理。由于在8*8的特征图上存在多个锚框,很有可能产生多个重叠的结果。为了处理多个不同的框,先前的方法利用执行度的非极大值抑制来选择可能性最高的框作为结果,但这会带来人脸检测结果的抖动,造成人类感知上的不适。

为了缓解这种抖动,研究人员使用融合策略代替了非极大值抑制,通过加权平均多个重叠结果的方式来估计最后回归的bbox参数。这不会增加额外的计算量,在减小抖动的同时还提升了10%的精度。实验表明这一机制使得前视摄像头的人脸检测抖动降低了40%,后摄则降低了30%。

优异性能

实验中研究人员利用66K图像进行了训练,2K多样性图像进行了测试。下图显示了数据在地理位置上的多样性:

针对前视摄像头模型,只有超过20%的区域被人脸(faces)占据才考虑(后摄5%,为了与实际情况相符)。下图显示了与MobileNetv2-SSD对比下的前视摄像头性能,研究人员利用tensorflowLite在16bit下实现了模型,在iPhoneXS上仅需0.6ms,这意味着达到了1600fps+的速度。

研究人员还测试了在不同型号手机上的实现结果,速度都在约170fs到1600ps之间。

最后研究人员还比较了回归参数的预测质量,由于模型体量较小带来了一定程度的退化,但不影响AR或者人脸跟踪中的使用。

应用展示

高速准确的人脸检测网络将为后续的人脸相关任务提供有效地预处理,包括关键点检测、轮廓、表面几何估计、微表情识别和人脸解译等任务。

通过与BlazeFaze给出的人脸关键点结合,算法可以得到跟随人脸旋转的bbox,得到居中的、尺度归一化的、相对框无较大角度误差的人脸结果,这将大幅度降低后续对于图像的旋转和平移处理,节约了计算的开销。

例如在人脸轮廓检测中,首先利用BlazeFace模型预测出人脸框和对应的关键点,随后利用更为复杂的模型对人脸轮廓进行进一步优化估计。这些检测结果可以用于后续帧的处理中。

研究人员展示了基于这一人脸检测模型的一系列例子,包括人脸几何重建、分割、美妆等等。

值得一提的是,研究人员还将这一方法集成到了多模态媒体机器学习工具mediapipe中,这一工具包含了多种图像处理模块和方法、可以基于图机制来构建多模态的机器学习应用工具链,并实现跨平台的运行。

最后附上一份Blazeface的海报,再次感受下这一算法众多的创新:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    5855

    浏览量

    103250
  • 人脸检测
    +关注

    关注

    0

    文章

    71

    浏览量

    16284

原文标题:超高速人脸检测器BlazeFace,谷歌将人脸检测效率提升到逆天水平

文章出处:【微信号:thejiangmen,微信公众号:将门创投】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【飞腾派4G版免费试用】飞腾派SeetafaceEngine人脸检测

    收到个飞腾派,周末有空玩玩。。。 Seetaface是2016年科院老师开源的的人脸识别引擎。https://github.com/seetaface/SeetaFaceEngine 源码
    发表于 12-18 10:53

    闪电接口和USB-C接口有什么区别?

    闪电接口和USB-C接口有什么区别? 闪电接口和USB-C接口是两种不同的连接标准,用于连接电子设备和充电设备。它们在一些方面有相似之处,但也存在明显的区别。本文将详细探讨闪电接口和USB-C接口
    的头像 发表于 12-09 15:55 2084次阅读

    Android系统下OpenCV的人脸检测模块的设计

    电子发烧友网站提供《Android系统下OpenCV的人脸检测模块的设计.pdf》资料免费下载
    发表于 10-23 09:37 0次下载
    Android系统下OpenCV的<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>模块的设计

    【KV260视觉入门套件试用体验】五、VITis AI (人脸检测和人体检测)

    -t 8 使用的事奥的摄像头,程序实时监测人脸。 三、RefineDet人体检测 RefineDet是一种基于SSD(Single Shot MultiBox Dete
    发表于 09-26 16:22

    如何使用数据闪电模拟Mini51 EEPROM

    应用:数据闪光模拟EEPROM和写/读EEPROM BSP 版本:Mini51DE系列 BSP CMISIS V3.02.000 硬件: NuTiny-EVB-Mini51_V2.1 使用数据闪电
    发表于 08-23 06:05

    如何在交互式人脸检测演示中将Web浏览器流用作目标输入?

    无法将 Web 浏览器流用作交互式人脸检测演示的目标输入。
    发表于 08-15 06:02

    DCNN网络结构 DCNN的人脸特征点检测

    摘 要:在介绍人脸特征点检测的理论知识的基础上,提出了一种基于深层卷积神经网络(Deep ConvolutionalNeural Network,DCNN)解决人脸5点特征点(眼角、鼻子、嘴角)预测
    发表于 07-20 14:30 0次下载

    夜间(低光照)目标检测数据集整理:人脸检测,行人检测

    1.夜间(低光照)人脸检测的数据集 DARK FACE: Face Detection in Low Light Condition 提供了6000幅真实世界的低光图像,在夜间捕获,在教学楼、街道
    的头像 发表于 07-02 13:46 1981次阅读

    在OpenNCC上部署人脸检测模型

    电子发烧友网站提供《在OpenNCC上部署人脸检测模型.zip》资料免费下载
    发表于 06-27 10:34 0次下载
    在OpenNCC上部署<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>模型

    Arduino的闪电探测器

    电子发烧友网站提供《Arduino的闪电探测器.zip》资料免费下载
    发表于 06-19 11:41 0次下载
    Arduino的<b class='flag-5'>闪电</b>探测器

    在Ultra96 V2平台上用Python实现人脸检测人脸跟踪

    电子发烧友网站提供《在Ultra96 V2平台上用Python实现人脸检测人脸跟踪.zip》资料免费下载
    发表于 06-16 09:22 0次下载
    在Ultra96 V2平台上用Python实现<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>和<b class='flag-5'>人脸</b>跟踪

    Xilinx KV260 Vitis-AI 1.4人脸检测

    电子发烧友网站提供《Xilinx KV260 Vitis-AI 1.4人脸检测.zip》资料免费下载
    发表于 06-14 10:34 0次下载
    Xilinx KV260 Vitis-AI 1.4<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>

    一文看懂人脸识别技术

    广义的人脸识别实际包括构建人脸识别系统的一系列相关技术 , 包括人脸视图采集 、 人脸定位 、 人脸识别预处理 、 身份确认以及身份查找等
    的头像 发表于 05-22 09:26 1757次阅读

    【EsDA应用】5分钟快速实现图像人脸检测

    人脸识别是一种高安全性的生物识别技术,广泛应用在安防、身份验证等领域。而人脸检测是进行人脸识别的重要前提,本文主要介绍如何基于EsDA设计的人脸
    的头像 发表于 05-18 10:48 399次阅读
    【EsDA应用】5分钟快速实现图像<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>

    【EsDA应用】5分钟快速实现图像人脸检测

    人脸识别是一种高安全性的生物识别技术,广泛应用在安防、身份验证等领域。而人脸检测是进行人脸识别的重要前提,本文主要介绍如何基于EsDA设计的人脸
    的头像 发表于 05-17 12:20 376次阅读
    【EsDA应用】5分钟快速实现图像<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>