研究背景
人体姿态识别被定义为人体关键点的定位问题,一直以来是计算机视觉领域的重要关注点。这一问题有着一些常见的挑战,比如各式各样的关节姿态,小得难以看见的关节点,遮蔽的关节点,需要根据上下文判断的关节点,而这个领域主流的工作是各式样的关节姿态。
此前的姿态估计都是基于局部的为关节建模,这种方式对于表示能力是很有局限性的,因为它使用局部探测器,只能是为身体关节点之间所有关系的部分子集建立模型,很有局限性。于是作者提出了以整体的方式来预测人体关节点的方法,使用DNN强大的性能来处理人体关节点的预测。DNN有着强大的分类和定位能力,在此之前并没有人来使用DNN(Deep Neural Networks)对人体关节点的定位,作者Alexander Toshev和Christian Szegedy是第一个DNN应用于人体关节点检测的人。
作者将人体姿态估计定为关节点回归的问题,并且给出了如何将DNN用于人体关节点回归的方式,每一关节点的定位使用一整幅图像输入到7层CNN来做回归,这种做法又两个优点:
- DNN可以捕获每个人体关节点的全部上下文信息,每一个关节点回归都使用一整张图像的信息。
- 深度学习的方法特比容易实现,不需要显式地设计特征提取器和局部探测器,不需要为关节点建立拓扑结构和关节间的关系,通用的CNN可以用来解决这些问题。
更进一步,作者使用级联的DNN-based 姿态检测器。这种级联的检测器能够增加关节点定位的精确度。首先在一整幅图像上进行粗略的姿态估计,然后使用多个DNN-based 回归器对关节点的邻域子图像(有更高的分辨率)优化预测结果。
DNN for Pose Estimation
数学表示
人体的一个姿态可以用kkk个人体关节点的位置来表示,表示为向量
y=(⋯ ,yiT,⋯ )T,i={1,⋯ ,k}
y = (\cdots, y_i ^ T, \cdots)^T, i = \{1, \cdots, k\}
y=(⋯,yiT,⋯)T,i={1,⋯,k}
yiy_iyi表示第iii个关节点的坐标,一个带有标签的图像表示为(x,y)(x, \textbf{y})(x,y),检测框boxboxbox由b=(bc,bw,bh)b=(b_c, b_w, b_h)b=(bc,bw,bh)表示,bcb_cbc表示预测之后关节点的位置,表示需要剪裁图像的中心,bwb_wbw表示图像的宽,bhb_hbh表示图像的高,并且使用
N(yi,b)=(1/bw001/bh)(yi−bc)(1)
N(\textbf{y}_i, b)=\begin{pmatrix} 1/b_w & 0 \\ 0 & 1/b_h \\ \end{pmatrix}(\textbf{y}_i-b_c) \tag{1}
N(yi,b)=(1/bw001/bh)(yi−bc)(1)
将每个关节点的图像用这个boxboxbox的绝对坐标转换为相对坐标,并且将关节点yiy_iyi标准化(这里的标准化也会将关节点周围的坐标相对化),例如N(x)\textbf{N}(x)N(x)表示将整幅图像标准化,就是将坐标原点移到图像中心位置,N(x;b)\textbf{N}(x;b)N(x;b)就是用box(bc,bw,bh)box(b_c,b_w,b_h)box(bc,bw,bh)截取图像xxx对应部分,并且在boxboxbox做标准化处理。N(y;b)=(⋯ ,N(yi;b)T,⋯ )TN(\textbf{y};b)=(\cdots, N(\textbf{y}_i;b)^T,\cdots)^TN(y;b)=(⋯,N(yi;b)T,⋯)T表示对每个关节点都进行box bbox \ bbox b的标准化处理。
作者将姿态估计当做回归问题来解决的,作者使用ψ(x;θ)∈R2k\psi(x;\theta)\in\textbf{R}^{2k}ψ(x;θ)∈R2k表示一个模型对图像xxx处理的标准化姿态向量,用下公式表示对预测的姿态向量的绝对坐标表示:
y∗=N−1(ψ(N(x);θ))(2)
y^*=N^{-1}(\psi(N(x);\theta)) \tag{2}
y∗=N−1(ψ(N(x);θ))(2)
由公式(2)知,应当也对训练集进行标准化处理:
DN={f(N(x),N(y)∣(x,y)∈D}(3)
D_N = \{ f(N(x),N(\textbf{y})|(x, \textbf{y})\in D\} \tag{3}
DN={f(N(x),N(y)∣(x,y)∈D}(3)
所使用的损失函数是L2损失,那么模型可以写为:
argminθ∑(x,y)∈DN∑i=1k∣∣y−ψ(x;θ)∣∣2(4)
\mathop{\arg\min}\limits_{\theta}\sum_{(x,y)\in D_N}\sum_{i=1}^k||\textbf{y}-\psi (x;\theta)||^2 \tag{4}
θargmin(x,y)∈DN∑i=1∑k∣∣y−ψ(x;θ)∣∣2(4)
模型框架

模型结构:
C(55×55×96)−LRN−P−C(27×27×256)−LRN−P−C(13×13×384)−C(13×13×256)−P−F(4096)−F(4096)C(55\times55\times96)-LRN-P-C(27\times27\times256)-LRN-P-C(13\times13\times384)-C(13\times13\times256)-P-F(4096)-F(4096)C(55×55×96)−LRN−P−C(27×27×256)−LRN−P−C(13×13×384)−C(13×13×256)−P−F(4096)−F(4096)
作者使用的CNN回归损失而不是分类损失,预测的关节点和GroundTruth的L2-Loss。由于训练数据量,模型参数很多,所以对图像做了简单数据增强以增加数据量。
初始阶段是可以粗略得到关节点的大概位置,它是基于整幅图像进行上下文推理的,但是它的尺寸被固定到了220×220220\times220220×220,而一般数据集里的图片大小都比较大,所以输入的时候会对图像进行下采样,这样的操作使得细节丢失,继而想要优化关节点的位置相对不够精确,但又不能增大图像的尺寸,因为会增加大量的参数和计算量。
为了得到更好的准确率,作者训练了一个级联的姿态回归器。在第一个阶段,先粗略估计出上个部分的姿态轮廓,在下一阶段不断优化关节点的位置。
每一步都使用已经预测的关键点来取出基于这个关键点的邻域,这个子图像将被用于接下来的网络输入,而接下来的网络就会看到更高清的图像从而获取跟多的细节信息,从而达到更高的准确率。
为了优化姿态,作者定义了一个回归框box bibox \ b_ibox bi用于从整个图像上获取yiy_iyi的邻域子图像bi(y;σ)=(yi,σdiam(y),σdiam(y))b_i(\textbf{y};\sigma)=(\textbf{y}_i,\sigma diam(\textbf{y}),\sigma diam(\textbf{y}))bi(y;σ)=(yi,σdiam(y),σdiam(y)),其中,姿态估计diam(y)=diam(\textbf{y}) =diam(y)=对立的关节点之间的距离,具体取决于数据集和相关的姿态定义。
根据以上可以写出初始阶段或者第一阶段的预测姿态,其中b0b^0b0表示整个图像:
stage1:y1←N−1(ψ(N(x;b0);θ1);b0)(5)
stage1:y^1\leftarrow N^{-1}(\psi(N(x;b^0);\theta_1);b_0)\tag{5}
stage1:y1←N−1(ψ(N(x;b0);θ1);b0)(5)
后面的阶段就是使用局部图像,即预测关节点邻域的图像,每个关节点会做一次回归。
stage2:yis←Ns−1(ψiN(x;b);θs);b)(6)
stage2:y^s_i \leftarrow N^{s-1}(\psi_i N(x;b);\theta_s);b) \tag{6}
stage2:yis←Ns−1(ψiN(x;b);θs);b)(6)
for b=bi(s−1)
for \ b = b^{(s-1)}_i
for b=bi(s−1)
bis←(yis,σdiam(ys),diam(ys))
b^s_i \leftarrow (y^s_i, \sigma diam(y^s), diam(y^s))
bis←(yis,σdiam(ys),diam(ys))
每个关键点yiy_iyi对应一个边框bbb,每个边框boxboxbox都不一样,而且每个预测图像的中心都是取决于上个预测的关节点的坐标,因为深度学习有着强大的学习能力(为了防止过拟合),作者不是简单的使用预测后的数据,而是做了中间数据增强的处理,利用预测点在其邻域内生成多个关节点。该邻域使用的是二维高斯分布N(s−1)\mathcal{N}^{(s-1)}N(s−1),均值和方差来源于(yis−1−y)(y^{s-1}_i - y)(yis−1−y),所有样本数据的预测和GroundTruth的差的方差和均值。这里使用δ\deltaδ表示从N(s−1)\mathcal{N}^{(s-1)}N(s−1)取出的样本,同样,这里的δ\deltaδ使用的是相对坐标。
DAs={(N(x;b),N(yi,b))∣(x,yi)∼D,δ∼N(s−1)b=(yi+δ,σdiam(y))}
D^s_A=\{(N(x;b),N(\textbf{y}_i,b))|\\(x,\textbf{y}_i)\sim D,\delta \sim \mathcal{N}^{(s-1)} \\b=(\textbf{y}_i+\delta , \sigma diam(\textbf{y})) \}
DAs={(N(x;b),N(yi,b))∣(x,yi)∼D,δ∼N(s−1)b=(yi+δ,σdiam(y))}
在(4)模型的基础上进行修改,模型(4)表示为第一阶段的过程,(8)为后面阶段的过程。
θs=argminθ∑(x,yi)∈DAS∣∣yi−ψi(x;θ)∣∣2(8)
\theta_s=\mathop{\arg\min}\limits_{\theta}\sum_{(x,\textbf{y}_i)\in D^S_A}||\textbf{y}_i-\psi_i (x;\theta)||^2 \tag{8}
θs=θargmin(x,yi)∈DAS∑∣∣yi−ψi(x;θ)∣∣2(8)
实验评估
setup
训练集
FLIC(Frames Labeled In Cinema):4000 训练图像 ;1000 测试图像; 10个上身关键点
LSP(Leeds Sports Dataset): 11000 训练 1000 测试; 14个全身关键点
Metrics:
Percentage of Correct Parts (PCP) –> Percent of DetectedJoints (PDJ)
如果两个预测的关节位置与真实肢体关节位置之间的距离最多为肢体长度的一半,则认为肢体被检出PCP是最初用于评估的首选度量,但是它具有惩罚较短的肢体(如下臂)的缺点,这些肢体通常较难检测。–> 为了解决此缺点,最近使用不同的检测标准报告了关节的检测率-如果预测的关节与真实的关节之间的距离在躯干直径的一定范围内,则认为已检测到关节。 通过改变该分数,可以获得针对不同程度的定位精度的检测率。 该度量标准减轻了PCP的缺点,因为所有关节的检测标准都基于相同的距离阈值。 我们将此度量标准称为“检测到的接头百分比”(PDJ)
实验结果

本文介绍了一种使用深层神经网络(DNN)进行人体姿态估计的方法。该方法通过整体预测人体关节点,克服了传统局部建模的局限性。采用级联DNN回归器逐步细化关节点位置,提高检测精度。
1441

被折叠的 条评论
为什么被折叠?



