介绍

我们提出了一个新的基于Transformer的3D人体姿势估计架构,称为Strided Transformer,它可以简单有效地将一个长的2D姿势序列提升到一个单一的3D姿势。

为了减少序列冗余和计算成本,引入了Strided Transformer Encoder(STE)来逐步减少时间维度,并将长距离信息以分层的全局和局部方式聚合到姿势序列的单向量表示中。

设计了一个full-to-single的监督方案,在全序列规模的训练中施加额外的时间平滑性约束,并进一步完善单一目标帧规模的估计。

方法

给定从视频中估计出的2D位置序列 P={p1,...pT}P=\{p_1,...p_T\} 我们旨在重建目标帧的三维关节位置 XRJ×3X \in \mathbb{R}^{J \times 3} ,其中 ptRJ×2p_t \in \mathbb{R}^{J \times 2} 表示 tt 帧处的2D关节位置,TT 是视频帧的数量,JJ 是关节的数量。

该网络包含一个普通Transformer编码器(VTE),然后是一个跨步Transformer编码器(STE),VTE首先被用来对长距离信息进行建模,并由全序列尺度进行监督,以强制实现时间上的平滑性,然后,本文提出的STE聚合信息以产生一个目标姿势表示,并由单个目标帧的尺度监督以产生更准确的估计。

跨步 Transformer 编码器

本文提出了一种逐步压缩隐藏状态的序列,在分层结构中对全局和局部信息进行建模的STE。其每一层都由一个多头自我注意(MSA)和一个卷积前馈网络(CFFN)组成。

卷积前馈神经网络

给定 TT 个序列与 DinD_in 个通道的输入特征向量 ZRT×DinZ \in \mathbb{R}^{T \times D_{in}},去生成一个 (T~,Dout)(\tilde{T}, D_{out}) 的特征,FFNFC所进行的操作可以被表述为:

FCt,dout=iDinwdout,izt,i\text{FC}_{t,d_{out}} = \sum^{D_{in}}_{i} w_{d_{out},i} * z_{t, i}

如果考虑到1D卷积,核大小为 KK,跨步因子为 SS,那么CFFN中的分层卷积可以计算为:

ConvS(t),cout(Z)=iDinkKwdout,i,kzS(tK12+k),i\text{Conv}_{S(t),c_{out}(Z)} = \sum^{D_{in}}_i \sum^K_k w_{d_{out},i,k} * z_{S(t-\frac{K-1}{2}+k),i}

这样一来,VTEFFN中的全连接层就被分层卷积取代了。 修改后的VTE被命名为Strided Transformer EncoderSTE),可以表示为:

Z^n1=Zn1+MSA(LN(Zn1))\hat{Z}^{n-1} = Z^{n-1} + \text{MSA}(\text{LN}(Z^{n-1}))

Z^n=Zn+MaxPool(Z^n1)+CFFN(LN(Z^n1))\hat{Z}^n = Z^n + \text{MaxPool}(\hat{Z}^{n-1}) + \text{CFFN}(\text{LN}(\hat{Z}^{n-1}))

其中 n[1,...,N]n \in [1,...,N]STE的层序号

网络架构

Pose embedding

姿势嵌入首先将每一帧的JJ点的 (x,y)(x,y) 坐标连接到标记 PRT×(J2)P^\prime \in \mathbb{R}^{T \times (J \cdot 2)},然后使用具有dm通道的1D卷积层将每个token嵌入到高维特征 Z0RT×dmZ-0 \in \mathbb{R} ^{T \times d_m},然后进行批量归一化、dropoutReLU激活。

VTE

假设VTE由N1层组成,在VTE的第一层之前使用可学习的位置嵌入 E1RT×dmE_1 \in \mathbb{R}^{T \times d_m},可以表述如下:

Z10=Z0+E1Z^0_1 = Z_0 + E_1

然后,给定嵌入特征z^0_1VTE层可以表示为:

Z^1n1=Z1n1+MSA(LN(Z1n1))\hat{Z}^{n-1}_1 = Z^{n-1}_1 + \text{MSA}(\text{LN}(Z^{n-1}_1))

Z1n=Z^1n1+FFN(LN(Z^1n1))Z^n_1 = \hat{Z}^{n-1}_1 + \text{FFN}(\text{LN}(\hat{Z}^{n-1}_1))

它可以通过使用一个函数 VTE()\text{VTE}(\cdot) 来表示VTE层:

Z1n=VTE()Z1n1Z^n_1 = \text{VTE}()Z^{n-1}_1

STE

它是建立在VTE输出的基础上,使用 Z1N1RT×dmZ^{N_1}_1 \in \mathbb{R}^{T \times d_m} 作为输入,由于序列长度的不同,STE的每一层都使用了可学习的位置嵌入E2RS(t)×dmE_2 \in \mathbb{R}^{S(t) \times d_m},其分层因子为 SS。那么,STE层可以表示为:

Z2n=STE(Z2n1+E2n)Z^n_2 = \text{STE}(Z^{n-1}_2 + E^n_2)

回归头

最后,3D姿势预测的输出是 X~\tilde{X}XX,其中 X~RT×J×3\tilde{X} \in \mathbb{R}^{T \times J \times 3}XRJ×3X \in \mathbb{R}^{J \times 3} 分别是3D姿势序列的预测和目标帧的3D关节定位。

FUll-to-Single 预测

全序列尺度(Full sequence scale)

序列损失 Lf\mathcal{L}_f 被用来改进单帧预测,以实现序列的时间一致性。 这个损失保证了估计的三维位置序列 X^RT×J×3\hat{X} \in \mathbb{R}^{T \times J \times 3}ground truth三维连接序列 TRT×J×3T \in \mathbb{R}^{T \times J \times 3} 相吻合:

Lf=t=1Ti=1JYitX^it2\mathcal{L}_f = \sum^T_{t=1} \sum^J_{i=1} ||Y^t_i - \hat{X}^t_i||_2

单目标帧尺度

在第二步中,对STE的输出采用监督,然后是回归头,单帧损失用于完善单一目标帧尺度上的估计。 它使估计的三维姿势 XRJ×3X \in \mathbb{R}^{J \times 3} 与目标地面真实三维关节注释 YRJ×3Y \in \mathbb{R}^{J \times 3} 之间的距离最小:

Ls=i=1JYiXi2\mathcal{L}_s = \sum^J_{i=1} || Y_i - X_i ||_2

其中 XiX_iYiY_i 分别代表目标帧的估计三维姿态和 ground truth 三维关节位置。

损失函数

在我们的实现中,模型在全序列尺度和单目标帧尺度上都受到监督。我们以端到端的方式训练整个网络,总损失:

L=λfLf+λsLs\mathcal{L} = \lambda_f \mathcal{L}_f + \lambda_s \mathcal{L}_s