OpenPose:实时多人2D姿势估计
该方法使用一种非参数表达,即Part Affinity Fields (PAFs),学习将身体部分与图片中人关联起来。
Part Affinity Fields: 是一组2D向量域的集合,编码四肢在图像空间的方向和位置。
文中提出PAF refinement对提升准确率是至关重要的,而身体部位预测的refinement不是那么重要,而且取出这部分的refine可以提高速度。
输入:一张w x h的彩色图像
输出:每个人的关节点在图像中的2D位置
方法:
S包含J个置信图,每个表示一个部位;L包含C个向量场,每个表示一个肢体,文中将一对身体部位作为一个肢体。
- 前馈网络:预测身体部位位置的2D置信图S和2D向量场L(表示PAF,编码部分间的关联角度);
- 贪心推断:划分置信图和PAF,输出所有人的2D关键点。
网络架构:
F:第一阶段输入,来自于预训练并finetuned的VGG-19的第10层特征;
蓝色部分:第一阶段,输出一组PAF,,
。第一阶段迭代T_P次,然后进入第二阶段;
米黄色部分:第二阶段,输出部位置信图S,。
两个部分迭代进行训练,目标函数是计算预测结果与groundtruth之间的L2加权损失:
其中上标*表示对应的groundtruth标注,W是二值掩码,当点p处没有标注时,W(p) = 0。
整体训练目标:
部位置信图的grountruth生成:我们首先为每个人k生成置信图,令表示人物k身体部位j的groundtruth位置标注,位置p的部位置信图的值为:
整个图像的部位置信图的groundtruth为个体置信图的聚合:。
PAF是每个肢体的2D向量场,区域中的每个像素属于一个特定的肢体,使用一个2D向量编码该像素从该肢体的一个部位到另一个部位的方向。
如上图所示,和
是人物k的身体部位j1和j2的groundtruth位置,如果一个点p位于该肢体上,那么该点的groudntruth PAF值
是从j1到j2的单位向量,如果点不在该肢体上,向量为0,即:
其中,位于肢体c上的点集受距离约束:
其中,
。
整个图像PAF groundtruth定义为所有人的PAF平均:。
测试过程中,我们通过计算沿着连接两个候选部位的线段的PAF积分作为候选部位的关联程度。对于两个候选肢体位置和
,我们沿着它们之间的线段采样预测的PAF ,计算它们连接的置信度:
其中p(u)表示两个身体部位位置的插值:。
我们在检测到的部位置信图上应用非极大值抑制,获得一个离散的部位候选位置集合,其中
,我们需要从中发现部位对构成肢体。目标是从中找出所有可能连接
中的最优分配,其中
表明是否两个候选部位被连接。
如果考虑第c个肢体是一对部位的连接问题,该问题可以形式化为一个最大加权无向图匹配bipartite graph matching问题:
该问题可使用Hungarian算法获得最优匹配。
考虑多人整个身体姿势问题,决定Z是一个k-维匹配问题,是一个NP-hard问题。该文章提出两种relaxation方法进行优化:
- 选择最小数量的边,构成人体姿势的spanning tree骨架;
- 分解匹配问题为一组双边匹配子问题,独立地决定邻接树节点的匹配。
通过上述relaxations,优化问题被简单分解为:
因此我们独立地获得每种limb类型的连接候选。获得所有limb连接候选之后,我们将分享相同部位检测候选的连接集合作为整个人体的姿势。
后面将继续研究其代码,如有错误欢迎批评指正!