通过MoveNet和TensorFlow实现下一代姿态检测.
MoveNet是Google推出的一款轻量化姿态估计模型,是一个bottom-up的单人姿态估计模型。
MoveNet整体的结构如图所示,Backbone部分是比较经典的带三层deconv的MobileNetv2。Neck部分使用了目标检测中常见的FPN来做不同尺度的特征学习和融合。
Head部分有四个预测头,分别是:
- Center Heatmap $[B, 1, H, W]$:预测每个人的几何中心,主要用于存在性检测,用Heatmap上一个锚点来代替目标检测的bbox;
- Keypoint Regression $[B, 2K, H, W]$:基于中心点来回归17个关节点坐标值;
- Keypoint Heatmap $[B, K, H, W]$:每种类型的关键点使用一张Heatmap进行检测,这意味着多人场景下这张Heatmap中会出现多个高斯核;
- Offset Regression $[B, 2K, H, W]$:回归Keypoint Heatmap中各高斯核中心跟真实坐标的偏移值,用于消除Heatmap方法的量化误差。
对于四个头部预测的结果,会按照以下流程进行处理:
- 选择距离画面中心最近的人体目标的中心点。对于画面中的每一个像素,预先计算好一张权重Mask,每一个像素上的权重等于这个像素到画面中心的集合距离的倒数,用它对Center Heatmap加权,把画面中其他人的响应值压低,从而通过Argmax拿到离画面最近的人的最大值点。
- 通过Keypoint Regression的结果获得一个人的所有关键点的坐标。
- 假设距离Regression位置最近的高斯核是感兴趣目标的。通过Regression的坐标和全图的像素计算出一个权重Mask,用它来对Keypoint Heatmap加权,从而抑制掉其他距离较远的高斯核响应值,从而通过Argmax拿到感兴趣目标的关键点。
- 通过Offset Regression分支来预测Heatmap到GT点的偏移,从而消除量化误差。
MoveNet 在两个数据集上进行了训练:COCO和一个名为 Active 的内部 Google 数据集。虽然 COCO 是标准基准数据集,但它并不适合健身和舞蹈等场景应用,因为这些应用表现出具有挑战性的姿势和明显的运动模糊。Active 是通过在 YouTube 上的瑜伽、健身和舞蹈视频上标记关键点(采用 COCO 的标准 17 个身体关键点)生成的。每个视频中选择的训练帧不超过三帧,以促进场景和个人的多样性。