Towards Accurate Multi-person Pose Estimation in the Wild

一篇比较老的文章, CVPR 2017的, 链接地址

概括
论文采用了top-down的方法, 即先检测出人, 然后再坐单人pose检测. 检测人的方法使用了faster-rcnn, 单人pose方法是已reset结构为基础的网络. 关于faster-rcnn我不是很了解而且网上介绍很多, 略去不表, 下面着重介绍pose检测这块.

pose estimation

  • person box cropping. 检测出来的框有大有小, 为了尽量保持框里的人形状不发生剧烈改变, 首先先对检测出的框进行扩充, 扩充后的大小仍然保留原来的比例, 然后训练时对框进行1~1.5倍之间的随机缩放(测试时固定为1.2倍), 然后crop出一个固定353x257大小的图片.
  • 然后通过一个CNN网络得到输出为 h x w x k x 3的output featuremap. k是关节点类型的个数, coco数据集中是17; h, w是最后的输出大小, 3表示一层heatmap channel, 一层 x offset channel, 一层 y offset channel. 然后再通过一个空洞卷积使其上采样到输入大小(353 x 257)
  • 网络的输出不再是之前常用的一个heatmap, 而是另外加了2个offset, 分别是该heatmap每个地方到正确的关节点位置的x offset 和 y offset. 那么最终我们去得到每个heatmap上关节点的正确位置, 不再是直接通过第一层的heatmap channel就得出结果, 而是要三个channel融合到一起, 再从得到的最终结果上寻找最大响应值. 融合方式为:在这里插入图片描述
    G是bilinear interpolation kernel (一直没找到资料到底是什么函数映射), h k h_{k} hk是输出的heatmap channel, F k ( x ) F_{k}(x) Fk(x)为加上x offset 和 y Offset之后的值, 对于位置 x i x_{i} xi, 需要把heatmap所有的位置都计算一遍然后除去一个 π R 2 \pi R^{2} πR2. 除去这个值的原因是, 如果网络的预测特别准, 那么除了在以真正关节点为圆心, 半径为R的园内应该有值的话, 其余地方应该都是0, 所以才只除去 π R 2 \pi R^{2} πR2而不是除去整个heatmap的大小, 不然就会分散真正有值的地方值的大小. 可以参考下面两幅图加以理解:在这里插入图片描述在这里插入图片描述
  • 训练时计算Loss的时候, 不再是像hourglass那样直接的l2 loss, 而是分成了一个二分类的loss和一个回归loss. 二分类loss就是用来判断heatmap channel里, 哪些是关键点, 哪些不是(当然在训练时不是只判断一个点, 而是同样的以真值为中心, 半径为R的圆内都是1,其余都是0的label来计算), 用的是logistic loss,原文中有这么一段话“When computing the heatmap loss at the intermediate layer, we exclude contributions from within the disks around the keypoints of background people. When computing the heatmap loss at the final layer, we treat as positives only the disks around the keypoints of the foreground person and as negatives everything else, forcing the model to predict correctly the keypoints of the person in the center of the box”,当在网络中间计算loss时,忽略在背景人体上的关键点的loss,而在计算最终loss时,网络只计算前景人的loss而将剩下的都视为负样本。 我的理解是中间loss计算是忽略背景人关键点loss,而最终loss计算则是将背景人关键点loss当做负样本,这个和CPM的做法不太一致。回归loss就是用来回归 x offset channel 和 y offset channel, 最后两个loss加在一起就是总的loss: Towards Accurate Multi-person Pose Estimation in the Wild_第1张图片
  • 最后需要根据1式得到的新的heatmap来寻找joint, 并且会对这个结果进行重新打分, 因为在检测出来的person box不一定真的有人, 或者说根据这个person box计算得到的新的heatmap score很低, 那么就认为这个框是错误的, 可以拒掉. 作者发现加上这个条件会比直接把所有的person box都当做检测结果得到的AP值会更高, 这部分就是论文里的Pose Rescoring部分.

亮点

  • 加上两个offset用来提高关节点的精度
  • 引用了回归的思想, 类似于目标检测里对anchor的offset计算一样
  • 加入了oks-nms作为后处理步骤,提高AP值

你可能感兴趣的:(human,pose,estimation,multi-person,top-down)