论文重点信息摘选与理解:P-STMO: Pre-Trained Spatial Temporal Many-to-One Model for 3D Human Pose Estimation(2022ECCV)
P-STMO
Abstract
- P-STMO 属于2D-3D的3DHPE方法。
- 作者为降低捕获时空信息的难度,将该任务分为两个阶段:
- pre-training(预训练):提出一种masked pose modeling(a self-supervised pre-training sub-task)
- fine-tuning(微调)
- 提出一种时序降采样策略(temporal downsampling strategy)来减少数据冗余。
Introduction
- 视频中的单目3D人体姿态估计是一项由来已久的计算机视觉任务,具有广泛的应用:诸如虚拟现实、医疗辅助和自动驾驶等。
- 两步估计方法首先检测2D人体关键点,然后回归每个关节的3D位置(使用现成的2D关键点检测器获取2D位姿,再从这些2D关键点提升3D位姿)。从2D keypoints到3D poses仍然remains an ill-posed problem1 due to depth ambiguity.
-
作者说,过去的工作(比如poseformer)直接引入transformer来刻画2D-3D的时空依赖关系没那么容易。(This might make it difficult to optimize the model.)并且transformer需要更多的数据来训练(相比卷积层)
-
于是作者提出self-supervised pre-training of Transformer来解决上述的问题。
作者说:“之前有些工作通过随机掩盖一部分输入数据,然后恢复被掩盖的内容这种方式来让模型学习数据内部的固有特征。”
嗯…我也在OCR的任务中看到过类似的掩蔽方法。作者在这里的引文有两篇都是关于BERT:pre-training的,感觉可以有空看看BERT。 -
pre-training阶段使用掩蔽姿态建模方法来重构二维姿态,这样有利于网络初始化。
-
fine-tuning阶段将(上一阶段的)encoder结合一个many-to-one frame aggregator来完成对(完整输入2D poses序列的中间帧的)3D pose预测。
-
encoder在阶段一的目的是捕获2D时空依赖信息,在阶段二的目的是提取3D时空特征。这样两步走的方法能够降低网络的优化难度,提高预测准度。
-
论文提出的模型主要有三个模块:
- SEM:捕获单帧内的空间信息。这部分以MLP作为backbone,相比于FC和Transformer结构,在计算复杂度适中的时候,MLP性能最好。
- TEM:捕获不同帧之间的时间依赖关系
- MOFA:聚合多个帧的信息来辅助预测三维位姿
-
(我认为是在阶段二的)输入端引入时间下采样策略( TDS ),在扩大时域感受野的同时减少数据冗余。
-
总结论文模型的优点与贡献:
- 引入预训练(自监督方式),更好的捕获时空依赖关系。
当初开组会分享poseformer的时候老师最后随口一说能不能在空间关系捕获上有所改进,果真这篇就是一种改进思路。
- MLP作为SEM的backbone,更有效地提取空间特征;TEM的输入采用TDS。
- 论文模型在两个基准数据集上达到SOTA。
Related Work
3D Human Pose Estimation
最近的一种研究趋势:使用2D关键点来回归相应的3D关节点位置。其优点是与现有的任何一种2D位姿估计方法兼容。作者的方法属于这一类。
- […]这些工作都是围绕如何利用视频中的空间域和时间域信息这一问题展开。
- […]这些工作只关注3D单帧位姿估计,而忽略了时间依赖关系。
最近的这些工作[…]探索了整合时空信息的方法,下面逐步拆解各方法的不足。
重点关注一些方法的不足之处。
- 这一块2,4,5点由于我背景知识/相关论文没读所以不理解。
- 我很清楚作者提的这篇文章(poseformer),但并不认同作者说的这个(It ignores the importance of the current pose and its near neighbors.)缺点。poseformer原文也是对整个视频序列取一段一段的帧来计算预测的,每一段包含的帧数可以是9,27,81…,哪里忽略current和neighbors了?
- 基于循环神经网络(RNN)的方法具有较高的计算复杂度。
- 基于图卷积网络(GCN)的方法对时空图进行图卷积,并预测序列中的所有姿势。这削弱了网络在特定帧中建模3D姿态的能力。
- 基于Transformer的方法通过在最后一层对序列中所有帧的特征进行加权平均来预测当前(中间)帧的3D姿态。它忽略了当前位姿及其近邻的重要性。
还有一些工作[…]关注于多对一的帧聚合过程(我个人觉得这个和时间域信息利用这个差不多)。
- (许多)基于时序卷积网络( Temporal Convolutional Network,TCN)的方法没有显式地提取空间和时间特征。
- vanilla Transformer捕获序列中的长程时间依赖关系来缓解4中的问题,但是它通过单一的fc层获取空间信息,表示能力不足。
Pre-Training of Transformer
- self-supervised pre-trained models在NLP领域就是masked language modeling,迁移到CV领域就是masked image modeling。
- 作者将预训练技术引用到3DHPE,提出了masked pose modeling task。
- 注意到METRO [ 27 ]也掩盖了输入的2D姿态,但目标是直接回归3D关节位置而不是恢复输入。这种方法本质上是一种数据增强方法,因此与所提出的预训练任务不同。
Method
Overview&我的总体理解:
- 结构上,有SEM,TEM,MOFA三大模块;
- 网络优化时(时间上),需要进行两步走:先进行预训练,然后加载完预训练的参数以后,再进行微调(本质上也是一个训练过程+最终预测过程)。下面从时间顺序来看整个工作流程。
Pre-Training of STMO
这一部分主要为了解决self-supervised spatial temporal pre-training任务(就是之前提到的MPM),具体通过掩蔽策略来进行实施。这一块主要是学习时空依赖关系。原文说monocular motion contributes to depth estimation(有论文依据),所以这块的二维时空关系学好了的话,后续可以提高整体3D的估计精度。
- 如图Fig1(a),对于一段2D poses的帧序列,先对其进行空域时域掩蔽:
- 序列帧中随机挑选部分帧进行遮挡,被遮挡的帧用一个共享可学习的向量 e T e^{T} eT来替换;
- 再对剩余帧中的每一帧的2D pose的关节点进行固定数目的随机遮挡(如下图Fig2,这个固定数目=2),被遮挡的关节点用一个共享可学习向量 e S e^{S} eS来替换。
- 接下来输入到Encoder层时,使用没有被掩蔽的帧作为输入,且在这些帧中,所有关节点都要输入(包括被掩蔽的关节点),也就是不包括 e T e^{T} eT(这样可以提高模型效率)但要用 e S e^{S} eS。
- 下一步,decoder会将 没有掩蔽的帧经过encoder的嵌入 和 掩蔽帧的替换向量 e T e^{T} eT联合输入,最终学习到如何填补空缺的2D pose帧,来重建2D poses序列。
Spatial Temporal Many-to-One (STMO) Model
这一部分就是Fig1的(b)展示,会提前把pre-training的部分加载到同样的encoder结构。
- 对于STMO模型,输入的是完整的2D poses序列
- 输入序列首先经过Encoder的SEM层。SEM旨在捕捉每一帧的空域特征。
- 与poseformer中采用Transformer作为SEM的骨干网络不同,poseformer的SEM在单帧中整合所有节点的信息,自注意力操作使计算开销很大,在使用多帧作为输入的情况下限制了网络的可扩展性2。
- 故作者使用一个简单的MLP块作为主干网络来建立节点之间的空间关系。这种轻量级的设计允许网络以相同的计算预算容纳更多的帧。输入序列中的每个2D姿态被独立地发送到MLP块,其权重在所有帧中共享。
思考:为什么能用MLP替代transformer呢?我想是因为,poseformer里SEM用transformer主要是要利用其对不同骨骼点之间的联系进行建模,联系大的权重就大(详见我上一篇poseformer的博客介绍);同时MLP和transformer的拓扑结构很像,MLP的权重也能对应到transformer的权重,所以也能学到骨骼点之间的联系。
-
接下来,经初步编码的序列数据被送入到TEM。
- 由于每一帧2D关节点经初步编码以后,数据量很小,且考虑到视频帧率比较高(fps=50,Human3.6M数据集),太短时间内的帧高度相似,提取不到啥时序信息,所以我们最初输入的序列数据可以考虑长一点,比如论文提到的243frames。
- 既然是长序列了,那么TEM模块使用transformer就比较合适(能轻松学到远距依赖关系)而不用卷积操作。
卷积操作会引入inductive bias of locality。CNN的inductive bias应该是locality和spatial invariance,即空间相近的grid elements有联系而远的没有,和空间不变性(kernel权重共享)——来自知乎李rumor。
- 前一步SEM的输出相当于已经对每一帧进行了Embedding了,所以在输入到TEM时不需要进行嵌入了,直接补个位置嵌入就行。
- 前人的工作说明输入帧更多,3DHPE结果更好。现在的情况是,我们输入的帧长度很长,但是相邻帧高度相似。又考虑到我们使用transformer计算复杂度是 O ( N 2 ) O(N^{2}) O(N2)级,所以还真不能直接一股脑使用这么长的输入,于是作者想了个时序降采样的办法,对输入序列均匀下采样。这样可以容纳更大的跨度信息。
-
TEM的输入送入MOFA层。
- 原文说:TEM重在“理解”整个序列的时间依赖关系,而MOFA重在“聚合”多帧信息并给出当前帧的3Dpose推理。这个时候需要利用局部信息所以用到了卷积操作。
我不是太理解原为这段。反正我的感觉是,MOFA既然使聚合信息,CNN提取特征效果就挺好的,从小局部到大局部提取综合。当然transformer也不是不能用,但是没必要,没必要搞这么复杂。
- 然后作者的MOFA模块使用了Strided Transformer Encoder (STE,一种时序卷积和transformer结合使用的模型)作为backbone。
Loss Function
需要注意的是Fig1(b)图上,微调阶段的TEM层后有一个 L m u l t i p l e L_{multiple} Lmultiple,具体是在Fig3的TEM和FC之后。FC之后会输出序列每一帧对应的3Dpose,这里引入这个多帧损失L就是为了保证预测的3D序列pose与ground truth高度相似,这样后一步聚合才有效可靠。