ICCV2021 的一篇文章,一开始的感觉是在之前CVPR 2019上的VideoPose3D基础上做的一些工作,主要是把最近两年很火的vision Transformer用到了上面。
论文地址:https://arxiv.org/pdf/2103.10455.pdf
Github:https://github.com/zczcwh/PoseFormer
摘要
Transformer在NLP上取得很好的效果后,被引入到了计算机视觉任务中,如图像分类,目标识别和语义分割。而在HPE领域,卷积网络架构仍然占据主流,在这篇文章中,作者提出了PoseFormer,一个完全基于transformer,不包含卷积架构的视频3D HPE方法。受到最近vision Transformer的启发,作者设计了一个spatial-tempral transformer结构,对人体关节关系和跨帧的时间相关性进行综合建模,最后输出一个精确的中间帧的3D人体姿势。验证数据集使用Human3.6M和MPI-INF-3DHP,都达到了SOTA的效果。
1&2. 引言&相关工作
引言和相关工作部分就不展开了,大概写一下。
主要讲为什么要采用Transformer,因为CNN对时序数据的特征提取有限,RNN则太过简单,而Transformer中的自注意力机制恰好能够解决这个问题,对于跨帧间的时序关系表达学习也更强。
因为用到了Transformer,可以参考这个视频:李沐-Transformer论文逐段精读【论文精读】
主要贡献:
(1)第一次提出了完全基于Transformer的3D HPE模型 PoseFormer,将2D关节点升维到3D
(2)设计了一个有效的Spatial-Temporal Transformer,spatial transformer模块对身体关节的局部关系进行编码,temporal transformer获取整个序列帧中跨帧间的全局依赖
(3)在Human3.6M和MPI-INF-3DHP上都取得了SOTA效果
3. 方法
作者的方法使用的也是2D-to-3D lifting pipeline的方式,首先获取视频各个帧的2D pose,这部分用的是已有的工具实现,然后以这个2D pose序列作为作者模型的输入,构建3D pose的中间帧。
3.1. Temporal Transformer Baseline
FIgure2.(a)是Temporal Transformer baseline的架构,这边以每一帧的2D pose为token,或者像Vit中称为patch,输入到patch embedding中。patch embedding是一个可训练的投影层,将每个pach嵌入到高维特征中。
旁边的position embedding用于保留每个帧的位置信息,通过这个embedding就相当于加入了每个patch的时序信息。
x^i∈X表示每一帧的输入向量,E为线性层的矩阵,E_pos为 position embedding,输出的Z_0作为 Transformer Encoder的输入。
自注意力是Transformer的核心,能够将输入序列不同位置的embedded feature联系起来。本文的Transformer是由多头自注意力快和MLP块组成的,在每一个块之前连接一个LayerNorm,块后连接一个残差连接。
尺度变化的向量积注意力方法(Scaled Dot-Product Attention):这部分内容基本上和attention is all you need大差不差,跳过。
在本文,d = C, N=f,C是嵌入的维数,f是视频的帧数
多头自注意力层(Multi-head Self Attention Layer):基本和原文一样。
为了预测中间帧的3D pose,编码器的输出被压缩到了与输入帧的平均维度一样。最后通过一个MLP块回归输出y,得到中间帧的3D pose。
3.2. PoseFormer: SpatialTemporal Transformer
作者观察到Temperoal主要是关注输入序列帧间的全局依赖,将关节坐标投影到了更高维,而这就忽略了局部关节坐标间的运动学关系,这种空间关系在简单的线性投影层是难以得到较强的表达的。一种潜在的解决方法是将每个关节坐标视作一个单独的patch,将所有帧的关节输入到Transformer中(如图Figure2.(b)),而这样做会导致patch的数量陡增,从每帧一个patch,变成了J*f个patch,J为关节数量。
为了有效学习局部关节关系,作者分别使用spatial和tempoeral两个Transformer模块,作者提出的PoseFormer包含三个模块:spatial transformer、temporal transformer以及regression head模块.
下面对这几个模块进行展开解释:
Spatial Transformer Module:该模块旨在从一个单帧图像中提取高维特征向量。给定一个包含J个关节点的2D pose,将每个关节是为一个patch后feeding到后面的transformer encoder中。这边的postion embedding使用的是一个patial positon enbedding,用于标识不同关节位置,将一帧中所有的关节patch feeding到Transformer中,利用自注意力机制,学习所有关节点之间的相互信息,输出的是一个帧的总体信息Zi_L。这部分的输出Z再加上一个帧之间的position embedding作为Temporal Transformer的输入。
Temporal Transformer Module:Spatial transformer已经对关节间的信息进行提取集合,做的是每帧内的局部运动学信息提取,Temporal Transformer要做的就是对序列帧的依赖进行建模,做的是全局信息的提取。这两个Transformer的结构是一样的,只是处理的信息角度有区别。此处输出一个向量Y(f ×(J·c))
Regression Head:使用一系列帧来预测3D pose的中间帧,需要将Termpral Trasformer输出的Y缩减为y(1 x (J·3))。作者采用在帧维度上进行加权平均操作,最后使用一个含LayerNorm的MLP块和一个线性层得到输出y。
Loss Function:为了训练 spatial-temporal transformer model,采用标准的MPJPE loss最小化真实值和预测值的标准误
4.实验
4.1. Datasets and Evaluation Metrics
Datasets: Human3.6M 和 and MPI-INF-3DHP
Evaluation Metrics: MPJPE、P-MPJPE、Area Under Curve (AUC).
4.2. Implementation Details
作者使用两个3090 GPU训练和测试,选择了三个不同帧长(9、27、81)进行实验,具体的细节会在消融实验中展开。训练时使用Adam优化器训练了130个epochs,权值衰减为0.1。学习率采用指数衰减,初始为2e-4,每次epoch衰减因子为0.98。batch size设置为1024,Transformer layer设置为随机深度。在H3.6M中,2D pose detector使用的是cascaded pyramid network(CPN),MPI-INF-3DHP则使用真实的2D pose作为输入。
4.3. Comparison with StateoftheArt
Human3.6M
table1展示了作者测试集的结果,在MPJPE和P-MPJPE两个指标下,PoseFormer比作者的baseline分别高出了6.1%和6.4%,这表明使用spatial transformer的有效性,能够带来一定的优势。与同样基于transformer,但不包含时间信息的METRO相比,PoseFormer比之MPJPE下降了18%。
在第二组中,P-MPJPE指标也获得了最好的效果,可以更准确的预测有一定难度的动作,如:拍照、坐下。遛狗和吸烟,与其他简单动作不一样的是,这些动作姿势变化更快,模型对于远距离帧的关联性更强,这里作者觉得自注意力机制的全局依赖性起到了作用。
为了进一步研究这种方法的边界,作者直接将2D pose的 ground truth作为PoseFormer的输入(之前是借助第三方的2D detector),MPJPE值从原来的44.3mm下降到了31.3mm,下降了29.7%,在子动作上也取得的了非常好的效果,比之前最好效果的SRNet有2%的略微提升。
figure3显示的是个别关节上的一些MPJPE比较,在复杂关节上的误差,PoseFormer比其他的都要好。但其实差不了多少。。
MPI-INF-3DHP
table3是在MPI-INF-3DHP数据集上的效果,数据集的样本会比H3.6M少,主要是探究模型在小数据集上的适用性。视频帧长为9,主要还是数据集样本比较短,效果和其他模型比实现了SOTA效果。
Figure4主要是一个视觉性对比,和真实情况对比,通过对比做的还不错。但是这个展示的仅仅是部分的,实际如何还是要看总体的一个平均值。
4.4. Ablation Study
为了研究不同结构的贡献成分,作者在H3.6M上的第一组进行了消融实验,
Table4展示了去除某个结构后的MPJPE结果,其中输入帧长从原来的81改为了9。影响比较重要的是S-T部分,去掉后误差值最高,说明Spatial-Transformer的增加确实起到了作用。
Table5展示的是改变几个参数后的效果,c是Spatial-Transformer的patch embeding的维度,L_S和L_T分别表示Spatial-Transformer和Temporal-Transformer中的层数。
Table 6比较计算复杂度,这个看图就好了。
5. Conclusion
提出了一个PoseFormer模型,一个在视频上的完全基于Tansformner的3D HPE方法。sptial transformer模块编码了2D关节点之间的局部关系,temporal transformer模块捕捉不同帧之间的全局依赖关系,该模型实现了SOTA效果。