GVHMR_原理与脚滑处理总结小trick

GVHMR 原理与脚滑处理总结

1. GVHMR 是什么?

GVHMR(Gravity-View Human Motion Recovery)用于从单目视频恢复人体的世界坐标运动,包括:

  • SMPL/SMPL-X 局部姿态;
  • 人体形状;
  • 相机坐标中的人体运动;
  • 与重力方向对齐的世界坐标运动;
  • 较稳定的全局轨迹。

论文:

GVHMR 的重点不是用物理公式模拟人体受力,而是利用重力建立一个稳定的竖直坐标系。

它是 gravity-aligned(重力对齐)的,而不是完整的 physics-based(物理动力学模拟)。


2. 为什么需要重力坐标?

普通人体恢复方法通常在相机坐标系中预测人体。如果相机发生俯仰、翻滚,即使人实际站直了,在相机坐标中也可能看起来是倾斜的。

此外,逐帧或自回归地预测全局运动时,旋转误差会不断累积:

text 复制代码
第 1 帧 → 第 2 帧 → 第 3 帧 → ...

最终可能出现:

  • 人体逐渐倾斜;
  • 重力方向漂移;
  • 全局位置不合理;
  • 脚在地面上滑动。

GVHMR 的思路是:

  1. 每一帧先构建一个重力对齐的 GV 坐标系;
  2. 在 GV 坐标系中预测人体姿态;
  3. 再把每帧姿态组合到统一的世界坐标系。

3. Gravity-View 坐标系如何构建?

GV 是 Gravity-View 的缩写,即"重力---视线坐标系"。

对于每一帧,定义:

  • 相机视线方向:v = 0, 0, 1ᵀ;
  • 世界重力方向在相机坐标中的表示:g_c。

重力方向可以由世界坐标经过相机旋转得到:

text 复制代码
g_c = R_w→c · g_w

其中 g_w 是世界坐标中的重力方向。

3.1 GV 三个坐标轴

GV 的 y 轴沿重力方向:

text 复制代码
y_GV = g_c / ‖g_c‖

GV 的 x 轴由重力方向和相机视线共同确定:

text 复制代码
x_GV = normalize(y_GV × v)

最后使用右手定则得到 z 轴:

text 复制代码
z_GV = x_GV × y_GV

从相机坐标到 GV 坐标的旋转矩阵为:

text 复制代码
R_c→GV = [ x_GVᵀ
           y_GVᵀ
           z_GVᵀ ]

人体在 GV 坐标中的朝向为:

text 复制代码
Γ_GV = R_c→GV · Γ_c

其中 Γ_c 是人体在相机坐标系中的朝向。

3.2 为什么还需要视线方向?

只知道重力,只能确定"上下方向",不能确定水平面内的朝向。人体仍然可以绕重力轴旋转任意角度。

因此:

  • 重力方向负责确定 y 轴,即上下;
  • 相机视线负责确定水平面内的 x、z 轴。

这样每一帧的 GV 坐标系就基本被唯一确定。


4. 如何恢复全局人体方向?

每一帧都有自己的 GV 坐标系。相机运动时,相邻帧的 GV 坐标系也会发生变化。

GVHMR 先计算相机到 GV 的旋转:

text 复制代码
R_c→GVᵗ = Γ_GVᵗ · (Γ_cᵗ)⁻¹

将相机视线变换到 GV 坐标:

text 复制代码
v_GVᵗ = R_c→GVᵗ · [0, 0, 1]ᵀ

再结合视觉里程计或陀螺仪提供的相机相对旋转,估计相邻 GV 坐标系之间的旋转。

关键约束是:

相邻 GV 坐标系之间的相对旋转只允许绕重力轴 y 旋转。

因此原来需要估计 3 个旋转自由度,现在主要只估计一个水平旋转角 Δφ:

text 复制代码
R_ΔGVᵗ = Rot_y(Δφᵗ)

以第一帧 GV₀ 作为世界坐标参考:

text 复制代码
Γ_wᵗ = (R_ΔGV¹ · R_ΔGV² · ... · R_ΔGVᵗ) · Γ_GVᵗ

因为这些相对旋转都绕重力轴,所以重力方向不会像普通自回归方法那样不断漂移。


5. 全局平移如何恢复?

网络预测人体根部在 SMPL 局部坐标系中的速度 v_rootᵗ。

