工作组:上交卢老师团队
发表处:BMVC
开源代码:https://github.com/YuliangXiu/PoseFlow 独立版本
GitHub实现:https://github.com/MVIG-SJTU/AlphaPose/tree/master/PoseFlow
Paper:PoseFlow
介绍
多人姿态跟踪方法,其主要方法和多人姿态检测一样,也可以分为自顶向下和自下而上。
1.自顶向下是:在每帧中 检测 人的proposals →关键点→相邻帧相似性 跟踪整个视频;
2.自下而上是:在每帧中 生成 关键点候选点→时空图→求解整数线性规划将时空图分为子图→每个子图对应人体姿势轨迹。
目前,自顶向下的方法在精度(map和mota)和跟踪速度上都大大优于自下而上的方法,因为自下而上的方法由于仅仅利用二阶身体部件依赖而失去了全局姿态视图,这直接导致了对关键点的模糊分配。
由于帧退化(如快速运动造成的模糊)、截断或遮挡,单个帧中的姿态估计可能不可靠。为了解决这个问题,我们需要关联交叉帧(cross-frame)检测到的实例来共享时间信息,从而降低不确定性。
自上而下的方法首先检测人体bbox,估计关键点,跟踪box。自下而上的方法每帧检测出候选点,建立时空图,形成每个人的姿态轨迹。自上而下的方法比较有前景,但受到遮挡、截断、图片模糊等问题,如下图所示,这需要帧间共享信息。 它主要利用时空信息来构建姿态流,以显著提高姿态跟踪任务。spatio-temporal information to build pose flow
方法结构
两步法,pose flow building和pose flow NMS
基本概念
1. 帧内姿态距离(Intra-Frame Pose Distance:同一帧内检测到的不同pose之间的距离,衡量同一帧两个姿态的相似度)
2.帧间姿态距离(Inter-frame Pose Distance ,使用ORB匹配计算)
1.DeepMatching->ORB
之前文中使用deepmatching方法来进行相邻帧的特征点匹配。现版本使用ORB特征算子去计算相邻帧的相似角点,ORB是OpenCV的库函数,所以就不用再各种编译DeepMatching了,最终实验结果来看,经度没有损失什么,但是速度却是原来的三倍。
2.Dataset Independent Pose Tracker
3.改进的多人姿态估计(Multi - Person Pose Estimation)
多人姿态估计这里使用 RMPE 方法, Faster R-CNN+ 改进的 SPPE
数据增强
为了处理截断问题,提出一种改进的深度提议生成器(iDPG),也就是把人体区域随机裁剪成四分之一或者一半
motion-guided box propagation
为了处理遮挡和模糊问题,提出通过交叉帧匹配技术将box proposals传播到上一帧和下一帧
首先对每一帧图像进行多人姿态估计,利用他们组自己的Alphapose基于RMPE改良版本。然后从上图中我们可以看到,有一个iDPG(improved deep proposal generator)模块。
iDPG主要是应对视频中人物的截断问题,利用随机剪裁random-crop在训练期间去生成“截断的目标人物”,特别的会利用random - crop 去吧 human instance 区域生成1/4 或1/2的 截断人物(对于这里,我个人建议最好是上/左/右半身,最好不要是单纯的腿部区域,个人感觉)。也就是说,iDPG是一种训练期间的数据增广方式。
这部分也涉及到了“Motion-Guided Box Propagation”,结合前后帧之间的信息,来解决因为“运动模糊”、“遮挡”等问题导致的bbox漏检,这里主要用到的技术称之为“cross - frame matching technique”来自于“《Deepmatching: Hierarchical deformable dense matching》”
Pose Flow Building
姿态估计通过在帧间建立同一个人的关系建立,对于某个姿态,在后续帧建立候选关联姿态集,即:
其中dc是ORB距离。对于从t到(t+T)帧,最大化目标函数:
其中,s(P)是姿态P的置信度得分,与box得分和关键点得分有关。
由于这里关心的是总体的置信分而不是单帧的置信分,因此对于其中由于遮挡或者模糊的帧来说仍然可以构建pose flow。
而且 F(t,T) 由F(t, T-1) 和 s(Q_T) 决定,因此置信分的和可以实时计算。
式(6)的解可以看成一个动态规划问题,因此也可以达到实时计算的要求
停止迭代和confidence unification:
当F(t,u+r)−F(t,u) < γ时才停止迭代,并使用平均置信分来更新所有keypoints的分数。
上面这个公式就是目标函数,通过对该函数的最大化,来选取最优的pose。s()就是取相应部分的置信度得分。F(t,T)中t和T代表了第t帧与t+T帧,该函数内部是从t累加到t+T帧。
Pose Flow NMS
1.Pose Flow Distance
关键步骤是确定指示同一个人的两个姿势流之间的距离。因此,这个论文定义了第三个Distance 应用于Pose Flow之间:
N代表了时间重叠帧的数量。Ya,Yb代表了两个不同的Pose Flow(也有可能是相同的,或者交叉的)。
对于任意两个姿态流,提取它们时间上相交的子流,两个姿态流的距离为:
其中df()是帧内姿态距离
2.姿态流融合
具有最大置信度得分的姿态流作为参考,通过使用dPF(),融合靠近参考姿态流的其他流,形成新的姿态流,即代表姿态流,代表姿态流的关键点2D坐标和置信度得分分别为:
姿态流NMS的示意图为:
**实验结果**
总结
本文主要是关于人体的pose tracking,提出了一种基于时空的pose flow方法,将时间信息考虑进来,也就是通过分析前后若干帧的人体姿态之间的联系来完成tracking。主要思路是对于模糊、遮挡的帧,利用前后帧的信息来进行恢复,也就是所谓的利用了时间信息
主要的工作分为两部分:
PF-Builder:生成pose flow
PF-NMS:在pose flow中应用了非极大值抑制(之前的方法大部分是在单帧图像上做NMS)
参考文献
1.https://blog.csdn.net/github_36923418/article/details/84984772
2.https://blog.csdn.net/m0_37644085/article/details/83038566
3.https://blog.csdn.net/qq_23333413/article/details/84583939
4.https://blog.csdn.net/cv_family_z/article/details/79579173?utm_source=blogxgwz9