使用深度卷积神经网络从单目图像中进行3D人体姿态估计.

本文把从单目相机图像中进行3D人体姿态估计任务建模为一个多任务学习框架:同时进行关节点回归任务与关节点检测任务。输入包含人体目标的边界框图像,关节点回归任务估计关节点相对于根关节点的位置;关节点检测任务检测每个局部窗口中是否存在关节点。

⚪ 关节点回归任务

关节点回归任务是指回归每个关节点$i$相对于父关节点$p(i)$的位置:

\[R_i = J_i-J_{p(i)}\]

父子关节点之间的相对位置关系更容易获取。由于人体的对称性,不同关节点之间可以分享信息;如左臂和右臂有相同的长度;在给定对称部分的前提下,易于推断出遮挡关节点的位置。

关节点回归的损失函数采用均方误差:

\[E_r(R_i,\hat{R}_i) = ||R_i-\hat{R}_i||_2^2\]

⚪ 关节点检测任务

给定任意关节点$i$和输入图像中的滑动窗口$l$,则可以定义一系列关节点检测任务,预测一个指示变量$h_{i,l}$;$h_{i,l}=1$表明滑动窗口$l$中存在关节点$i$;$h_{i,l}=0$表明滑动窗口$l$中不存在关节点$i$。

在这项工作中不考虑关节是否可见,即无论关节是否被遮挡,都会计算指标变量。这样使得训练网络即使在存在遮挡的情况下也能学习姿态估计的特征,这可能使网络能够在发生遮挡时预测有效的姿态。

关节点检测的损失函数采用二元交叉熵:

\[E_d(h_{i,l},\hat{h}_{i,l}) = -h_{i,l},\log \hat{h}_{i,l}-(1-h_{i,l})\log (1-\hat{h}_{i,l})\]

⚪ 网络结构

整个网络由9个可训练层组成,其中3个卷积层由回归网络和检测网络共享,3个全连接层用于回归网络,3个完全连接层用于检测网络。ReLu用于conv1conv2,以及用于回归和检测网络的前两个全连接层。conv2之后使用一个回归归一化层,应用以下函数来计算输出值,

\[f(u_{x,y})=\frac{u_{x,y}}{(1+\frac{\alpha}{|W_x|\cdot|W_y|}\sum_{x'\in W_x}\sum_{y'\in W_y}{u_{x',y'}^2})^\beta}\]

其中$u_{x,y}$是上一层在$(x,y)$处的输出值,$(W_x,W_y)$是$(x,y)$的邻域,$|W|$是邻域内的像素数,$\alpha,\beta$是超参数。

⚪ 多任务训练

使用多任务学习框架训练网络,允许在联合训练期间在回归和检测任务之间共享较低层中的特征。在训练期间,来自两个网络的梯度将被反向传播到相同的共享特征网络,即具有从conv1pool3的层的网络。在这种情况下,共享网络倾向于学习对两项任务都有帮助的特征。多任务训练的全局成本函数是

\[\phi_M=\frac{1}{2}\sum_{t=1}^{T}\sum_{i=1}^NE_r(R_i^{(t)},\hat R_i^{t})+\frac{1}{2}\sum_{t=1}^{T}\sum_{i=1}^{N}\sum_{l=1}^{L}E_d(h_{i,l}^{(t)},\hat h_{i,l}^{(t)})\]

⚪ 检测任务预训练

作为多任务训练的替代方案,另一种方法是使用来自检测网络的预训练权重来训练姿态回归网络。首先单独训练检测网络,即pool3层和fcr1层之间的连接被阻塞。在这个阶段只最小化检测损失。在训练了检测任务后,阻断pool3fcd1之间的连接,从而删除了检测任务,并将pool3重新连接到fcr1层。

使用该策略,使用从检测任务中学习的特征层权重(conf1-conv3)来初始化姿势回归的训练。注意,不使用检测器的全连接层(fcd1fcd2)的权重来初始化回归任务的全连接层(fcr1fcr2)。原因是检测任务和回归任务的目标非常不同,因此检测任务使用的高级特征可能对回归无效。