先转换到世界坐标:

text 复制代码
Δτ_wᵗ = Γ_wᵗ · v_rootᵗ

再累加得到全局平移:

text 复制代码
τ_wᵗ = τ_w⁰ + ∑ᵢ₌₀ᵗ⁻¹ Γ_wⁱ · v_rootⁱ

这是一种"局部速度预测 + 世界坐标累加"的轨迹恢复方式。


6. 网络输入和输出

输入

  • 人体检测框;
  • 2D 关键点;
  • 图像特征;
  • 相机相对旋转或角速度。

网络结构

输入特征被融合为逐帧 token,然后使用带 RoPE 的 Relative Transformer 建模时间关系。

输出

  • SMPL 局部姿态;
  • 人体形状;
  • 相机坐标人体朝向 Γ_c;
  • GV 坐标人体朝向 Γ_GV;
  • 根部局部速度;
  • 手、脚等关节的静止概率;
  • 相机参数。

7. GVHMR 如何解决脚滑?

脚滑处理主要分成两层:

  1. 根据静止关节修正全局平移;
  2. 使用逆运动学调整腿部姿态。

8. 第一步:预测静止关节

模型会预测一些关节的静止概率,主要包括:

  • 左右脚踝;
  • 左右脚尖;
  • 左右手腕。

如果某只脚处于支撑状态,那么它在世界坐标中的位置应该近似不变:

text 复制代码
j_footᵗ⁺¹ ≈ j_footᵗ

模型并不是假设脚永远不动,而是逐帧判断某个关节当前是否处于"接触/静止"状态。


9. 为什么静止关节要进行概率加权?

相邻帧中,第 j 个关节的位移为:

text 复制代码
Δjⱼ = jⱼᵗ⁺¹ − jⱼᵗ

所有静止关节共同估计人体的漂移量:

text 复制代码
Δc = ∑ⱼ wⱼ Δjⱼ

其中 wⱼ 由静止概率决定。

9.1 判断真正接触地面的脚

例如:

  • 左脚静止概率为 0.95;
  • 右脚静止概率为 0.10。

那么左脚应成为主要约束,右脚不应该明显影响平移修正。

9.2 避免硬切换带来的抖动

如果使用硬阈值:

text 复制代码
静止 → 权重 1
运动 → 权重 0

脚刚开始迈步时,约束会突然消失,人体轨迹容易跳变。

概率加权可以实现软切换:

text 复制代码
p = 0.95:强约束
p = 0.60:中等约束
p = 0.05:几乎不约束

9.3 多个接触点提高鲁棒性

如果两只脚都静止,可以共同估计漂移量。某一个脚踝预测不准时,其他静止关节仍然可以提供约束。

因此,概率加权本质上是"软接触约束":

不强行规定脚一定不能动,而是根据静止预测的置信度决定约束强度。


10. 第二步:修正整体平移

如果脚被判断为静止,但预测结果显示它向前移动了 2 cm,那么这 2 cm 很可能是全局轨迹误差。

GVHMR 会把后续人体平移反向修正:

text 复制代码
τ′ₖ = τₖ − Δc,    k ≥ t + 1

这一步解决的是:

整个人带着脚一起滑动。


11. 什么是循环坐标下降 IK?

CCD IK 是 Cyclic Coordinate Descent,中文通常译为"循环坐标下降逆运动学"。

逆运动学的目标是:

已知脚应该到达的位置,反过来求髋、膝、踝等关节应该如何旋转。

以左腿为例:

text 复制代码
髋关节 → 膝盖 → 脚踝 → 脚

如果脚当前的位置为 p,目标位置为 p*,CCD 会从脚的上游关节开始逐级调整。

CCD 的基本流程

  1. 选择脚踝;
  2. 旋转脚踝,使脚更靠近目标点;
  3. 选择膝盖;
  4. 旋转膝盖,使脚继续靠近目标点;
  5. 选择髋部;
  6. 重复若干轮,直到误差足够小或达到最大迭代次数。

对于当前关节 q,构造:

text 复制代码
a = p − q
b = p* − q

然后旋转当前关节,使向量 a 尽量对齐向量 b。

旋转轴大致由:

text 复制代码
a × b

决定,旋转角度由 a、b 的夹角决定。


12. CCD IK 在 GVHMR 中的作用

整体平移修正之后,脚的位置可能已经接近地面,但腿部姿态仍然不匹配。

