Paper Reading

Towards Accurate Multi-person Pose Estimation in the Wild (CVPR 2017)

Towards Accurate Multi-person Pose Estimation in the Wild (CVPR 2017)
2020-03-18 · 5 min read
2017 Google Pose CVPR

Goal
解析文中令人费解的霍夫投票公式

文章链接: arXiv
作者信息:

George Papandreou, Tyler Zhu, Nori Kanazawa, Alexander Toshev, Jonathan Tompson, Chris Bregler, Kevin Murphy
Google, Inc.

Overview

基于深度学习的人体姿态/关键点检测常用的方法有以下几种:

  1. 基于回归的方法: 直接通过网络回归出图像中人体关键点的坐标, 这种方法在早期(2014年左右)有使用, 但由于回归任务很难训练, 现在(2020年)几乎看不到了
  2. 基于分类的方法: 将人体关键点检测看作类似分割的任务, 通常在关键点处放置高斯核作为监督信号, 让网络输出热图(heatmap), 以表示关键点可能的位置及其概率, 再通过一些后处理的手段从热图得到关键点坐标. 这种方法中, 关键点位置实际上是一片区域, 而不仅仅是一个点, 网络容易学习. 不足之处就是由于最终热图的尺寸降采样很严重, 由量化误差导致的性能损失较多
  3. 分类与回归相结合的方法: 据我所知, 本文应该是最早结合分类与回归的方法. 这种方法为每个位置预测当前位置到关键点的偏移量, 然后基于霍夫投票的思想, 把关键点附近的各个位置的偏移量的预测加和起来, 可以得到更准确的关键点位置. 但是由于本文没有开源代码, 而且霍夫投票的这个公式写的极难理解, 导致很多人只能通过文中图2去猜测实际的做法. 本篇博客旨在详细解析该论文的公式(1)

Heatmap and Offset Prediction with CNN

Network Output

KK 为关键点的数量, 网络的输出的channel数为 3K3K, 即每个关键点有3层输出. 其中1层是heatmap, 本文中是一个二值的mask. 其余两层是offset, 其值表示该位置在 xx 和 yy 方向与关键点的距离.

Heatmap

Heatmap应该很好理解, 本文中使用的是二值的mask, 关键点周围圆形区域值为1, 其他位置值为0. Heatmap表示了关键点位置的粗略估计, 即关键点周围的一片圆形区域, 如上图中红色区域.

Offset

已经通过heatmap的学习得到了关键点的粗略位置, 但是图中红色区域内都有可能是关键点所在位置, 具体在哪一个位置呢? 可以通过霍夫投票的方式, 综合考量多个位置处对于关键点所在位置的预测, 得到一个细化的预测.
Offset的ground-truth如上图的最右子图. Offset有两个channels, 这里画出的应该是两个channel的值的平方和的根, 也即欧式距离. 距离关键点越远, 值/距离越大, 但到了heatmap圆形区域外的部分忽略.

fk(xi)=∑j1πR2G(xj+Fk(xj)−xi)hk(xj)f_{k}\left(x_{i}\right)=\sum_{j} \frac{1}{\pi R^{2}} G\left(x_{j}+F_{k}\left(x_{j}\right)-x_{i}\right) h_{k}\left(x_{j}\right)

fk(xi)f_{k}\left(x_{i}\right)在文中被称为highly localized activation maps, 对应下图最右的fused activation maps. xj+Fk(xj)x_{j}+F_{k}\left(x_{j}\right) 表示的是位置xjx_{j}对于关键点所在位置的预测, 把这些预测加和起来就实现了霍夫投票, 得到一个更为精细的关键点位置预测. 这里最令人费解的是G(⋅)G(\cdot) -- the bilinear interpolation kernel, 文中完全没有对此的详细说明. 我猜测 G(⋅)G(\cdot)应该是一个输入2D向量, 输出一个标量的函数. 2D向量是xj+Fkx_{j}+F_{k} 与 xix_{i}的offset, offset越大, 输出值越接近0, 那么fk(xi)f_{k}\left(x_{i}\right)值越小, 表示xix_{i}位置不太可能是关键点位置.

Comments

这篇文章提出的霍夫投票的思路得到refined关键点位置其实很有意思. 只通过heatmap, 由于降采样导致的量化误差很大, 会影响最终关键点位置的精度. 如果在全图上用回归的方法找关键点位置, 虽然理论上可以做到无限精度, 但是实际网络很难训练好. 本文通过heatmap的方式找到关键点所在的大概位置, 然后在一个较小的区域内用回归的方法去找更精细的关键点位置, 结合了以上两种方式的优点. 后续也有一些工作采取了类似的做法, 比如PIFPAF.