Mediapipe 人体姿态估计专题(一) Blaze组件算法之Blazeface (带一个小开源分享给大家)

Mediapipe 人体姿态估计专题(一) Blaze组件之Blazeface检测器

我一直在!并且给大家分享一个小开源!


Mediapipe 人体姿态估计专题

  • Mediapipe 人体姿态估计专题(一) Blaze组件之Blazeface检测器
  • 前言
  • 为什么要推mediapipe?
  • 一、Blazeface
    • 1.block设计
    • 2.anchor设计和后处理优化
  • 训练部分(待更新,本周尽快完成)
  • 总结


前言

最近事情太多了,所以没时间写文章,其实今天也是如此,抽点时间稍微写写,更重要的是今天不只是分享算法,而是分享一个自己快速搭建的Pytorch版本的mediapipe小项目,默默摆出git,喜欢请Star,简单介绍下,基于torch版本的mediapipe的blaze组件,加入了虹膜识别提取,驱动模型的卡尔曼滤波平滑等,后续便于研究学习,还会持续更新
Mediapipe 人体姿态估计专题(一) Blaze组件算法之Blazeface (带一个小开源分享给大家)_第1张图片
请Star/FORK/WATCH 三连! https://github.com/positive666/mediapipe_PoseEstimation_pytorch.git

为什么要推mediapipe?

  1. 因为好用啊
  2. mediapipe的核心其实是不开源的,你如果用mp调包是体验不到精髓的!这里面涉及了他们的改进点和在媒体应用上的策略优化,哪怕本篇下面讲的一些部分仍旧没有我认为的后续要更新的下篇中涉及的策略优化技巧更重要。

一、Blazeface

Mediapipe 谷歌的媒体处理机器学习框架,主打移动端计算,即使CPU也能保证极快的处理速度,今天介绍基础组件检测器blazeface,目前常规的移动端模型骨干还是以mobilenet\shufflenet的系列变体为主,(2019年的论文),谷歌基于SSD-mobilenet进行了魔改,包含网络结构、anchor机制、替换NMS后处理,使算法在人脸检测任务中保持高精度的同时,在移动GPU推理的轻量级网络,废话不多说,我们从结构到代码来过一过,顺便为回归检测改进做个热身!

1.block设计

上图是论文里设计的结构bottleneck结构, 这里直接说结论了,那么设计的原因:在移动端要考虑计算量,深度可分离卷积中的1x1卷积占据了相对较大计算资源,特别是最后几层因为要表达更丰富的语义特征,往往会产生比较高的通道数,在端侧性能上开销过大,但直接减少通道又会变相降低模型性能,所以研究人员认为更大的感受野才是重点,“增加深度可分离卷积操作中第一步核的大小是相对高效的选择”,增大卷积核的大小为5X5,整个结构的开销就会降低,增大了卷积核后的Blaze单元的开销很小,使得另一个层的加入成为可能。

Mediapipe 人体姿态估计专题(一) Blaze组件算法之Blazeface (带一个小开源分享给大家)_第2张图片

于是研究人员又在上面模块的基础上开发出了双份的Blaze单元。不仅增加了感受野的大小,同时也提高了特征的抽象,最终这样的设计极大压缩了模型大小,使其速度高于原版的MobileNet SSD,因此其实blazeface有两种backbone的结构(single和double),具体参考git代码:结构代码

2.anchor设计和后处理优化

BlazeFace与SSD的不同(SSD 使用 1×1, 2×2, 4×4, 8×8, 和 16×16 的五层特征图来回归目,人脸长宽比的变化有限,因此作者们发现将anchor固定为1:1纵横比足以进行精确的面部检测)仅仅包含了2个尺度的特征进行人脸检测,且在16x16特征下每个点仅采用2个anchor,在8x8特征下每个点采用6个anchor,毕竟致力于移动端的检测场景,目标明确,顺便提升推理速度。

没有将分辨率降低到 8×8 以下,因此与给定目标重叠的锚点数量会随着目标大小的增加而显着增加。在典型的非极大值抑制场景中,只有一个锚点“胜出”并用作最终的算法结果。当将这种模型应用于后续视频帧时,预测倾向于在不同锚框之间波动并且表现出时间抖动

为缓解以上问题,提出了一种blending策略替换原来的NMS,即将边界框的回归参数估计为重叠预测之间的加权平均,这里实际就是改进的权重NMS,具体为:

1.根据BOX的score从大到小排序
2. 计算当前BOX与其他BOX的IOU
3. 通过NMS的阈值判断是否重叠
4. 根据重叠结果的置信度分数加权,取其平均坐标为结果

作者说对于在视频中的面部检测任务,此调整导致准确度提高10%

另外与SSD以及常规的检测器不同的还有:Head部分被设计的更轻量化————Pooling Pyramid Network,采用max pooling来代替原有的卷积,代替常规不同尺度的预测head,因此通过池化调整分辨率,并且PPN采用一个共享的conv来得到类别分数和边框位置,主要还是为了降低参数量、减少计算量,设计的宗旨就是在不保证性能的前提下,压缩模型和提升运行速度。

训练部分(待更新,本周尽快完成)

总结

下篇的BlazePose内容较多 ,干货满满,今天算是预热下,另外希望大伙支持下我的新开源 STAR++

你可能感兴趣的:(mediapipe,算法,深度学习,人工智能)