GVHMR(Gravity-View Human Motion Recovery)是一个从单目视频中获得世界坐标系下人体运动的深度学习系统。该方法发表于SIGGRAPH Asia 2024,通过引入重力-视角坐标系(Gravity-View Coordinates)这一创新性的坐标表示方法,有效解决了从视频中恢复具有物理意义的世界坐标系人体运动这一长期存在的技术挑战。

从单目视频中获得人体运动是计算机视觉和图形学领域的核心问题之一。传统方法通常只能恢复相机坐标系(Camera Coordinate)下的人体姿态,而无法直接获得世界坐标系(World Coordinate)下的运动信息。世界坐标系下的运动恢复具有重要的应用价值,包括:
世界坐标系人体运动恢复面临以下主要挑战:
GVHMR的核心创新在于引入重力-视角坐标系(GV坐标系)作为中间表示。该坐标系具有以下特点:
这种设计使得GV坐标系同时编码了重力信息和相机视角信息,为后续的世界坐标系恢复提供了关键约束。
系统实现了从相机坐标系到GV坐标系的转换:
# 核心转换函数(简化表示)
def get_R_c2gv(R_w2c, axis_gravity_in_w=[0, 0, -1]):
"""
计算从相机坐标系到GV坐标系的旋转矩阵
Args:
R_w2c: 世界到相机的旋转矩阵
axis_gravity_in_w: 世界坐标系中的重力方向
Returns:
R_c2gv: 相机到GV的旋转矩阵
"""
# Y轴 = 重力方向在相机坐标系中的表示
axis_y_of_gv = R_w2c @ axis_gravity_in_w
# X轴 = Y轴与相机Z轴的叉积
axis_x_of_gv = axis_y_of_gv.cross(axis_z_in_c)
# Z轴 = X轴与Y轴的叉积
axis_z_of_gv = axis_x_of_gv.cross(axis_y_of_gv)
# 构建旋转矩阵
R_gv2c = [axis_x_of_gv, axis_y_of_gv, axis_z_of_gv]
R_c2gv = R_gv2c.transpose()
return R_c2gvGVHMR通过以下步骤实现世界坐标系恢复:
GVHMR系统采用端到端的深度学习架构,主要包含以下模块:
输入视频
↓
预处理模块
├─ 人体检测与跟踪(YOLO)
├─ 2D姿态估计(ViTPose)
├─ 图像特征提取(ViT)
└─ 视觉里程计(SimpleVO/DPVO)
↓
GVHMR Pipeline
├─ 条件编码器
├─ Transformer编码器(RoPE)
├─ SMPL参数解码器
└─ 后处理模块
↓
输出
├─ 相机坐标系SMPL参数
└─ 世界坐标系SMPL参数GVHMR使用基于RoPE(Rotary Position Embedding)的Transformer编码器作为核心网络:
EnDecoder负责SMPL参数的归一化和反归一化:
GVHMR采用多任务损失函数,包括:
GVHMR支持两种视觉里程计方案:
视觉里程计用于估计相机角速度,这是世界坐标系恢复的关键输入。
系统包含两个重要的后处理步骤:
训练过程中采用多种数据增强技术:
GVHMR在多个数据集上联合训练:
系统在以下数据集上进行评估:
GVHMR适用于以下应用场景:
GVHMR通过引入重力-视角坐标系这一创新性的坐标表示方法,有效解决了从单目视频恢复世界坐标系人体运动的技术难题。该方法在保持端到端训练优势的同时,通过明确的物理约束和紧凑的中间表示,实现了高精度的人体运动恢复。系统在多个基准数据集上取得了优异的性能,为相关应用提供了可靠的技术基础。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。