You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

深度学习3D骨骼数据归一化遇旋转矩阵问题,求技术建议

3D动作捕捉骨骼数据归一化问题与优化建议

问题背景

训练深度学习模型时,3D动作捕捉数据作为输入导致模型损失过高,需要通过归一化调整数据分布,提升模型效果。

当前归一化方案

  • 将左脚底设为原点:所有关节点(x, y, z)减去左脚底点坐标(x_ls, y_ls, z_ls)
  • 骨骼高度归一化到1:所有关节点的y轴值除以头部点的y值
  • 计算腰线与X轴夹角:取左腰与右腰的连线作为腰线,计算该线段与腰线中点处平行X轴线段的夹角θ
  • 绕Y轴旋转对齐腰线到X轴:计划通过旋转矩阵消除骨骼的绕高度轴旋转差异

遇到的旋转矩阵问题

原本预期使用绕Y轴(右手坐标系,X轴右侧值大于左侧)的旋转矩阵:

[[cos_theta, 0, -sin_theta],
 [0, 1, 0],
 [sin_theta, 0, cos_theta]]

但实际使用后骨骼出现严重失真;测试另一组旋转矩阵时,旋转效果符合绕高度轴的预期,但仍存在异常结果:

rotate_matrix =[[cos_theta, -sin_theta, 0], 
                [sin_theta, cos_theta, 0],
                [0, 0, 1]]

优化建议

1. 旋转矩阵的坐标系匹配修正

  • 确认右手定则下的绕Y轴旋转矩阵:从Y轴正方向向下看,逆时针旋转的标准矩阵应为:
    [[cosθ, 0, sinθ],
     [0, 1, 0],
     [-sinθ, 0, cosθ]]
    
    你最初使用的矩阵符号反转,会导致旋转方向错误,直接引发骨骼失真。
  • 规范腰线向量计算:用右腰坐标减左腰坐标得到腰线向量,再通过点积公式计算与X轴正方向的夹角θ,注意θ的符号(决定旋转方向),确保旋转后腰线能准确对齐X轴。

2. 归一化步骤顺序调整

建议调整流程为:旋转对齐 → 原点平移 → 高度归一化。先完成旋转消除姿态的全局旋转差异,再做平移和缩放,能避免旋转操作对后续归一化步骤的干扰。同时注意:高度归一化时要判断头部点y值是否为0或负数,避免除以0或坐标方向反转。

3. 异常结果排查

  • 单帧手动验证:取一帧原始数据,手动计算每一步归一化结果,对比代码输出,定位是旋转矩阵乘法顺序(行/列向量左乘/右乘)错误,还是关节点索引选反(如左腰、右腰点搞混)导致的问题。
  • 检查数据集关节定义:不同动作捕捉数据集的关节索引差异较大,确认左腰、右腰、左脚底、头部的点是否与你代码中使用的索引完全匹配。

其他3D骨骼归一化思路

  • 根节点基准归一化:以骨盆(根节点)为原点,计算所有关节相对于根节点的偏移,再用根节点到头部的距离统一缩放骨骼大小,适配多数人体姿态任务。
  • 骨骼长度比例归一化:计算大腿、手臂等关键骨骼的长度,取所有样本的平均长度为基准,对每个样本的关节坐标做缩放,保证人体比例一致。
  • 普氏分析对齐:将每一帧骨骼与标准T姿态骨骼做Procrustes分析,通过旋转、缩放、平移的最优组合对齐,消除全局变换差异,适合动作识别、姿态估计任务。
  • 局部坐标系归一化:为手臂、腿部等每个肢体建立局部坐标系,将关节坐标转换到局部空间,减少全局变换的影响,提升模型对局部动作特征的学习能力。

内容的提问来源于stack exchange,提问作者starlitsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:00:55