现有的大部分工作采用一种2D-3D Lifting的方法,先用预训练好的2D姿态检测器提取2D关键点坐标,然后将它们输入到3D姿态估计的网络中。这种方法能得以很好地实现与流行,主要得益于目前的2D姿态估计算法较为成熟。
然而,由于一个2D骨架可以对应多个3D骨架,它具有在单视角下2D到3D映射中固有的深度模糊性,这也导致了它本身就具有挑战性。为了减少这个深度歧义性,可以利用时间信息,让模型“多看”同个视角不同时间人的姿态,让网络从序列中挖掘到更丰富的深度信息。
那么,想要更好地利用时间信息,首要的任务就是寻找一个可以有效捕获长序列依赖性的网络架构,以使得网络受利于一个大的时间感受野以获得更丰富的信息。目前的方法大多数使用基于LSTM,基于图卷积等网络架构,然而这些方法大多因无法更好地捕获长期依赖性而受限于一个小的时间感受野。
在自然语言处理领域广泛使用的vanilla Transformer encoder (VTE) [1] (NIPS'17) 显示出了强大地捕获长期信息的能力,它的self-attention加上FFN的机制看上去很适合3D姿态估计中2D-3D Lifting的这类方法。
最近的工作PoseFormer [2] (arXiv'21) 尝试使用基于pure Transformer的架构来应用于3D姿态估计这个任务,并设计了个时空Transformer来建模关节点的结构与全局帧的信息。然而,pure Transformer的网络设计真的适合基于视频的3D姿态估计这个任务吗?本文对此进行了思考:
要想降低序列的长度,一个可选择的方案是执行pooling操作在FFN的后面 [3] (NIPS'20)。然而该种方式可能会丢弃掉大量的有用信息并且局部信息不能够被很好地利用。
对此,本文提出使用跨步卷积来替代VTE架构FFN层中的全连接网络。修改后的VTE称作为strided Transformer encoder (STE)。
如此,得益于跨步卷积,网络可以降低序列的长度并逐渐合并相近的pose直到“压缩”为一个目标帧的单个向量的表示。它以一种global和local的方式来聚合信息并因此大大地降低了VTE的计算量,以利于构建一个更深层的网络并让以大的感受野进行输入变为可能,以此来提升估计的准确性。
那么,只用一个单个姿态的表示足够表示一段长序列并能提升模型的性能吗?本文发现只在single target frame尺度监督模型,会忽略视频帧之间的时间平滑性;
然而只在full sequence尺度监督模型,却往往不能学习到目标帧的一个更好的表示。因此,本文提出将两种方式结合,引入了full-to-single的监督机制,以此来增加时间平滑性并得到目标帧更精准的结果。
总的来说,本文为了从冗余的序列中学习到具有鉴别性的单个姿态的表示,所做的贡献如下:
本文提出的Lifting Transformer包含VTE和STE两个模块,并以从视频中估计的2D姿态序列为输入,输出中间帧的3D pose估计结果。
该网络首先通过VTE来捕获长距离的时序信息,然后通过提出的STE来聚合VTE输出的时序信息到一个目标帧的pose表示。整个模型在full sequence和single target frame两个尺度下进行监督。
Vanilla Transformer encoder (VTE) [1] (NIPS'17) 包含2个结构:Multi-head attention和position-wise feed-forward network (FFN)。
Transformer的核心机制是多头自注意力机制:
在VTE的FFN中,输入输出序列一直保持着相同的维度:
然而,因为序列中相近的pose十分相似,这种隐藏层的全长表示实际包含了巨大的冗余信息,以至于并不能很好的表示目标帧的单个姿态。
因此,本文提出修改原有的FFN层,利用跨步卷积来聚合相近的pose,已达到提取目标帧至关重要的信息的目的:
如此,将原有的FFN层中的全连接网络用跨步卷积来替代,便得到了本文提出的strided Transformer encoder (STE)。它包含multi-head self-attention和卷积FFN,如下图(右边)所示
STE使用self-attention机制来建模全局信息并利用跨步卷积来捕获局部信息。它可以逐层地减低时间维度并合并相近的pose到一个短序列的表示中。更值得一提的是,视频帧中的冗余性和网络的计算量也被降低并因此提高了模型的容量。
本文采用了一种full-to-single的监督机制,结合2种尺度的约束来进一步refine中间监督的结果来产生更准确的估计结果。
第一步是使用序列Loss来监督VTE的输出,以增强该中间估计序列的时间平滑性
第二步则是用单帧Loss来监督STE的输出(STE以VTE的输出为输入),以使得模型更好地关注于目标帧并学习到其特定的表示,以使得最终的估计结果更加精确
最终模型在full sequence和single target frame两个尺度下进行监督, 并以一个总的Loss来端到端地训练模型
本文在 Human3.6M 和 HumanEva-I 2个标准数据集上进行了实验,并在室外视频上也取得了很好的效果。
可见在各种类型的2D poses为输入下,本文的方法均取得了SOTA的性能。
当对比于全卷积模型[4, 5] (CVPR'19, CVPR'20)以各种序列长度为输入时,本文的模型也以更少的参数量均取得了最佳的结果。同时,本文提出的模型参数量几乎不随着序列的增大而增加,可见其强大的对时序信息建模的能力,并且对实时的应用至关重要。
本文做了大量的消融实验来验证模型(27帧为输入)的有效性、效率性与鲁棒性。更详细的结果与分析见原文。
下表是不同长度的输入序列和以各种类型的2D poses为输入对模型性能的影响。
不同跨步卷积的参数对性能的影响。
本文给出了在户外任意视频下(来自YoTube)估计的结果,可见即使人体在高速运动下具有巨大的复杂性和可变性,本文也可以估计出准确而又自然的3D姿态序列。
最后,本文给出了2个Trasnformer模块的注意力矩阵的可视化结果,来解释视频帧序列为什么能提升目标帧的估计准确性,以及估计的结果究竟依赖于哪些帧的信息。从图中可见VTE模块主要关注于输入序列相邻帧的信息,而STE模块主要关注于目标帧(中间帧)的信息。
这是作者事先所预料的,因为得益于提出的full-to-single策略,2个模块实际上学习到的是2种不同的表示。VTE模块主要捕获全帧之间的依赖性并加强中间估计序列间的时间平滑性,而STE模块主要学习一个对目标帧的一个特定的表示来达到对其的一个优化的结果。
本文探究了pure Transformer的架构不能简单地应用到基于视频的3D姿态估计任务中的问题。
通过提出的Lifting Transformer,展示了如何从冗余的序列中学习到具有鉴别性的单个姿态的表示,其关键在于如何在Transformer架构中合理利用跨步卷积来将输入的pose长序列“压缩”到一个简单的形式,并以full-to-single的机制来进行监督以此来引入额外的时间平滑性约束。
因此节省了计算量并提高了模型的容量,最终使得性能得以提升。
参考文献
[1] Vaswani A, et al. Attention Is All You Need, NIPS 2017.
[2] Zheng C, er al. 3D Human Pose Estimation with Spatial and Temporal Transformers, arXiv 2021.
[3] Dai Z, et al. Funnel-transformer: Filtering out sequential redundancy for efficient language processing, NIPS 2020.
[4] Pavllo D, et al. 3D human pose estimation in video with temporal convolutions and semi-supervised training, CVPR 2019.
[5] Liu R, et al. Attention Mechanism Exploits Temporal Contexts: Real-time 3D Human Pose Reconstruction, CVPR 2020.
END
备注:姿态
姿态估计交流群
人体姿态估计、手势识别等更多新鲜资讯,若已为CV君其他账号好友请直接私信。
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到
联系客服