深度学习论文翻译 -- OpenPose
本文翻译为关节点估计论文:OpenPose(2017), Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields.论文链接:https://arxiv.org/abs/1812.08008开源链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose我们知道,
本文翻译为关节点估计论文:OpenPose(2017), Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields.
论文链接:https://arxiv.org/abs/1812.08008
开源链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose
OpenPose是个开源的工程,一直处于维护状态,资源丰富完整。无论是windows,还是Linux系统,都有相应的完整封装,非常好用。下面的图片是其一系列论文的发表时间,其功能也在不断地更新和补充。红色框是本文翻译的论文。
Abstract
我们提出了一种可以在单张图中高效地检测多个人的2D姿态。本文使用了一种非参数的表达来学习图像中每个人身体部位的关联关系(部位(part):人体的关键点;associate:关键点之间的关系),称之为部位亲和域(Part Affinity Fields,PAFs)。由于该网络编码了全局的信息,可以允许一种贪婪地自下而上的解析过程,在获得高精度的同时,也可以达到实时的速度(与图片中人的个数无关)。该网络架构通过两个同样的网络分支同时预测关节点的位置以及关节点之间的连接关系。我们的方法在COCO2016获得冠军。在多人的MPII数据集上,精度和速度均远超其它顶级的算法。
主要内容:
1. 提出新的2D姿态估计算法,PAFs。
2. 使用bottom-up的2D关键点估计流程。
3. 网络两个同样的分支同时预测关节点的位置以及相互之间的关系。
4. 速度实时。
1. Introduction
人体2D姿态估计(关键点或者身体部位定位问题)大多关注于寻找单个人的身体部位(body parts)。推断图片中的多人的姿态,尤其是自然活动场景下的姿态,带来了一系列的挑战。首先,每个图片中包含未知数量的人,并且这些人会出现在任何位置,尺度不一。其次,人与人之间的交互会产生复杂的空间推断(比如接触,遮挡,肢体叠加),使得更难推断关节点之间的关系。最后,随着人数增多,运行时间增加,算法难以实时。
一种常见的方法是先检测图片中的每个人,然后针对每个人进行姿态估计。这种自上而下的方法可以直接应用现有的单人姿态估计方法,但是也带来新的问题:关键点检测的正确性依赖人体检测的结果,一旦人体检测错误,那么将无法弥补;另外的问题是随着人数增加,会增加大量的运行时间。作为对比,自下而上的方法可以避免受限于其它算法的结果,并且可以降低运行时间(检测时间与人数无关)。但是,自下而上的方法没有使用来自其它身体部位和其它人的全局上下文线索。实际中,之前的自下而上的算法没有保留效率上的收益,并且在解析全局信息的时候耗费大量时间。比如,Pishchulin提出自下而上的算法,可以联合获取关键点位置候选以及相对于每个人的连接关系。但是,在全连接图中解决整数线性规划问题等同于解决NP-Hard问题,一张图可能花费数个小时。Insafutdinov 基于ResNet创建了更好的关键点检测器,极大提高了运行时间,但是每张图仍然耗费几分钟,并且与关键点的数量有关。该方法很难回归到高精度的预测,那么急需一个逻辑斯蒂回归方法。
本文中,我们提出一种有效的多人姿态估计方法,在众多公共数据集上取得顶级的结果。我们是第一个提出基于PAFs(一个2D向量域的集合)的自下而上的关联关系分数的表述方式,它编码了肢体的位置和方向。我们证明:同时推断这些由关键点和关键点之间的关系的表达方式能够编码全局的信息,这种全局的信息使得我们可以使用简化后的贪婪的图匹配算法,进而得到高质量的结果,同时耗费了很少的时间。为了保证大家能够复现,我们开源了第一个实时多人2D姿态估计系统。
主要内容:
1. 多人姿态估计面临一些挑战,自然场景下人的数量,位置,人与之间的遮挡和叠加,以及尺度的不一致等问题。
2. 自上而下的方法依赖人体的检测准确率,并且速度与人的数量有着极大的关系,算法难以实时。
3. 参考上面段落的蓝色字体部分。
2. Method
Fig.2 给出了本文算法的全部流程。该系统以【w x h】的彩色图作为输入(Fig.2a),输出是每个人的2D关键点位置和连接信息(Fig.2e)。首先,一个前馈网络同时预测身体部位空间位置的置信图 S(Fig.2b),以及部位亲和域的2D向量场 L(它反应了不同身体部位之间的连接关系,Fig.2c)。集合
S
=
(
S
1
,
S
2
,
.
.
.
,
S
J
)
S=(S_1,S_2,...,S_J)
S=(S1,S2,...,SJ)具有 J 个置信图,每一张图表示一个身体 Part 的预测结果(比如一张图内有3个人,那么一张置信图会有三个最大响应位置,代表一个身体部位,比如每个人都有手肘点),
S
j
∈
R
w
⋅
h
,
j
∈
1...
J
S_j \in R^{w\cdot h},j\in {1... J}
Sj∈Rw⋅h,j∈1...J。集合
L
=
(
L
1
,
L
2
,
.
.
.
,
L
c
)
L=(L_1,L_2,...,L_c)
L=(L1,L2,...,Lc)具有 C 个向量域,每一个表示一个肢体(limb,本文将两个身体部位之间的连接称为肢体,无论是不是肢体,比如眼睛),这里向量
L
c
∈
R
w
⋅
h
⋅
2
,
c
∈
[
1...
C
]
L_c \in R^{w\cdot h\cdot 2},c \in [1...C]
Lc∈Rw⋅h⋅2,c∈[1...C] 是个2D向量(见Fig.1)。最后,置信图和亲和域被暴力解析出图像中所有人体的2D关键点空间位置以及相互之间的连接关系(Fig.2d,全图结构转为二分图匹配)。
2.1. Simultaneous Detection and Association
Fig.3 展示了我们的网络结构,可以同时预测检测的置信图和亲和域(affinity fields,编码part-to-part的连接关系)。该网络具有两个分支:上面米色的分支预测置信图,底部蓝色的分支预测亲和域。每一个分支的结构是一样的,并且是多个阶段组合使用,
t
∈
[
1
,
.
.
.
,
T
]
t\in [1,...,T]
t∈[1,...,T],每一个阶段添加中继监督。
输入图像首先进入10层的VGG网络(VGG-19的前10层,并且基于训练好的权重进行微调)。在第一个阶段,网络生成一系列检测置信图
S
1
=
ρ
1
(
F
)
S^1=\rho^1(F)
S1=ρ1(F)以及一系列部位亲和域
L
1
=
ϕ
1
(
F
)
L^1=\phi^1(F)
L1=ϕ1(F),这里
ρ
1
和
ϕ
1
\rho^1和\phi^1
ρ1和ϕ1表示第一阶段CNN的网络。在后面的每一个阶段,两个分支输出与原始图像特征
F
F
F连接(concatate),用于产生更好的预测,
S
t
=
ρ
t
(
F
,
S
t
−
1
,
L
t
−
1
)
,
∀
t
≥
2
(1)
S^t=\rho^t(F,S^{t-1},L^{t-1}),\forall t \geq2 \tag {1}
St=ρt(F,St−1,Lt−1),∀t≥2(1)
L
t
=
ρ
t
(
F
,
S
t
−
1
,
L
t
−
1
)
,
∀
t
≥
2
(2)
L^t=\rho^t(F,S^{t-1},L^{t-1}), \forall t \geq2\tag {2}
Lt=ρt(F,St−1,Lt−1),∀t≥2(2)
这里,
ρ
t
和
ϕ
t
\rho^t和\phi^t
ρt和ϕt表示阶段 t 的CNNs输出。
Fig.4 显示多阶段的方式可以逐步修正置信图(confidence map)和亲和域(affinity field)。为了让网络在第一个分支预测置信图和第二个分支预测亲和域,我们在每一个阶段(stage)每一个分支后面都添加损失函数。损失函数为 L2 损失。考虑到实际场景下,并不是所有的人都被标注,从空间上为损失函数添加权重。损失函数的公式如下:
f
S
t
=
∑
j
=
1
J
∑
p
W
(
p
)
⋅
∣
∣
S
j
t
(
p
)
−
S
j
∗
(
p
)
∣
∣
2
2
,
(3)
f^t_S=\sum_{j=1}^J\sum_pW(p) \cdot ||S^t_j(p)-S^*_j(p)||^2_2,\tag 3
fSt=j=1∑Jp∑W(p)⋅∣∣Sjt(p)−Sj∗(p)∣∣22,(3)
f
L
t
=
∑
c
=
1
C
∑
p
W
(
p
)
⋅
∣
∣
L
c
t
(
p
)
−
L
c
∗
(
p
)
∣
∣
2
2
,
(4)
f^t_L=\sum_{c=1}^C\sum_pW(p) \cdot ||L^t_c(p)-L^*_c(p)||^2_2,\tag 4
fLt=c=1∑Cp∑W(p)⋅∣∣Lct(p)−Lc∗(p)∣∣22,(4)
这里,
S
j
∗
S^*_j
Sj∗是真实标签的部位置信图(part confidence map),
L
c
∗
L^*_c
Lc∗是真实标签的部位亲和向量域,
W
W
W 是二值掩码,当某个关节点在图像
p
p
p 位置未标注,则
W
(
p
)
=
0
W(p)=0
W(p)=0. 掩码是为了避免在训练中惩罚正样本的预测。中继监督是为了避免梯度消失的问题。总的目标函数如下:
f
=
∑
t
=
1
T
(
f
S
t
+
f
L
t
)
(5)
f=\sum_{t=1}^T(f^t_S+f^t_L) \tag5
f=t=1∑T(fSt+fLt)(5)
2.2. Confidence Maps for Part Detection
为了在训练中评估Eq.5,我们需要根据实际标注的2D关键点坐标生成真实标签的置信图(groundtruth confidence map)
S
∗
S^*
S∗. 每一张置信图是关键点置信度的2D表达,表示特定身体关键点出现在特定的像素位置。理想情况下,如果图像中只存在一个人,并且所有的关键点是可见的,那么每一张置信图只会出现一个峰。如果多人出现,那么对于每个人
k
k
k 的每一个部位
j
j
j都会存在与之关联的峰(一个图中会出现多个峰)。
我们首先生成第
k
k
k 个人的置信图
S
j
,
k
∗
S^*_{j,k}
Sj,k∗. 令
x
j
,
k
∈
R
2
x_{j,k}\in R^2
xj,k∈R2 表示图像中第
k
k
k 个人的第
j
j
j 个关键点的真实坐标。那么在位置
p
p
p 的值定义如下:
S
j
,
k
∗
(
p
)
=
e
x
p
(
−
∣
∣
p
−
x
j
,
k
∣
∣
2
2
σ
2
)
(6)
S^*_{j,k}(p)=exp(-\frac{||p-x_{j,k}||^2_2}{\sigma^2}) \tag 6
Sj,k∗(p)=exp(−σ2∣∣p−xj,k∣∣22)(6)
这里,
σ
\sigma
σ 控制峰(peak)的蔓延范围和趋势。网络预测后的输出值是取每个人的每个部位的最大值位置,公式如下:
S
j
∗
(
p
)
=
max
k
S
j
,
k
∗
(
p
)
(7)
S^*_j(p)=\max_kS^*_{j,k}(p) \tag 7
Sj∗(p)=kmaxSj,k∗(p)(7)
我们取置信图的最大值而不是平均值是因为靠近峰的位置精度最高,接近真实值,见下图所示。
在测试阶段,我们预测出置信图(见Fig.4的第一行),通过非极大值抑制的方法获得最终的预测结果。
2.3. Part Affinity Fields for Part Association
给定检测的身体关键点的集合(见Fig.5a中红色和蓝色的点),那么我们怎么将这些点正确的分给每一个人呢?我们需要给出每一对身体关键点的关联关系置信度指标,比如它们属于同一个人。一种评价连接关系的方式:每一对身体部位的中点是否在肢体上,然后检测其影响范围,见Fig.5b. 但是,当人站在一起或者倾向于一起,那么中点的方式会产生错误的关系(见Fig.5b中的绿色线)。出现这样的错误连接关系的原因是这种表达的局限性:(1)仅仅考虑每一个肢体的空间位置,没有考虑方向;(2)减少了每一个点的区域支持。
为了解决这些局限性,我们提出新的特征表达方式,称之为部位亲和域(part affinity fields),它保留了肢体区域内的位置信息和方向信息(见Fig.5c)。每一个肢体亲和域是一个2D的向量域,见Fig.1d:区域内的每一个像素属于特定的肢体,一个2D向量编码了一个关节点到另一个关节点的方向。每一种类型的肢体都有其相关的亲和域来连接其相关的两个身体部位。
考虑图中的一个来自第
k
k
k 个人的第
c
c
c 个肢体,令
x
j
1
,
k
,
x
j
2
,
k
x_{j_1,k},x_{j_2,k}
xj1,k,xj2,k分别是身体部位
j
1
j_1
j1和身体部位
j
2
j_2
j2 的位置坐标。如果
p
p
p 点存在于肢体上,那么值
L
c
,
k
∗
(
p
)
L^*_{c,k}(p)
Lc,k∗(p) 是点
j
1
j_1
j1 到
j
2
j_2
j2 的单位向量,那么其它点的向量是零。
为了在训练阶段评估Eq.5中的
f
L
f_L
fL,我们定义真实标签的部位亲和域向量场,
L
c
,
k
∗
L^*_{c,k}
Lc,k∗ 在
p
p
p 点如下:
L
c
,
k
∗
(
p
)
=
{
v
if p on limb c,k
0
otherwise
(8)
L^*_{c,k}(p)= \begin{cases} v & \text{if p on limb c,k}\\ \tag 8 0 & \text{otherwise} \end{cases}
Lc,k∗(p)={v0if p on limb c,kotherwise(8)
这里,
v
=
(
x
j
2
,
k
−
x
j
1
,
k
)
/
∣
∣
x
j
2
,
k
−
x
j
1
,
k
∣
∣
2
v=(x_{j_2,k}-x_{j_1,k})/||x_{j_2,k}-x_{j_1,k}||_2
v=(xj2,k−xj1,k)/∣∣xj2,k−xj1,k∣∣2是个单位向量,表示该肢体的方向。那么点
p
p
p是否在肢体上的判断标准:距离线段的长度是否在一定阈值内,判定条件如下:
0
≤
v
⋅
(
p
−
x
j
1
,
k
)
≤
l
c
,
k
a
n
d
∣
v
⊥
⋅
(
p
−
x
j
1
,
k
)
∣
≤
σ
l
0 \leq v\cdot(p-x_{j_1,k}) \leq l_{c,k} ~~and ~~|v_\bot \cdot(p-x_{j_1,k})| \leq \sigma_l
0≤v⋅(p−xj1,k)≤lc,k and ∣v⊥⋅(p−xj1,k)∣≤σl
这里,肢体宽度为:
σ
l
\sigma_l
σl,肢体长度:
l
c
,
k
=
∣
∣
x
j
2
,
k
−
x
j
1
,
k
∣
∣
2
l_{c,k}=||x_{j_2,k}-x_{j_1,k}||_2
lc,k=∣∣xj2,k−xj1,k∣∣2,
v
⊥
v_\bot
v⊥ 是
v
v
v 的垂直向量。
点 p p p 是否在肢体上的判定公式解释:
v ⋅ ( p − x j 1 , k ) v\cdot(p-x_{j_1,k}) v⋅(p−xj1,k):表示向量 ( p − x j 1 , k ) (p-x_{j_1,k}) (p−xj1,k)在向量 v v v上的的投影长度,限定在一定长度范围内。
∣ v ⊥ ⋅ ( p − x j 1 , k ) ∣ |v_\bot \cdot(p-x_{j_1,k})| ∣v⊥⋅(p−xj1,k)∣:表示向量 ( p − x j 1 , k ) (p-x_{j_1,k}) (p−xj1,k)在向量 v ⊥ v_\bot v⊥上的的投影长度,限定在一定宽度范围内。
真实标签的部位亲和域是图像内所有人体的平均值,公式如下:
L
c
∗
(
p
)
=
1
n
c
(
p
)
∑
k
L
c
,
k
∗
(
p
)
(9)
L^*_c(p)=\frac{1}{n_c(p)}\sum_kL^*_{c,k}(p) \tag9
Lc∗(p)=nc(p)1k∑Lc,k∗(p)(9)
这里,
n
c
(
p
)
n_c(p)
nc(p)是所有人在
p
p
p 点的非零向量的数量(比如,不同人的肢体在该位置重合)。
在测试阶段,我们通过在 PAF(该线段连接两个关键点部位)内计算候选的两个身体部位的积分来评定其关联关系。换言之,我们是评定预测的PAF在肢体上的对齐程度。对于两个候选部位,
d
j
1
,
d
j
2
d_{j_1},d_{j_2}
dj1,dj2,我们对预测的 PAF 进行采样,
L
c
L_c
Lc 沿着线段评定关联程度:
E = ∫ u = 0 u = 1 L c ( p ( u ) ) ⋅ d j 2 − d j 1 ∣ ∣ d j 2 − d j 1 ∣ ∣ 2 d x (10) E= \begin{aligned} \int_{u=0}^{u=1} L_c(p(u)) \cdot \frac{d_{j_2}-d_{j1}}{||d_{j_2}-d_{j1}||_2}\mathrm{d} x \tag{10} \end{aligned} E=∫u=0u=1Lc(p(u))⋅∣∣dj2−dj1∣∣2dj2−dj1dx(10)
这里,
p
(
u
)
p(u)
p(u)是两个身体部位
d
j
1
,
d
j
2
d_{j_1},d_{j_2}
dj1,dj2的插值,计算如下:
p
(
u
)
=
(
1
−
u
)
d
j
1
+
u
d
j
2
(11)
p(u)=(1-u)d_{j_1}+ud_{j_2} \tag{11}
p(u)=(1−u)dj1+udj2(11)
在实际场景下,我们在均匀空间内采样 u u u 的值并求和,用其近似代替积分的计算。
2.4. Multi-Person Parsing using PAFs
我们通过非极大值抑制的方法获得置信图上的离散的身体部位预测值。因为图像中可能存在很多人以及假正预测值的存在,每一个身体部位会得到很多候选值(见Fig6.b)。这些候选部位可能定义着大量的肢体。我们通过在PAF上计算线积分的方式对候选部位进行评分,见Eq.10. 寻找K维匹配向量的最优分解是NP-Hard问题(见Fig6.c)。在本文中,我们提出一种更加高效的匹配方法。我们推测,由于PAF网络具有较大的感受野,所以成对的关系编码了全局的信息。
首先,我们获得多人身体部位的候选集
D
=
d
j
m
:
f
o
r
j
∈
1...
J
,
m
∈
1...
N
j
{\rm {D}}={d^m_j:for~ j \in{1...J}},m\in1...N_j
D=djm:for j∈1...J,m∈1...Nj,
N
j
N_j
Nj表示部位
j
j
j 候选部位的数量,
d
j
m
∈
R
2
d^m_j\in R^2
djm∈R2表示部位
j
j
j 的第
m
m
m 个检测值(关键点候选位置)。这些部位候选集还必须与其它部位产生关联关系(同一个人),换言之,我们需要寻找到成对身体部位,并且表示一个肢体。我们定义了一个变量
z
j
1
j
2
m
n
∈
{
0
,
1
}
z^{mn}_{j_1j_2} \in {\lbrace0,1\rbrace}
zj1j2mn∈{0,1},为了表征两个候选部位
d
j
1
m
,
d
j
2
m
d^m_{j_1},d^m_{j_2}
dj1m,dj2m 是否是可连接的(只有连接才表示一个肢体)。目的是为了找到所有的最优连接,集合如下:
Z
=
{
z
j
1
j
2
m
n
:
f
o
r
j
1
,
j
2
∈
{
1...
J
}
,
m
∈
{
1...
N
j
}
,
n
∈
{
1...
N
j
2
}
\rm Z=\lbrace z^{mn}_{j_1j_2}:for~j_1,j_2 \in\lbrace1...J\rbrace,m\in\lbrace1...N_j\rbrace,n\in\lbrace1...N_{j_2}\rbrace
Z={zj1j2mn:for j1,j2∈{1...J},m∈{1...Nj},n∈{1...Nj2}
如果我们单独考虑一对部位 j 1 , j 2 j_1,j_2 j1,j2(比如脖子和右臀部),它是第 c c c 个肢体,寻找最优的匹配转为最大权重的二分图匹配问题。见Fig.5b. 在这种图匹配问题中,图的节点表示候选的身体部位 D j 1 , D j 2 D_{j1},D_{j_2} Dj1,Dj2,边表示所有可能的连接。此外,每个边的权重有Eq.10计算(部位亲和累加)。一个匹配就是二分图中的一个边的子集,没有两个边是共享一个顶点。我们的目标是寻找最大权重的匹配,见上面的公式(12,13,14),这里 E c E_c Ec 是来自肢体类型 c c c 的所有匹配的权重, Z c Z_c Zc 肢体类型 c c c 集合 Z Z Z 的子集, E m n E_{mn} Emn 是部位 d j 1 , d j 2 d_{j_1},d_{j_2} dj1,dj2 的PAF,由Eq.10定义。Eq13,Eq.14使得两个边不会共用一个节点,比如没有两个肢体是同一个类型(比如左前胳膊)共享一个部位。我们可以使用匈牙利算法获得最优匹配。
当寻找多人的全部关键点时,那么
Z
Z
Z 是一个 K-维匹配问题。这种问题是难以求解的。在本文的工作中,我们增加两个条件,使得求解难度降低。1. 我们用最少的边建立一个关于姿态的骨架树,而不是用完整的图,见Fig.6c. 2. 我们将全图匹配问题拆解为大量二分图匹配问题,那么相邻树节点的匹配是独立的,见Fig.6d. 我们在3.1给出了详细的比对结果,证明了用了极少的时间近似求解了全局匹配问题。这就归功于我们将相邻树节点用PAFs建模,而非相邻树节点的关系是有CNN建模(具有较大的感受野),而且来自非相邻树的节点也影响预测的PAF。
在增加上述的宽松条件后,最优化问题被简化为如下形式:
max
z
E
=
∑
c
=
1
C
max
z
c
E
c
(15)
\max_zE=\sum^C_{c=1}\max_{z_c}E_c \tag{15}
zmaxE=c=1∑CzcmaxEc(15)
因此,我们借助Eq.12-14,独立的获得了所有肢体类型的连接关系,我们可以将他们组合成完整的姿态估计结果。我们的优化策略远远优于全连接图的匹配。
3. Results
我们在多个多人姿态估计的数据集上评测算法:(1)MPII多人数据集;(2)COCO2016. 这些数据集在自然场景下收集,面临诸多挑战,比如拥挤,尺度变化,遮挡,接触。我们获得了冠军,并且在MPII数据上远超其它经典算法。我们系统的结果分析,见Fig.10.
3.1. Results on the MPII Multi-Person Dataset
为了评估MPII数据集,我们使用工具,在PCKh阈值下,计算了所有身体部位的mAP值。Table.1 给出各种算法的对比,测试集299张图片,以及整个MPI测试集,我们自己的验证集。同时我们还测试运行单张图的时间。具体的结果,可以参考下面的表格:
在Table.2中,我们对比了不同的骨架结构的影响,结构见Fig.6. 我们基于全连接图进行训练,选择所有的边(Fig.6b,通过整数线性规划解决),以及基于最优的树边(Fig.6c,通过整数线性规划解决),Fig.6d 根据本文的方法解决。他们相近的效果,表明最优的结构就足以近似接近全图结构。我们另外训练了一个模型,充分利用网络的容量来学习最优的边,见Fig.6d(sep)。这种方法优于前面的几种结构,并且效率没有降低。这是因为更少的边(13 edges of tree vs 91 edges of a graph),使得网络更容易收敛。
Fig.7a呈现了在我们验证集上的分析。对于PCKh-0.5,使用PAFs优于使用中点的方法,高于一中点2.9%,高于2中点2.3%。PAFs同时编码肢体的位置和方向信息,能够更好的辨别交叉的情况,比如折叠的胳膊。训练带有掩码的未标注的人时,效果会在提升2.3%,因为避免惩罚了真正(true positive)样本的惩罚。如果我们在真是标签上使用我们的解析关键点匹配算法,那么mAP高达88.3%. 在Fig.7a中,蓝色线显示,由于关键点是真是标签,没有定位误差,在任何的PCKh下,mAP都是常数值。而使用GT connection以及我们的关键点定位算法,mAP81.6%. 很明显,基于PAFs的匹配算法类似于GT connections(79.4% vs 81.6%)。这表明,基于PAFs的解析算法在纠正定位更加鲁棒。Fig.7b显示了不同阶段(stage)的对比。随着迭代的增加,mAP单调递增。
3.2. Results on the COCO Keypoints Challenge
COCO训练集包含10万个人的实例标签,超过100万个关键点。测试集包含 “test-challage”,“test-dev” and “test-standard” 子数据集,每个数据集大概有2万张。COCO评估定义了目标关键点相似度(object keypoints similarity,OKS),并在10OKS上计算平均准确度(mean average precision,AP)。OKS与目标检测中的IoU具有相同的角色。它计算的是人的尺度,以及预测点和GT点的距离。Table3给出了顶级团队的结果。值得注意的是,在 A P M AP^M APM上评估标准下,我们具有更低的准确度。原因是我们我们处理了跨度很大,尺度很大,人数很多的图片。作为对比,自上而下的方法可以将每一个Patch进行在缩放,进而得到大的尺度,那么在小的尺度上具有更少的误差。
Table.4中,我们在COCO 验证集上随机选择了1160张图片。如果我们使用GT 边框,以及单人CMP,那么我们可以达到单人CPM的上边界,62.7%AP. 如果我们使用顶级的目标检测器,比如SSD,表现降低10%. 这种对比表明,自上而下的方法严重依赖目标检测的结果。作为对比,我们自下而上的方法得到58.4%AP. 如果我们用单人CPM进行修正,那么准确度再次增加2.6%. 注意的是,上述结果都是在算法能够得到还不错的预测的效果。我们期待更大尺度的搜索,期望自下而上的方法有更好的表现。Fig.8 显示了在COCO验证集上误差巨大的降低。大部分假正样本来自不准确的定位,而不是背景的干扰。这表明,在空间依赖上具有更大的提升空间,而不是身体部位的外表。
3.3. Runtime Analysis
为了分析我们系统的运行时间,我们搜集了包含不同人的视频。视频分辨率为1080x1920,考虑大GPU内存有限,我们在测试的时候更改为368x654。测试硬件为笔记本电脑,NVIDIA GTX-1080 显卡。Fig.8d中,我们用人体检测和单人CPM作为自上而下的算法对比,时间与测试视频的人数有关,人越多时间越久。作为对比,我们的自下而上的方法,随着人数增加,时间增加很少。运行时间主要包含两个部分:(1)CNN的运行时间,
O
(
1
)
O(1)
O(1) ,随着人数增加,时间基本是常量;(2)多人的匹配问题,时间为
O
(
n
2
)
O(n^2)
O(n2),n代表人的数量。但是,匹配时间并不影响整体的运行时间,因为它比CNN运行时间少两个数量级。比如,对于9个人,匹配花费0.58ms,CNN99.6ms。我们的模型在19人的视频中达到8.8fps.
4. Discussion
这些场景是具有社会意义的时刻,否则,强迫人们制作照片和视频。我们的摄影集倾向于捕捉个人的瞬间意义:生日,婚礼,度假,朝圣,体育赛事、毕业典礼、全家福照片等等。为了使得机器理解图片中意义,它们不得不理解图像中的人。拥有这种实时感知能力的机器将能够对人类的个人和社会行为做出反应,甚至参与其中。
本文中,我们提出了这种感知的一个关键模块:实时检测图像中所有人的2D关键点。我们提出了一个显式的非参数表示的关键点关联表达方式,可以同时编码位置和肢体的方向。第二,我们设计了一个网络结构,同时预测关键点位置和关键点之间的关系。第三,我们证明简化后的匹配算法足够得到高质量的关键点匹配,甚至在多人的情况下,效率依然很高。我们在Fig.9中展示了检测错误。我们也开源了训练代码和模型,方便大家复现。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)