MotionBERT:人体运动表征学习的统一框架
在计算机视觉和人工智能领域,人体动作分析一直是一个核心研究课题。近年来,随着深度学习技术的发展,该领域取得了显著进展。然而,现有的研究往往将人体动作分析拆分为多个独立的子任务,如3D姿态估计、动作识别、网格重建等,缺乏一个统一的框架来捕捉人体运动的共性特征。为了解决这一问题,来自北京大学和上海人工智能实验室的研究团队提出了MotionBERT,这是一个用于人体运动表征学习的统一预训练框架。
统一预训练框架
MotionBERT的核心思想是通过预训练阶段学习通用的人体运动表征,然后将其迁移到多个下游任务。具体来说,该框架包括两个主要阶段:
-
预训练阶段:利用大规模异构的人体运动数据源,训练运动编码器从有噪声的2D骨架序列中恢复3D运动。这一任务本质上要求运动编码器:
- 从时序运动中推断出潜在的3D人体结构
- 修复错误和缺失的观测数据
-
微调阶段:将预训练的运动编码器与简单的回归头(1-2层)结合,针对特定的下游任务进行微调。
通过这种方式,MotionBERT可以学习到包含几何、运动学和物理知识的人体运动常识,并将其应用于多个下游任务。
网络架构设计
为了有效捕捉骨架关键点之间的长程时空关系,研究团队设计了一种新颖的双流时空Transformer(DSTformer)网络作为运动编码器。DSTformer由N个双流融合模块组成,每个模块包含两个分支:
- 空间分支:建模单个时间步内不同关节之间的连接关系
- 时间分支:建模单个关节的运动轨迹
通过交替进行空间和时间建模,DSTformer可以全面地捕捉人体运动的时空特征。
多源异构数据利用
MotionBERT的一个重要创新是能够充分利用多种类型的人体运动数据源,包括:
- 动作捕捉数据:提供高精度的3D运动数据,但场景受限
- 动作识别数据集:提供动作语义标注,但人体姿态标注有限
- 野外人体视频:大规模且场景丰富,但缺乏精确的3D标注
通过统一的预训练框架,MotionBERT可以同时利用这些异构数据源的优势,学习到更加通用和鲁棒的人体运动表征。
应用与性能
MotionBERT在多个下游任务上展现出优异的性能:
-
3D人体姿态估计:在Human3.6M数据集上达到37.2mm的MPJPE误差,优于现有方法。
-
基于骨架的动作识别:在NTU RGB+D数据集的跨主体设置下达到97.2%的Top-1准确率,跨视角设置下达到93.0%的准确率。
-
人体网格重建:在3DPW数据集上达到88.1mm的MPVE误差。
这些结果充分证明了MotionBERT学习到的运动表征具有很强的通用性和迁移能力。
实际应用
除了学术研究,MotionBERT还具有广阔的实际应用前景:
-
动作分析与评估:可用于运动员训练、康复治疗等场景,提供精确的动作分析和评估。
-
人机交互:为虚拟现实、增强现实等应用提供更自然的人体动作理解能力。
-
安防监控:在复杂场景下实现更准确的人体行为识别和异常检测。
-
计算机动画:为动画制作提供更加真实和丰富的人体运动数据。
开源与未来工作
为了推动相关研究的发展,研究团队已经在GitHub上开源了MotionBERT的PyTorch实现代码和预训练模型。未来,他们计划进一步完善预训练脚本和文档,并开发用于自定义视频的演示程序。
同时,研究团队也指出了一些值得进一步探索的方向:
-
扩展到更多下游任务,如人体运动预测、多人交互分析等。
-
探索将MotionBERT与其他模态(如图像、文本)结合的多模态学习方法。
-
进一步优化网络架构,提高计算效率和推理速度。
-
研究如何将学习到的人体运动知识迁移到机器人控制等相关领域。
总的来说,MotionBERT为人体运动分析提供了一个强大而灵活的统一框架,不仅在学术研究中取得了突破性进展,也为相关技术的实际应用开辟了新的可能性。随着进一步的发展和完善,它有望成为人体运动分析领域的基础性工作,推动相关技术向更高水平迈进。
如何使用MotionBERT
对于想要使用或进一步研究MotionBERT的研究者和开发者,以下是一些实用建议:
-
环境配置:
conda create -n motionbert python=3.7 anaconda conda activate motionbert conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia pip install -r requirements.txt
-
预训练模型下载: 研究团队提供了多个预训练模型,包括MotionBERT (162MB)和MotionBERT-Lite (61MB)。这些模型可以从OneDrive链接下载。
-
下游任务微调:
- 3D姿态估计: 参考
docs/pose3d.md
- 骨架动作识别: 参考
docs/action.md
- 网格重建: 参考
docs/mesh.md
- 3D姿态估计: 参考
-
自定义视频推理: 对于野外视频的处理,可以参考
docs/inference.md
。 -
使用MotionBERT提取人体运动表征:
# x: 2D骨架序列 [batch_size * frames * joints(17) * channels(3)] # MotionBERT: 预训练的人体运动编码器 E = MotionBERT.get_representation(x) # E: 编码后的运动表征 [batch_size * frames * joints(17) * channels(512)]
-
注意事项:
- 模型可以处理不同长度的输入序列(最多243帧)
- 默认使用17个身体关键点(H36M格式),如果使用其他格式需要进行转换
- 对于RGB视频,需要先提取2D姿态,然后转换关键点格式,最后输入MotionBERT
通过这些步骤,研究者和开发者可以快速上手MotionBERT,并将其应用到自己的项目中。无论是进行学术研究还是开发实际应用,MotionBERT都提供了一个强大而灵活的工具,为人体运动分析开辟了新的可能性。