关节点检测-OpenPose

二,OpenPose

运动计数app,需要用到姿态估计相关的算法。

  1. 网络结构

  1. 首先VGG提取图片的特征图,然后进入stage模块。
  2. 每个stage模块分为两个branch,分别生成pcm 和 paf。并且每个stage的pcm和paf都会进行loss求解。

问题一:第一个stage已经可以输出完整的信息,为什么还需要后面重复的stages?

因为关键点之间由相互的语义信息,例如在第一个stage中仅仅检测出眼睛,但是没有检测出鼻子,在第二个stage2中由于输入中带有stage1的输出,那么stage2就更可能根据眼睛推测出鼻子的位置,因此,后面的stage可以利用前面stage提取的信息,进一步优化检测结果,对于一些比较难检测的关键点很有用。

       更直白一点:所有关键点的检测难易程度不同,有一些眼睛鼻子等视觉特征非常明显,而有一些关键点可能会随着衣服,遮挡,首饰等有非常大的变化,因此前面的stage检测一些简单的关键点,后面的stage在根据前面检测出的关键点,检测更加复杂的一些关键点,这是一个渐进优化的过程。

  1. PCM

 PCM为关键点的热力图,用来表征关键点的位置。假设需要输出18个关键点信息,那么pcm会输出19个通道,最后一个通道作为背景信息。

理论上不输出背景也没有什么关系,但是输出背景有两个好处,一是增加了一个监督信息,有利于网络的学习,二是背景输出继续作为下一个stage的输入,有利于下一个stage获得更好的语义信息。下图是输入一张图片,输出19个PCM的示意图。

       虽然一个关键点对应一个pcm中的一个像素,但是一般不会这么做,一般会用高斯核来创建PCM的GT,

  1. PAF

Paf,关键点的亲和力场。 用来描述不同关键点之间的亲和力。属于同一个人的不同关节,亲和力大,不同人之间的关节,亲和力小。

由于openpose是一种bottom-up的姿态估计网络,也就是先不管关节是谁的,先一股脑的检测出来,然后接下来在确定哪些关节的亲和力大,那么把他们划分为同一个人。

       如下图所示,由于图片中有两个人的实例,检测出了两个左眼与两个左耳,那么如何进行配对呢?此时就是PAF的作用了,PAF会描述任意两个关节之间的亲和力(例如检测出2个左眼与2个左耳,那么每个左眼都能得到和所有左耳的亲和力,也就是一共有4个亲和力),如下图所示,颜色越黄,表示两个关键点之间的亲和力越强,左耳的1点与左眼的1点亲和力明显大于左眼1与左耳2,因此将左眼1与左耳1进行配对。同样的左耳2与左眼2的亲和力更大,因此将左耳2与左眼2进行配对。

       亲和力的快速计算:将两个关节之间均匀的分为5段,然后采集4个点的paf向量,作为最终的亲和力表示。

猜你喜欢

转载自blog.csdn.net/gaotihong/article/details/125143026