例如:

  • 脚位置正确;
  • 但膝盖方向不自然;
  • 或者脚踝没有准确落在接触点。

GVHMR 将修正后的脚位置作为 IK 目标,再调整:

  • 髋关节;
  • 膝关节;
  • 踝关节。

这一步解决的是:

身体轨迹已经修正,但骨骼姿态没有配合的问题。

IK 不会改变骨骼长度,只改变关节旋转,因此比直接修改脚的位置更合理。


13. 为什么还要传播脚的目标位置?

如果第 t 帧脚是静止的,那么下一帧不应该完全重新计算一个新的脚目标。

GVHMR 会根据静止概率混合上一帧目标和当前预测:

text 复制代码
j_targetᵗ = pᵗ · j_targetᵗ⁻¹ + (1 − pᵗ) · j_predᵗ

含义是:

  • pᵗ 高:继续保持原来的接触点;
  • pᵗ 低:允许脚跟随人体运动。

因此,脚在支撑阶段保持固定,在迈步阶段可以自然移动。


14. 一个简单例子

假设:

  • 右脚踩在地面上;
  • 左脚正在向前迈步。

模型预测:

  • 右脚静止概率高;
  • 左脚静止概率低。

GVHMR 会:

  1. 主要使用右脚估计人体漂移;
  2. 反向修正全局平移;
  3. 保持右脚目标点不动;
  4. 用 IK 调整右腿;
  5. 允许左脚继续向前运动。

因此不会把正在迈步的左脚错误地固定在地面上。


15. 方法的优点和局限

优点

  • 能显著减少支撑脚滑动;
  • 不需要显式物理仿真;
  • 不改变人体骨骼长度;
  • 通过软概率约束实现平滑的接触切换;
  • CCD IK 计算速度快,适合后处理。

局限

  • 依赖静止概率预测是否准确;
  • 脚被遮挡或接触状态不清晰时容易误判;
  • CCD 是局部贪心算法,可能产生不自然的膝盖方向;
  • 它没有显式建模摩擦力、碰撞和地面反作用力;
  • 不能保证完全符合真实动力学。

16. 总结

GVHMR 的脚滑处理可以概括为:

text 复制代码
预测静止概率
      ↓
选择高置信度接触脚
      ↓
根据静止脚的位移修正全局平移
      ↓
把脚的位置作为 IK 目标
      ↓
用 CCD 调整髋、膝、踝关节
      ↓
得到更稳定的支撑脚和全局轨迹

最核心的区别是:

  • 概率加权决定"哪些脚应该被固定、固定程度多大";
  • 全局平移修正解决"整个人的轨迹在滑";
  • CCD IK 解决"脚固定后,腿部姿态不匹配"。
相关推荐
Huanzhi_Lin2 个月前
spine相关概念
spine·slots·ik·animations·bones·skins·skeleton
INFINI Labs3 个月前
Easysearch analysis-ik 多词典性能优化:从性能回退到分词性能提升 25%~30%
elasticsearch·性能优化·分词·performance·easysearch·ik
晴夏。3 个月前
UE 常见IK算法
ue·ik
WongLeer5 个月前
Elasticsearch 从入门到实战(含 IK 分词器 + 完整查询示例)
elasticsearch·中文分词·ik
paradoxjun8 个月前
训练一个通用且高效的YOLO-pose人体关键点检测模型
目标检测·计算机视觉·人体姿态估计·人体关键点检测·yolo-pose
v_JULY_v10 个月前
GVHMR——基于重力-视角坐标的人体运动恢复:从RGB视频中提取人的SMPL轨迹(包含人体姿态估计WHAM、手势估计HaMeR的详解)
hmr·基于世界坐标系的人体运动恢复·gvhmr·人体姿态估计wham·手势估计hamer
maki0771 年前
VR大空间资料 02 —— 常用Body IK对比
android·游戏引擎·vr·虚幻·pico·ik
郝开1 年前
ElasticSearch 分词器介绍及测试:Standard(标准分词器)、English(英文分词器)、Chinese(中文分词器)、IK(IK 分词器)
elasticsearch·中文分词·ik·ik analyzer
郝开1 年前
安装IK分词器;IK分词器配置扩展词库:配置扩展字典-扩展词,配置扩展停止词字典-停用词
运维·elasticsearch·jenkins·ik·ik analyzer