论文重要信息摘选与理解:MotionBERT: A Unified Perspective on Learning Human Motion Representations
龟速更新ing…
MotionBERT
Abstract
- 作者基于大规模和异构的数据资源,提出了一个统一的方法来学习人体运动表示,进而处理各种以人类为中心的视频任务。
- 作者也使用了预训练。在这个预训练阶段,训练了一个motion encoder(作者命名为DSTformer),使得其能从含噪声的2D观测恢复3D运动,并且这样的encoder输出的运动表征包含了人体运动的几何,运动学和物理知识多种信息,因此可以轻易转移到多个下游任务。
Introduction
-
感知和理解人类活动一直以来都是机器智能的一个核心追求。为此,研究人员定义了各种任务来从视频中估计以人为中心的语义标签,例如:骨架关键点,动作类别和(人体的surface meshes)表面网格。
-
虽然这些任务中的每一个都取得了显著的进展,但它们往往被区分开来,单独地进行建模,而不是作为相互关联的问题。例如:ST-GCN网络在3D HPE 和 action recognition两个任务上都被用于建模人体关节点的时空关系,但是这两个任务之间的联系没有被进一步探索。
-
直觉上,这些任务的模型都应该学会识别典型的人体运动模式(human motion patterns),尽管它们是针对不同的问题设计的。目前的方法未能跨任务挖掘和利用这种共性。理想情况下,可以开发一种统一的以人类为中心的视频表征,进而可以被多种相关任务所共享。
-
上述想法的难点:the heterogeneity of available data resources(异质化的数据资源)
- Motion capture systems:提供基于标记点(markers)和传感器(sensors)获取的高保真三维运动数据,但采集到的视频的(场景)外观通常受限于简单的室内场景。
- Action recognition datasets:提供了多种动作的语义角度的标注,但这些标注要么没有人体姿态标签,要么包含的都是些日常活动中受限运动的特征。
这里的细节可以看原文里对应的引用文献,我目前的理解是:没有“human pose labels”可能指的是那种关节点&骨架标注,“feature limited motion of daily activities”就是指一些很常见且简单的动作。
- in-the-wild human videos:既然是“wild”,那必然会有广泛而多样的外观和运动形式。
同时我们要考虑到,获取精确的2D姿态标注需要付出相当大的努力,获取3D关节点位置的ground truth更几乎是不可能的。由于上述这些数据集的分裂性,异质性,导致目前现有的研究大多都是针对特定任务,使用单一类型的human motion data,并未能有效利用其他类型的数据集。
-
于是,作者提供了一种学习人体运动表征的新思路/角度:通过统一的方式(a unified manner)从异构的数据资源中学习一个通用的人体运动表征,并利用该表征以统一的方式处理不同的下游任务。框架如下图:
- 预训练阶段【我觉着这个思路和22年的P-STMO很像】:
- 从各种源视频数据作2D姿态估计,得到2D骨架序列,然后破坏这些骨架数据(随机mask和noises)。
- 然后训练一个motion encoder从上述损坏的2Dskeletons来恢复3D运动。encoder的具体形式为作者提出的DSTformer,一种双码流时空transformer。
- 预训练事实上是一种pretext task1,需要encoder完成:
- 从序列数据推测潜在的三维人体结构
- 恢复错误和缺失的观测值
- 通过这种方式,motion encoder隐式地捕获了关节联动、解剖约束(anatomical constraints)和时间动态等人体运动常识。作者假设学习到的这些运动表征可以在下游的不同任务中共享且有利于得到更好的性能。
- 微调阶段:
- 预训练好的模型,可以针对具体的下游任务,采用特定的训练数据和supervisory signals with a simple regression head来微调。
- 作者的三大贡献:
- 提供了一个新的视角,通过学习人体运动表示的共享框架来解决各种以人体为中心的视频任务。
- 提出了一种预训练方法来利用大规模&异构的人体运动数据资源并学习可泛化的人体运动表示。作者的方法可以同时利用3D mocap数据的精确性和in-the-wild RGB视频的多样性。
- 设计了一种级联时空自注意力模块的双流Transformer网络,该网络可以作为人体运动建模的通用骨干。
Related Work
Learning Human Motion Representations
- 隐马尔可夫模型(Hidden Markov Models)+图形模型(graphical models)来描述人体运动。
- a temporal encoder and a hallucinator 来学习三维人体运动表征
- predict future 3D dynamics in a self-supervised manner
- incorporate action labels with an action memory bank
从动作识别角度来看, 多种多样的pretext tasks以自监督的方式被设计,用于学习运动表征,包括:
- future prediction, jigsaw puzzle, skeleton-contrastive, speed change, cross-view consistency, and contrast-reconstruction.
- 上述这些方法利用同质的运动数据,设计相应的前导任务,并将其应用于特定的下游任务。因此,作者提出了一个统一的预训练-微调整框架(相当于也是设计了前导任务),来整合异构数据资源,并分别可以应用于多种下游任务。
3D Human Pose Estimation
- 从单目RGB视频中恢复 3D HP,方法大致分为两类:
- 直接法:直接利用CNN从图像中估计3D姿态
there is a trade-off between 3D pose precision and appearance diversity due to current data collection techniques.没太懂appearance diversity说的是什么
- 2D-3D提升方法:提升可以使用FCN、TCN、GCN、Transformer方法。
作者的方法属于第二类,提升使用DSTformer(说白了也属于Transformer)
Skeleton-based Action Recognition
- 早些的开创性工作指出了动作识别和人体姿态估计的内在联系
- 早期对于人体关节点的时间-空间关系建模,多采用LSTM和GCN
- 近期:
- PoseConv3D应用3D-CNN于堆叠的二维关节点热图
- In addition to the fully-supervised action recognition task, NTU-RGB+D120 brings attention to the challenging one-shot action recognition problem.
- To this end, SL-DML applies deep metric learning to multi-modal signals.
作者证明了预训练的运动表征可以很好地泛化到动作识别任务中,并且预训练-微调整框架是解决一次性挑战的合适方案。
Human Mesh Recovery
- 基于SMPL模型,很多方法专注于从单幅图像回归出人体mesh。尽管这些方法的每帧结果都很好,但当应用于视频时,会产生抖动和不稳定
- 为提高时序一致性,Pose BERT和Smooth Net提出在单帧预测中使用去噪和平滑模块
- 一些工作将视频片段作为输入来利用时间线索。
- 另一个常见的问题是成对图像和GT网格大多是在约束场景中捕获的,这限制了上述方法的泛化能力。
作者的方法是对SOTA人体mesh恢复方法的补充,并且进一步提高mesh与预训练运动表征的时间一致性。
Method
Overview
- 包含统一的预训练(unified pretraining)和特定任务微调(task-specific finetuning)。
- 2D骨架作为上述两个阶段的输入,因为其可以可靠地从各种运动源数据中提取,并且对各种变化鲁棒性更强。
Network Architecture
上述Fig2是对2D-to-3D lifting部分的网络框架描述,以DSTformer作为backbone。下面将按图示顺序进行粗略解读:
- T表示序列长度,J表示人体的关节点数目,C表示channel数目
- 2D骨架序列作为输入: x ∈ R T × J × C i n \mathrm{x} \in \mathbb{R}^{T\times J \times C_{in}} x∈RT×J×Cin
- 将 x \mathrm{x} x映射到高维度,则 F 0 ∈ R T × J × C f \mathrm{F^{0}} \in \mathbb{R}^{T\times J \times C_{f}} F0∈RT×J×Cf。然后加上可学习的空间位置编码 P p o s S ∈ R 1 × J × C f \mathrm{P^{S}_{pos}} \in \mathbb{R}^{1 \times J \times C_{f}} PposS∈R1×J×Cf与时间位置编码 P p o s T ∈ R T × 1 × C f \mathrm{P^{T}_{pos}} \in \mathbb{R}^{T \times 1 \times C_{f}} PposT∈RT×1×Cf
- 使用Seq2Seq模型DSTformer,计算出结果 F i ∈ R T × J × C f ( i = 1 , 2 , . . . , N ) \mathrm{F^{i}} \in \mathbb{R}^{T \times J \times C_{f}}(i = 1,2,...,N) Fi∈RT×J×Cf(i=1,2,...,N)。N为DSTformer堆叠的深度。
- F N \mathrm{F}^N FN经一个tanh激活的线性层,计算得到运动表征 E ∈ R T × J × C e \mathrm{E} \in \mathbb{R}^{T \times J \times C_{e}} E∈RT×J×Ce。
- E \mathrm{E} E再经过一个线性层,计算得到3D运动估计 X ^ ∈ R T × J × C o u t \mathrm{\hat{X}} \in \mathbb{R}^{T \times J \times C_{out}} X^∈RT×J×Cout。
- 下面详细介绍DSTformer。
-
Spatial Block( S \mathcal{S} S)
- Spatial Multi-Head Self-Attention(S-MHSA)用于在相同时间点内,对关节点的关系进行建模。
- S − M H S A ( Q S , K S , V S ) = [ h e a d 1 ; . . . ; h e a d h ] W S P S-MHSA(Q_S,K_S,V_S) = [head_1; ...; head_h]W^{P}_S S−MHSA(QS,KS,VS)=[head1;...;headh]WSP
- h e a d i = s o f t m a x ( Q S i ( K S i ) ′ d k ) V S i head_i = softmax(\frac{\mathbf{Q_S^i (K_S^{i})^{'}}}{\sqrt{d_{k}}})\mathbf{V_S^i} headi=softmax(dkQSi(KSi)′)VSi
- F S ∈ R J × C e F_S \in \mathbb{R}^{J \times C_{e}} FS∈RJ×Ce是每一帧的空间特征输入, Q S , K S , V S Q_S,K_S,V_S QS,KS,VS由其计算而来: Q S i = F S W S ( Q , i ) , K S i = F S W S ( K , i ) , V S i = F S W S ( V , i ) Q_S^i = F_S W_S^{(Q,i)}, K_S^i = F_S W_S^{(K,i)}, V_S^i = F_S W_S^{(V,i)} QSi=FSWS(Q,i),KSi=FSWS(K,i),VSi=FSWS(V,i)
- 前述S-MHSA计算结束后,紧接着是残差连接与层归一化(LayerNorm),然后再将结果送到一个多层感知机(MLP),计算得到的结果再进行残差连接与层归一化
就如transform论文原文中的架构一样。
-
Temporal Block( T \mathcal{T} T)
- Temporal Multi-Head Self-Attention(T-MHSA)对不同时刻(帧)之间关节点的关系进行建模。
- 计算式完全类比于Spatial Block。注意该block针对的是 F S ∈ R T × C e F_S \in \mathbb{R}^{T \times C_{e}} FS∈RT×Ce
-
Dual-stream Spatio-temporal Transformer
- 作者的这种双流架构有作出了以下三种假设:
- 两个流都应该能综合地建模时空上下文。
- 每条流专门从事不同的时空方面。
- 将两个流融合在一起,融合权重根据输入的时空特征动态平衡。
- 架构上看,作者将空间和时间MHSA块按照不同的顺序进行堆叠,形成两个并行计算分支。两个分支的输出特征使用注意力回归器预测的自适应权重(adaptive weights predicted by an attention regressor)进行融合。
- 结合图示,则描述公式如下:
F
i
=
α
S
T
i
◯
T
1
i
(
S
1
i
(
F
i
−
1
)
)
+
α
T
S
i
◯
S
2
i
(
T
2
i
(
F
i
−
1
)
)
,
i
∈
1
,
2
,
.
.
.
,
N
F^i = \alpha_{ST}^{i}\bigcirc \mathcal{T}_1^i ( \mathcal{S}_1^i (F^{i-1})) + \alpha_{TS}^{i}\bigcirc \mathcal{S}_2^i ( \mathcal{T}_2^i (F^{i-1})), i \in 1,2,...,N
Fi=αSTi◯T1i(S1i(Fi−1))+αTSi◯S2i(T2i(Fi−1)),i∈1,2,...,N
- ◯ \bigcirc ◯表示哈达马积2。
- 不同的块之间不共享权重。
-
α
S
T
i
,
α
T
S
i
=
s
o
f
t
m
a
x
(
W
(
[
T
1
i
(
S
1
i
(
F
i
−
1
)
)
,
S
2
i
(
T
2
i
(
F
i
−
1
)
)
]
)
)
\alpha_{ST}^{i}, \alpha_{TS}^{i} = softmax(\mathcal{W}([ \mathcal{T}_1^i ( \mathcal{S}_1^i (F^{i-1})), \mathcal{S}_2^i ( \mathcal{T}_2^i (F^{i-1}))]))
αSTi,αTSi=softmax(W([T1i(S1i(Fi−1)),S2i(T2i(Fi−1))])),W是一可学的线性变换,“,”表示串联。
这里,公式右侧【】内两大部分,每一部分的维度是 T × J × C T\times J\times C T×J×C,则串联后为 2 T × J × C 2T\times J\times C 2T×J×C,经softmax后这 2 T × J × C 2T\times J\times C 2T×J×C个概率之和是1,把这堆概率对半分开,依旧分为两个 T × J × C T\times J\times C T×J×C的概率,赋值给两个 α \alpha α,这样的话这两个 α \alpha α就算是“权值”,使用哈达马积对数据进行加权。
- 作者的这种双流架构有作出了以下三种假设:
Unified Pretraining
-
如何用一个通用的前置任务来学到非常好的运动表征?
- 掩蔽部分输入,再将该掩蔽数据输入到一个编码后的表征(我觉得可以理解为一个encoder-decoder)来重建恢复整个原输入
- 上述这种任务能对应到“人体运动分析”,即从2D视觉观测中恢复丢失的深度信息
- 可参考P-STMO pre-training部分图示:https://blog.csdn.net/weixin_54144634/article/details/134351844
- 具体实施上:作者使用大规模3D mocap数据,先将其正投影,得到2D骨架序列,然后随机掩蔽&添加噪声来产生损坏的2D骨架序列,再使用前述的运动编码器(编码器输入的是破坏的2D序列吗?然后由该编码器的结果直接重建3D数据吗?是的话就和P-STMO的预训练部分是有区别的。这块需要看一下代码细节)得到运动表示E并重建3D运动 X ^ \hat{X} X^,计算其与groundtruth之间的关节损失 L 3 D \mathcal{L}_{3D} L3D, 速度损失 L O \mathcal{L}_{O} LO。
-
如何利用各种异质的人体运动数据?
- 注意到2D骨架能从各种源数据中提取到,所以它能作为一种通用媒介。
- 承接上条,则可以将wild RGB videos引入到2D-to-3D的框架中进行预训练,视频的2D骨架 x x x可以是人工标注or检测器检测出的。
- 这里针对wild RGB videos实际上运用的是半监督训练,类似于“3D human pose estimation in video with temporal convolutions and semi-supervised training”这篇文章Fig3的下半部分图示。
- 具体实现上: wild RGB videos使用现有detector提取2D骨架x(其深度通道本质上是"遮蔽"的),作者添加额外的掩膜和噪声来破坏x (如果x已经包含检测噪声,则只进行掩蔽处理)。由于没有3D运动GT,则应用一个加权的2D重投影损失 L 2 D \mathcal{L}_{2D} L2D
-
Total Pretraining Loss
Task-specific Finetuning
3D Pose Estimation
- 作者使用2D-to-3D方法作为前置任务,因此可以简单重用整个预训练网络。在微调过程中,输入的2D骨架由没有额外掩码或噪声的视频估计得到。
所以我的理解是:预训练过程输入破坏的2D骨架得到3D姿态估计,而针对于3DHPE这一下游任务的微调过程,由于和预训练过程“重复度极高”,故输入完整的2D骨架得到3D姿态估计。
Skeleton-based Action Recognition
暂略
Human Mesh Recovery
暂略
Experiments
Implementation
作者实现了深度N = 5,头数h = 8,特征尺寸Cf = 512,嵌入尺寸Ce = 512的运动编码器DSTformer。对于预训练,使用序列长度T = 243。预训练模型可以处理不同的输入长度,这得益于基于Transformer的主干。在微调过程中,将主干学习率设置为新层学习率的0.1 ×。
Pretext task:Pretext task也叫surrogate task,一种翻译为:代理任务。其好处就是简化了原任务的求解,在深度学习里就是避免了人工标记样本,实现无监督的语义提取,进一步理解为:对目标任务有帮助的辅助任务。而这种任务目前更多的用于所谓的Self-Supervised learning,即一种更加宽泛的无监督学习。(节选自知乎用户AngryCai的回答:ttps://www.zhihu.com/question/358468168) ↩︎
哈达马积定义为两个矩阵对应元素的乘积。element-wise product = element-wise multiplication = Hadamard product ↩︎