
EmbodiedScan中的9-DoF 3D框表示Euler旋转角与刚体变换背后的数学【免费下载链接】EmbodiedScan[CVPR 2024 NeurIPS 2024] EmbodiedScan: A Holistic Multi-Modal 3D Perception Suite Towards Embodied AI项目地址: https://gitcode.com/gh_mirrors/em/EmbodiedScan在三维目标检测与具身智能Embodied AI领域9-DoF 3D框表示正逐渐取代传统的 7-DoF 表示成为多模态 3D 感知的新标准。作为 CVPR 2024 的多模态 3D 感知套件EmbodiedScan 在 284 类 9-DoF 检测基准中全面采用「中心点 尺寸 三个欧拉角」的参数化方式。本文将以通俗易懂的方式拆解 9-DoF 框的数学本质——欧拉旋转角如何构造旋转矩阵、刚体变换矩阵又如何作用于每一个检测框帮助你真正读懂 EmbodiedScan 的代码实现。一、为什么需要 9-DoF 而非 7-DoF传统 3D 检测框如 KITTI、nuScenes 中的框通常用 7 个参数描述中心点 (x, y, z)、尺寸 (x_size, y_size, z_size) 以及一个绕 z 轴的偏航角 yaw。这种表示隐含了一个假设物体永远直立于地面只会水平旋转。但在真实世界中物体可能是倾斜的、倒放的甚至处于任意姿态。EmbodiedScan 面向的是自中心视角的复杂室内场景因此需要更一般的表示——9-DoF 3D框表示在 7-DoF 基础上把单一 yaw 角扩展为三个欧拉角 (alpha, beta, gamma)分别对应绕 Z、Y、X 轴的旋转总共 9 个自由度参数含义自由度x, y, z框中心坐标3x_size, y_size, z_size框的尺寸长宽高3alpha, beta, gamma三个欧拉旋转角3二、欧拉角如何变成旋转矩阵9-DoF 框最核心的数学问题是如何把三个欧拉角 (alpha, beta, gamma) 转成一个 3×3 的旋转矩阵 REmbodiedScan 依赖 PyTorch3D 的euler_angles_to_matrix函数并指定旋转顺序为ZXY先绕 Z 轴转 alpha再绕 X 轴转 beta最后绕 Y 轴转 gamma。三个基本旋转矩阵相乘就得到总的旋转矩阵R R_y(gamma) · R_x(beta) · R_z(alpha)其中每个基本旋转矩阵都是标准的三角函数形式例如绕 z 轴旋转 alpha 的矩阵为R_z(alpha) [cos(alpha) -sin(alpha) 0] [sin(alpha) cos(alpha) 0] [0 0 1]在代码层面这一过程封装在 utils.py 的rotation_3d_in_euler函数中它接收点云坐标和欧拉角返回旋转后的点rot_mat_T euler_angles_to_matrix(angles, ZXY) # 欧拉角 - 旋转矩阵 points_new torch.bmm(points, rot_mat_T) # 点云按旋转矩阵旋转三、从框参数到 8 个角点完整数学流程9-DoF 框的实际应用如计算 IoU、绘制可视化、计算损失几乎都从**角点corners**出发。EmbodiedScan 在 euler_box3d.py 的EulerInstance3DBoxes.get_corners中实现了完整流程本质上是三步刚体变换生成归一化角点在单位坐标系中生成 8 个角点形如 ±0.5 的组合再乘以尺寸得到未旋转的长方体旋转调用rotation_3d_in_euler用ZXY顺序的旋转矩阵把 8 个角点旋到目标姿态平移加上框中心坐标 (x, y, z)得到世界坐标系下的最终角点。这一生成 → 旋转 → 平移的流水线正是计算机图形学中**刚体变换Rigid Transformation**的标准范式先旋转后平移保持形状与大小不变。四、刚体变换矩阵把旋转和平移统一起来在 9-DoF 框的日常操作中数据增强、坐标系转换、可视化我们经常需要一次性完成旋转与平移。数学上这可以用 4×4 的齐次变换矩阵优雅表示T [R t] [0 1]其中 R 是 3×3 旋转矩阵t 是 3 维平移向量。EmbodiedScan 的EulerInstance3DBoxes.transform方法正是用这个矩阵统一处理框的变换先对中心点做完整变换再用matrix_to_euler_angleseuler_angles_to_matrix的逆运算把新旋转矩阵解析回三个欧拉角。rotate(angle)构造旋转矩阵并调用transform旋转框flip(direction)沿坐标轴镜像翻转同时巧妙地对欧拉角做变换如绕 X 翻转时alpha → -alpha πscale(scale_factor)直接缩放前 6 维中心与尺寸这些操作都定义在 euler_box3d.py 中配合EulerDepthInstance3DBoxes见 euler_depth_box3d.py形成完整的 9-DoF 框工具箱。五、9-DoF 框如何参与训练与推理理解了表示与变换的数学再看网络训练就一目了然了。EmbodiedScan 的 9-DoF 检测模型如 mv-det3d_8xb4_embodiedscan-3d-284class-9dof.py在FCAF3DHeadRotMat中回归 12 个输出9 个框参数加 3 个中心度并使用角点 Chamfer 距离损失chamfer_distance.py计算预测框与真实框的差异预测与真值框各自通过euler_angles_to_matrix生成旋转矩阵计算出 8 个角点坐标计算两组角点之间的双向最近邻距离Chamfer Distance作为损失。由于损失直接在角点空间度量即使预测的欧拉角有微小偏差也能通过角点距离平滑地反向传播——这正是 9-DoF 表示在训练稳定性上的关键设计。六、小结与进阶阅读9-DoF 3D框表示的本质是用「3 个欧拉角 旋转矩阵 刚体变换」的数学工具链描述物体在三维空间中的任意姿态。从rotation_3d_in_euler的矩阵构造到get_corners的角点流水线再到transform的齐次变换EmbodiedScan 把这套数学完整地落到了工程代码中。如果你想深入源码推荐按这个顺序阅读euler_box3d.py9-DoF 框的核心类与变换操作euler_depth_box3d.pyDepth 坐标系下的 9-DoF 框utils.pyrotation_3d_in_euler旋转实现chamfer_distance.py角点 Chamfer 损失mv-det3d_8xb4_embodiedscan-3d-284class-9dof.py9-DoF 检测完整配置掌握了欧拉角与刚体变换的数学你就能轻松读懂任何基于 9-DoF 框的 3D 感知代码也能更自信地复现和扩展 EmbodiedScan 的基线模型。希望这篇文章能成为你走进多模态 3D 感知世界的一块垫脚石【免费下载链接】EmbodiedScan[CVPR 2024 NeurIPS 2024] EmbodiedScan: A Holistic Multi-Modal 3D Perception Suite Towards Embodied AI项目地址: https://gitcode.com/gh_mirrors/em/EmbodiedScan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考