几个方法里,我最喜欢的还是Assoc. Embed。简单直观。
1. Part Affinity Field
《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》CVPR 2017
组合相邻关节点:学习一个2D向量场来连接两个关节点
part affinity 是一个2D向量场,在两个相连关节点间(limb)的像素,我们用一个2D向量来表达从limb一端到另一端的方向,如下图黄色箭头所示。每种limb都有自己对应的PAF来连接两个相邻关键点。
在得到所有关节点位置和PAF后,我们需要进行grouping。
Greedy relaxation:对整张连通图(a)进行组合优化是一个NP Hard的问题。根据人体结构,我们可以将其删减为树状(b)。再分解为一系列二部图匹配问题(c),此时可用匈牙利算法来求解。
从实验结果中发现,将grouping问题解耦成多个子问题仍能保持很高的组合精度,同时大幅提升了速度。作者认为这是因为在网络中采用了大感受野,使这些pair-wise的组合分数也隐性包含了全局信息。
2. Associative Embedding
《Associative Embedding: End-to-End Learning for Joint Detection and Grouping 》NIPS 2017
借鉴了word embedding的思想,为每个关节点生成一个embedding,通过embedding之间的距离来组合关节点。作者发现1D embedding就已经足够表达,也可以称之为tag。
文章的思想很直观,方法也很简单。网络不需要two branch,只需要在原来输出的heatmap中增加几层来表达embedding即可。这个方法很容易集成到各种bottom up的方法中去,比如HigherHRNet(CVPR2020)就是使用Assoc. Embed的方式来进行组合的。
grouping loss的设计比较高效。不是所有检测到的关节点间都进行两两对比,而是对每个人计算中心值reference embedding。使属于某人的关节点与该人中心值接近,不同人的中心值相互远离。(和LDA思想一致)
L
g
(
h
,
T
)
=
1
N
K
∑
n
∑
k
(
h
ˉ
n
−
h
k
(
x
n
k
)
)
2
+
1
N
2
∑
n
∑
n
′
exp
{
−
1
2
σ
2
(
h
ˉ
n
−
h
ˉ
n
′
)
2
}
L_{g}(h, T)=\frac{1}{N K} \sum_{n} \sum_{k}\left(\bar{h}_{n}-h_{k}\left(x_{n k}\right)\right)^{2}+\frac{1}{N^{2}} \sum_{n} \sum_{n^{\prime}} \exp \left\{-\frac{1}{2 \sigma^{2}}\left(\bar{h}_{n}-\bar{h}_{n^{\prime}}\right)^{2}\right\}
Lg(h,T)=NK1n∑k∑(hˉn−hk(xnk))2+N21n∑n′∑exp{−2σ21(hˉn−hˉn′)2}
那么,在得到关节点位置及其embedding之后,如何进行grouping呢?
按照关节点的某个指定顺序进行。首先,用第一个关节点类型(比如脖子)来形成初始检测池 initial pool of detected people. 接下来的每一轮都对某类型关节点进行指派,依次选取最高检测得分的关节点,将其分配给embedding最近的人,如果这个距离大于某个阈值,则为它在检测池中创建一个新的人。(有点像tracking的匹配方式)
3. MultiPoseNet
《MultiPoseNet: Fast Multi-Person Pose Estimation using Pose Residual Network》ECCV 2018
同一个backbone两个分支,同时预测关节点heatmap和人的检测框。用检测框对heatmap做crop&resize,提取RoI,输入Pose Residual Net(PRN)中,输出属于这个人的keypoint heatmap。
我认为这个模型最大的弊端,是它需要割裂地训练3个子网:
- 首先训练keypoint子网
- 固定backbone参数,训练detection子网
- 用上述两个子网来生成数据,训练PRN子网
这样的训练不仅速度慢,还割裂了几个网络间的信息传递。如果模型能够end-to-end地进行学习,就能更好地利用彼此的信息。
网络结构这么复杂,inference速度居然比Assoc. Embed快,不符合我的直觉。推测可能是backbone的原因,本文用了ResNet,而Assoc. Embed 用的是stacked hourglass。只是推测,还未进行实验验证
4. PersonLab
《PersonLab: Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model》ECCV18
一篇将姿态估计和实例分割结合起来的工作,这里我只关心姿态估计的grouping方法。
定位:与传统的基于高斯分布的heatmap不同,本文采用了混合分类/回归的方式来进行关节点位置预测,即对每类关节点输出0/1二值heatmap和二维offsets,通过用heatmap检测得分加权的Hough voting来找到每个关节点的位置。
组合依据:网络同时输出mid-range offsets,即直接回归相邻关节点的offset。结合short-range offset进行多次修正,这个修正方式也是本文很大的创新点。
与PAF不同,PAF中每个位置的向量是unit vector,需要通过区域内采样相加来得到两个关节点的相连性。而本文每个点都直接回归了offset。
greedy grouping:将所有Hough得分高于阈值的关节点放入一个Priority Queue,每次取出其中得分最高的关节点,如果这个点与先前已检测到的人的同类型关节点重合,则丢弃它;否则以这个关节点为起点创建一个新的人的检测实例,根据mid-range offset去贪心地连接相邻点。
与Assoc. Embed不同,本文在组合时不遵循固定的关节点顺序,而是从检测得分最高的关节点开始组合。这有助于保留那些被部分遮挡的人体。