DeepPose:通过深度神经网络进行人体姿态估计
论文题目:DeepPose: Human Pose Estimation via Deep Neural Networks
论文是谷歌发表在CVPR 2014的工作
论文地址
Abstract
我们提出了一种基于深度神经网络 (DNN) 的人体姿态估计方法。姿势估计被表述为基于 DNN 的针对身体关节的回归问题。我们提出了一系列这样的 DNN 回归器,从而产生高精度的姿态估计。该方法具有以整体方式推理姿势的优势,并且具有简单但强大的公式,它利用了深度学习的最新进展。我们对不同真实世界图像的四个学术基准进行了详细的实证分析,具有最先进或更好的性能。
1. Introduction
人体姿势估计问题,定义为人体关节定位问题,在计算机视觉界受到了广泛关注。在图 1 中,人们可以看到这个问题的一些挑战——清晰的发音、小而几乎看不见的关节、遮挡以及捕捉上下文的需要。
图 1. 除了关节的极端可变性外,许多关节几乎看不见。我们只能猜测左图中右臂的位置,因为我们看到了姿势的其余部分并预测了人的动作或活动。同样,右边人的左半身根本看不见。这些都是需要整体推理的例子。我们相信 DNN 自然可以提供这种类型的推理。
该领域的主流工作主要受到第一个挑战的推动,即需要在所有可能的关节姿势的大空间中进行搜索。基于部件的模型很自然地适用于模型表达 ([16, 8]),并且近年来提出了多种具有有效推理的模型 ([6, 19])。
然而,上述效率是以有限的表现力为代价实现的——使用局部检测器,这在许多情况下都是关于单个部分的,最重要的是只对身体部位之间所有相互作用的一小部分进行建模。如图 1 所示,这些局限性已经得到认可,并且已经提出了以整体方式推理姿势的方法 [15、21],但在现实世界的问题中收效甚微。
在这项工作中,我们归因于人体姿势估计的这种整体观点。我们利用深度学习的最新发展,提出了一种基于深度神经网络 (DNN) 的新算法。 DNN 在视觉分类任务 [14] 和最近的对象定位 [23、9] 上表现出色。然而,应用 DNN 精确定位关节物体的问题在很大程度上仍未得到解答。在本文中,我们试图阐明这个问题,并提出一个简单而强大的整体人体姿势估计公式作为 DNN。
我们将姿势估计制定为联合回归问题,并展示如何在 DNN 设置中成功地对其进行投射。每个身体关节的位置回归为使用完整图像和 7 层通用卷积 DNN 作为输入。这个公式有两个优点。首先,DNN 能够捕获每个身体关节的完整上下文——每个关节回归器使用完整图像作为信号。其次,与基于图形模型的方法相比,该方法的制定要简单得多——无需明确设计零件的特征表示和检测器;无需明确设计模型拓扑和关节之间的交互。相反,我们表明可以针对此问题学习通用的卷积 DNN。
此外,我们提出了一系列基于 DNN 的姿势预测器。这种级联可以提高关节定位的精度。从基于完整图像的初始姿态估计开始,我们学习基于 DNN 的回归器,它通过使用更高分辨率的子图像来改进联合预测。
我们根据所有报告的结果在四个广泛使用的基准上展示了最先进的结果或优于最先进的结果。我们表明,我们的方法在表现出强烈外观和发音变化的人物图像上表现良好。最后,我们通过跨数据集评估展示泛化性能。
2. Related Work
从计算机视觉 [16] 的早期就提倡将一般的铰接物体,特别是人体姿势表示为零件图的想法。由 Fishler 和 Elschlager [8] 引入的所谓的图形结构 (PSs) 由 Felzenszwalb 和 Huttenlocher [6] 使用距离变换技巧变得易于处理和实用。因此,随后开发了各种各样具有实际意义的基于 PS 的模型。
然而,上述易处理性具有基于树的姿势模型的局限性,该模型具有不依赖于图像数据的简单二元势。因此,研究的重点是在保持易处理性的同时丰富模型的表现力。早期实现这一目标的尝试是基于更丰富的部分检测器 [19、1、4]。
最近,提出了多种表达复杂关节关系的模型。 Yang 和 Ramanan [27] 使用部件的混合模型。 Johnson 和 Everingham [13] 研究了全模型规模的混合模型,通过混合 PS。 Tian 等人 [25] 在分层模型中捕获了更丰富的高阶空间关系。捕获高阶关系的另一种方法是通过图像相关的 PS 模型,它可以通过全局分类器 [26、20、18] 进行估计。
归因于我们以整体方式推理姿势的哲学的方法显示出有限的实用性。 Mori 和 Malik [15] 试图从一组标记图像中为每个测试图像找到最接近的样本并转移联合位置。 Shakhnarovich 等人 [21] 采用了类似的最近邻设置,但是他们使用了局部敏感散列。最近,Gkioxari 等人 [10] 提出了一种用于零件配置的半全局分类器。这个公式在真实世界的数据上显示出非常好的结果,但是,它基于线性分类器,其表现力不如我们的,并且仅在手臂上进行了测试。最后,Ionescu 等人 [11] 采用了姿势回归的想法,但是他们对 3D 姿势进行了推理。
最接近我们的工作使用卷积神经网络和邻域成分分析来回归到表示姿势的嵌入中的一个点 [24]。然而,这项工作没有使用级联网络。 DNN 回归器的级联已用于定位,但面部点 [22]。在面部姿势估计的相关问题上,Osadchy 等人 [17] 采用了一种基于神经网络的姿势嵌入,并使用对比损失进行了训练。
3. Deep Learning Model for Pose Estimation
我们使用以下符号。为了表达一个姿势,我们将所有 k k k个身体关节的位置编码为姿势向量,定义为 y = ( … , y i T , … ) T , i ∈ { 1 , … , k } \mathbf{y}=\left(\ldots, \mathbf{y}_i^T, \ldots\right)^T, i \in\{1, \ldots, k\} y=(…,yiT,…)T,i∈{1,…,k},其中 y i \mathbf{y}_i yi包含第 i th i^{\text {th }} ith 个关节的 x x x和 y y y坐标。标记图像由 ( x , y ) (x, \mathbf{y}) (x,y)表示,其中 x x x代表图像数据, y \mathbf{y} y是ground truth姿态向量。
此外,由于关节坐标是在绝对图像坐标中,因此将它们归一化是有益的。包围人体或其部分的框 b b b。在一般情况下,方框可以表示完整图像。这样的框由其中心 b c ∈ R 2 b_c \in \mathbb{R}^2 bc∈R2以及宽度 b w b_w bw和高度 b h : b = ( b c , b w , b h ) b_h: b=\left(b_c, b_w, b_h\right) bh:b=(bc,bw,bh)定义。然后关节 y i \mathbf{y}_i yi可以通过框中心平移并通过框大小缩放,我们称之为 b b b归一化:
N ( y i ; b ) = ( 1 / b w 0 0 1 / b h ) ( y i − b c ) ( 1 ) N\left(\mathbf{y}_i ; b\right)=\left(\begin{array}{cc} 1 / b_w & 0 \\ 0 & 1 / b_h \end{array}\right)\left(\mathbf{y}_i-b_c\right) \quad(1) N(yi;b)=(1/bw001/bh)(yi−bc)(1)
此外,我们可以对姿势向量 N ( y ; b ) = ( … , N ( y i ; b ) T , … ) T N(\mathbf{y} ; b)=\left(\ldots, N\left(\mathbf{y}_i ; b\right)^T, \ldots\right)^T N(y;b)=(…,N(yi;b)T,…)T的元素应用相同的归一化,从而得到归一化的姿势向量。最后,稍微滥用了符号,我们使用 N ( x ; b ) N(x ; b) N(x;b)来表示边界框 b \mathrm{b} b对图像 x x x的裁剪,这实际上通过边界框对图像进行了归一化。为简洁起见,我们用 N ( ⋅ ) N(\cdot) N(⋅)归一化表示,其中 b \mathrm{b} b是完整图像框。
3.1. Pose Estimation as DNN-based Regression
在这项工作中,我们将姿态估计问题视为回归,其中我们训练并使用函数 ψ ( x ; θ ) ∈ \psi(x ; \theta) \in ψ(x;θ)∈ R 2 k \mathbb{R}^{2 k} R2k对于图像 x x x回归到归一化姿态向量,其中 θ \theta θ表示模型的参数.因此,使用等式(1)的归一化变换,绝对图像坐标中的姿态预测 y ∗ y^* y∗读取
y ∗ = N − 1 ( ψ ( N ( x ) ; θ ) ) y^*=N^{-1}(\psi(N(x) ; \theta)) y∗=N−1(ψ(N(x);θ))
尽管公式简单,但该方法的强大功能和复杂性在于 ψ \psi ψ,它基于卷积深度神经网络 (DNN)。这样的卷积网络由几层组成——每一层都是线性变换,然后是非线性变换。第一层将预定义大小的图像作为输入,大小等于像素数乘以三个颜色通道。最后一层输出回归的目标值,在我们的例子中是 2 k 2 k 2k关节坐标。
我们将 ψ \psi ψ的体系结构基于 Krizhevsky 等人 [14] 的图像分类工作,因为它在目标定位方面也显示了出色的结果 [23]。简而言之,该网络由 7 层组成(见图 2 左)。 C C C表示卷积层,LRN 表示局部响应归一化层, P P P表示池化层, F F F表示全连接层。只有 C C C和 F F F层包含可学习的参数,而其余的是无参数的。 C C C层和 F F F层都由一个线性变换和一个非线性变换组成,在我们的例子中是一个整流线性单元。对于 C C C层,大小定义为宽度×高度×深度,其中前两个维度具有空间意义,而深度定义了过滤器的数量。如果我们将每一层的大小写在括号中,那么网络可以简明地描述为 C(55 × 55 × 96) − LRN − P − C(27 × 27 × 256) − LRN − P − C(13 × 13 × 384) − C(13 × 13 × 384) − C(13 × 13 × 256) − P − F (4096) − F (4096)。前两个 C 层的滤波器大小为 11×11 和 5×5,其余三个为 3×3。在三层之后应用池化,尽管分辨率降低,但有助于提高性能。网络的输入是一张 220 × 220 的图像,它通过 4 的步长输入网络。上述模型的参数总数约为40M。有关更多详细信息,我们建议读者参考 [14]。
图 2. 左:基于 DNN 的姿态回归的示意图。我们用相应的维度可视化网络层,其中卷积层为蓝色,而完全连接的层为绿色。我们不显示参数自由层。右图:在阶段 s,将细化回归量应用于子图像以细化前一阶段的预测。
使用通用 DNN 架构的动机是其在分类和定位问题上的出色结果。在实验部分,我们展示了这种通用架构可用于学习模型,从而在姿势估计方面也能达到最先进或更好的性能。此外,这样的模型是一个真正的整体模型——最终的联合位置估计是基于完整图像的复杂非线性变换。
此外,DNN 的使用避免了设计特定领域姿势模型的需要。相反,这样的模型和特征是从数据中学习的。尽管回归损失没有对关节之间的显式交互进行建模,但所有 7 个隐藏层都隐含地捕获了这些交互——所有内部特征都由所有关节回归器共享。
训练 与 [14] 的区别在于损失。我们在最后一个网络层之上训练线性回归,而不是分类损失,以通过最小化预测与真实姿势向量之间的 L 2 L_2 L2距离来预测姿势向量。由于地面真值姿势向量是在绝对图像坐标中定义的,并且姿势在不同图像的大小上有所不同,我们使用等式(1)中的归一化来归一化我们的训练集 D D D:
D N = { ( N ( x ) , N ( y ) ) ∣ ( x , y ) ∈ D } D_N=\{(N(x), N(\mathbf{y})) \mid(x, \mathbf{y}) \in D\} DN={(N(x),N(y))∣(x,y)∈D}
那么获取最优网络参数的 L 2 L_2 L2为:
arg min θ ∑ ( x , y ) ∈ D N ∑ i = 1 k ∥ y i − ψ i ( x ; θ ) ∥ 2 2 ( 1 ) \arg \min _\theta \sum_{(x, y) \in D_N} \sum_{i=1}^k\left\|\mathbf{y}_i-\psi_i(x ; \theta)\right\|_2^2 \quad(1) argθmin(x,y)∈DN∑i=1∑k∥yi−ψi(x;θ)∥22(1)
为了清楚起见,我们写出了对单个关节的优化。应该注意的是,即使对于某些图像,并非所有关节都被标记,也可以使用上述目标。在这种情况下,总和中的相应项将被省略。
上述参数 θ \theta θ针对在分布式在线实现中使用反向传播进行了优化。对于大小为 128 的每个小批量,计算自适应梯度更新 [3]。学习率作为最重要的参数,设置为 0.0005。由于模型具有大量参数并且使用的数据集相对较小,我们使用大量随机翻译的图像裁剪(参见第 3.2 节)、左/右翻转以及 F F F层的 DropOut 正则化来扩充数据设置为 0.6。
3.2. Cascade of Pose Regressors
上一节中的姿势公式的优点是联合估计基于完整图像,因此依赖于上下文。然而,由于其固定输入大小为 220 × 220,网络查看细节的能力有限——它学习过滤器捕获粗尺度的姿势属性。这些对于估计粗略姿势是必要的,但不足以始终精确定位身体关节。
请注意,我们不能轻易增加输入大小,因为这会增加本已大量的参数。为了获得更好的精度,我们建议训练一系列姿势回归器。在第一阶段,级联通过估计上一节中概述的初始姿势开始。在后续阶段,训练额外的 DNN 回归器来预测关节位置从前一阶段到真实位置的位移。因此,每个后续阶段都可以被认为是对当前预测姿势的改进,如图 2 所示。
此外,每个后续阶段都使用预测的关节位置来关注图像的相关部分——在前一阶段预测的关节位置周围裁剪子图像,并将该关节的位姿位移回归量应用于该子图像。通过这种方式,后续的姿势回归器可以看到更高分辨率的图像,从而学习更精细尺度的特征,最终导致更高的精度。
我们对级联的所有阶段使用相同的网络架构,但学习不同的网络参数。对于全 S S S级联级的级 s ∈ { 1 , … , S } s \in\{1, \ldots, S\} s∈{1,…,S},我们用 θ s \theta_s θs表示学习的网络参数。因此,姿态位移回归器的读数为 ψ ( x ; θ s ) \psi\left(x ; \theta_s\right) ψ(x;θs)。为了细化给定的关节位置 y i \mathbf{y}_i yi,我们将考虑捕捉 y i \mathbf{y}_i yi周围的子图像的关节边界框 y i : b i ( y ; σ ) = \mathbf{y}_i: b_i(\mathbf{y} ; \sigma)= yi:bi(y;σ)= ( y i , σ diam ( y ) , σ diam ( y ) ) \left(\mathbf{y}_i, \sigma \operatorname{diam}(\mathbf{y}), \sigma \operatorname{diam}(\mathbf{y})\right) (yi,σdiam(y),σdiam(y)),以第 i i i个关节为中心,以 σ \sigma σ缩放的姿势直径为维度。姿势的直径直径 ( y ) (\mathbf{y}) (y)被定义为人体躯干上相对关节(如左肩和右髋)之间的距离,并取决于具体的姿势定义和数据集。
使用上面的符号,在阶段s=1,我们从包围完整图像或由人检测器获得的边界框 b 0 b^0 b0开始。我们得到一个初始姿势:
Stage 1: y 1 ← N − 1 ( ψ ( N ( x ; b 0 ) ; θ 1 ) ; b 0 ) \text { Stage 1: } \quad \mathbf{y}^1 \leftarrow N^{-1}\left(\psi\left(N\left(x ; b^0\right) ; \theta_1\right) ; b^0\right) Stage 1: y1←N−1(ψ(N(x;b0);θ1);b0)
在每个后续阶段 s ≥ 2 s \geq 2 s≥2,对于所有关节 i ∈ { 1 , … , k } i \in\{1, \ldots, k\} i∈{1,…,k}我们首先回归细化位移 y i s − \mathbf{y}_i^s- yis− y i ( s − 1 ) \mathbf{y}_i^{(s-1)} yi(s−1),方法是对前一阶段 ( s − 1 ) (s-1) (s−1)的 b i ( s − 1 ) b_i^{(s-1)} bi(s−1)定义的子图像应用回归量。然后,我们估计新的联合框 b i s b_i^s bis:
Stage s : y i s ← y i ( s − 1 ) + N − 1 ( ψ i ( N ( x ; b ) ; θ s ) ; b ) ( 6 ) for b = b i ( s − 1 ) b i s ← ( y i s , σ diam ( y s ) , σ diam ( y s ) ) \begin{aligned} & \text { Stage } s: \quad \mathbf{y}_i^s \leftarrow \mathbf{y}_i^{(s-1)}+N^{-1}\left(\psi_i\left(N(x ; b) ; \theta_s\right) ; b\right)(6) \\ & \text { for } b=b_i^{(s-1)} \\ & b_i^s \leftarrow\left(\mathbf{y}_i^s, \sigma \operatorname{diam}\left(\mathbf{y}^s\right), \sigma \operatorname{diam}\left(\mathbf{y}^s\right)\right) \\ & \end{aligned} Stage s:yis←yi(s−1)+N−1(ψi(N(x;b);θs);b)(6) for b=bi(s−1)bis←(yis,σdiam(ys),σdiam(ys))
我们将级联应用于固定数量的阶段 S S S,如第4.1节所述确定。
训练 网络参数 θ 1 \theta_1 θ1的训练如第3.1节等式(4)所述。.在 s ≥ 2 s \geq 2 s≥2的后续阶段,训练是完全相同的,只有一个重要的区别。来自训练示例 ( x , y ) (x, \mathbf{y}) (x,y)的每个关节 i i i使用不同的边界框 ( y i ( s − 1 ) , σ diam ( y ( s − 1 ) ) , σ diam ( y ( s − 1 ) ) ) \left(\mathbf{y}_i^{(s-1)}, \sigma \operatorname{diam}\left(\mathbf{y}^{(s-1)}\right), \sigma \operatorname{diam}\left(\mathbf{y}^{(s-1)}\right)\right) (yi(s−1),σdiam(y(s−1)),σdiam(y(s−1)))归一化——一个以从前一阶段获得的相同关节的预测为中心——因此我们根据前一阶段的模型调节该阶段的训练。
由于深度学习方法容量大,我们通过对每个图像和关节使用多个归一化来扩充训练数据。我们不是只使用前一阶段的预测,而是生成模拟预测。这是通过用从二维正态分布 N i ( s − 1 ) \mathcal{N}_i^{(s-1)} Ni(s−1)随机采样的向量随机置换关节 i i i的地面真实位置来完成的,均值和方差等于观察到的位移的均值和方差 ( y i ( s − 1 ) − y i ) \left(\mathbf{y}_i^{(s-1)}-\mathbf{y}_i\right) (yi(s−1)−yi)遍及训练数据中的所有示例。完整的增强训练数据可以通过首先从原始数据中统一采样一个示例和一个关节,然后根据来自 N i ( s − 1 ) \mathcal{N}_i^{(s-1)} Ni(s−1)的采样位移 δ \delta δ生成模拟预测来定义:
D A s = { ( N ( x ; b ) , N ( y i ; b ) ) ∣ ( x , y i ) ∼ D , δ ∼ N i ( s − 1 ) , b = ( y i + δ , σ diam ( y ) ) } \begin{aligned} D_A^s= & \left\{\left(N(x ; b), N\left(\mathbf{y}_i ; b\right)\right) \mid\right. \\ & \left(x, \mathbf{y}_i\right) \sim D, \delta \sim \mathcal{N}_i^{(s-1)}, \\ & \left.b=\left(\mathbf{y}_i+\delta, \sigma \operatorname{diam}(\mathbf{y})\right)\right\} \end{aligned} DAs={(N(x;b),N(yi;b))∣(x,yi)∼D,δ∼Ni(s−1),b=(yi+δ,σdiam(y))}
级联阶段 s s s的训练目标按照方程式 (4) 完成,特别注意为每个关节使用正确的归一化:
θ s = arg min θ ∑ ( x , y i ) ∈ D A s ∥ y i − ψ i ( x ; θ ) ∥ 2 2 \theta_s=\arg \min _\theta \sum_{\left(x, \mathbf{y}_i\right) \in D_A^s}\left\|\mathbf{y}_i-\psi_i(x ; \theta)\right\|_2^2 θs=argθmin(x,yi)∈DAs∑∥yi−ψi(x;θ)∥22