BEV和OCC学习-3:mmdet3d 坐标系

目录

坐标系

[转向角 (yaw) 的定义](#转向角 (yaw) 的定义)

框尺寸的定义

与支持的数据集的原始坐标系的关系

KITTI

Waymo

NuScenes

Lyft

ScanNet

[SUN RGB-D](#SUN RGB-D)

S3DIS


坐标系

坐标系 --- MMDetection3D 1.4.0 文档https://mmdetection3d.readthedocs.io/zh-cn/latest/user_guides/coord_sys_tutorial.html

  • 相机坐标系 -- 大多数相机的坐标系,在该坐标系中 y 轴正方向指向地面,x 轴正方向指向右侧,z 轴正方向指向前方。
  • 激光雷达坐标系 -- 众多激光雷达的坐标系,在该坐标系中 z 轴负方向指向地面,x 轴正方向指向前方,y 轴正方向指向左侧。
  • 深度坐标系 -- VoteNet、H3DNet 等模型使用的坐标系,在该坐标系中 z 轴负方向指向地面,x 轴正方向指向右侧,y 轴正方向指向前方。

三个坐标系的图示如下:

上面三张图是 3D 坐标系,下面三张图是鸟瞰图。以后我们将坚持使用本教程中定义的三个坐标系。

转向角 (yaw) 的定义

在目标检测中,我们选择一个轴作为重力轴,并在垂直于重力轴的平面 \\Pi 上选取一个参考方向,那么参考方向的转向角为 0,在上的其他方向有非零的转向角,其角度取决于其与参考方向的角度。目前,对于所有支持的数据集,标注不包括俯仰角 (pitch) 和滚动角 (roll),这意味着我们在预测框和计算框之间的重叠时只需考虑转向角 (yaw)。

在 MMDetection3D 中,所有坐标系都是右手坐标系,这意味着如果从重力轴的负方向(轴的正方向指向人眼)看,转向角 (yaw) 沿着逆时针方向增加。

下图显示,在右手坐标系中,如果我们设定 x 轴正方向为参考方向,那么 y 轴正方向的转向角 (yaw) 为

复制代码
                     z 上  y 前 (yaw=0.5*pi)
                      ^    ^
                      |   /
                      |  /
                      | /
                      |/
左 (yaw=pi)    ------ 0 ------> x 右 (yaw=0)

对于一个框来说,其转向角 (yaw) 的值等于其方向减去一个参考方向。在 MMDetection3D 的所有三个坐标系中,参考方向总是 x 轴的正方向,而如果一个框的转向角 (yaw) 为 0,则其方向被定义为与 x 轴平行。框的转向角 (yaw) 的定义如下图所示。

复制代码
  y 前
  ^      框的方向 (yaw=0.5*pi)
 /|\        ^
  |        /|\
  |     ____|____
  |    |    |    |
  |    |    |    |
__|____|____|____|______\ x 右
  |    |    |    |      /
  |    |    |    |
  |    |____|____|
  |

框尺寸的定义

框尺寸的定义与转向角 (yaw) 的定义是分不开的。在上一节中,我们提到如果一个框的转向角 (yaw) 为 0,它的方向就被定义为与 x 轴平行。那么自然地,一个框对应于 x 轴的尺寸应该是 dx。但是,这在某些数据集中并非总是如此(我们稍后会解决这个问题)。

下图展示了 x 轴和,y 轴和 对应的含义。

复制代码
y 前
  ^      框的方向 (yaw=0.5*pi)
 /|\        ^
  |        /|\
  |     ____|____
  |    |    |    |
  |    |    |    | dx
__|____|____|____|______\ x 右
  |    |    |    |      /
  |    |    |    |
  |    |____|____|
  |         dy

注意框的方向总是和 边平行。

复制代码
y 前
  ^     _________
 /|\   |    |    |
  |    |    |    |
  |    |    |    | dy
  |    |____|____|____\  框的方向 (yaw=0)
  |    |    |    |    /
__|____|____|____|_________\ x 右
  |    |    |    |         /
  |    |____|____|
  |         dx
  |

与支持的数据集的原始坐标系的关系

KITTI

KITTI数据集的原始标注是在相机坐标系下的,详见 get_label_anno。在 MMDetection3D 中,为了在 KITTI 数据集上训练基于激光雷达的模型,首先将数据从相机坐标系转换到激光雷达坐标,详见 get_ann_info。对于训练基于视觉的模型,数据保持在相机坐标系不变。

在 SECOND 中,框的激光雷达坐标系定义如下(鸟瞰图):

对于每个框来说,尺寸为 (w, l, h),转向角 (yaw) 的参考方向为 y 轴正方向。更多细节请参考代码库

我们的激光雷达坐标系有两处改变:

  • 转向角 (yaw) 被定义为右手而非左手,从而保持一致性;

  • 框的尺寸为 (l, w, h) 而非 (w, l, h),由于在 KITTI 数据集中 w 对应 dyl 对应 dx

Waymo

我们使用 Waymo 数据集的 KITTI 格式数据。因此,在我们的实现中 KITTI 和 Waymo 也共用相同的坐标系。

NuScenes

NuScenes 提供了一个评估工具包,其中每个框都被包装成一个 Box 实例。Box 的坐标系不同于我们的激光雷达坐标系,在 Box 坐标系中,前两个表示框尺寸的元素分别对应 (dy, dx) 或者 (w, l),和我们的表示方法相反。更多细节请参考 NuScenes 教程。读者可以参考 NuScenes 开发工具,了解 NuScenes 框 的定义和 NuScenes 评估的过程。

Lyft

就涉及坐标系而言,Lyft 和 NuScenes 共用相同的数据格式。请参考官方网站获取更多信息。

ScanNet

ScanNet 的原始数据不是点云而是网格,需要在我们的深度坐标系下进行采样得到点云数据。对于 ScanNet 检测任务,框的标注是轴对齐的,并且转向角 (yaw) 始终是 0。因此,我们的深度坐标系中转向角 (yaw) 的方向对 ScanNet 没有影响。

SUN RGB-D

SUN RGB-D 的原始数据不是点云而是 RGB-D 图像。我们通过反投影,可以得到每张图像对应的点云,其在我们的深度坐标系下。但是,数据集的标注并不在我们的系统中,所以需要进行转换。

将原始标注转换为我们的深度坐标系下的标注的转换过程请参考 sunrgbd_data_utils.py

S3DIS

在我们的实现中,S3DIS 与 ScanNet 共用相同的坐标系。然而 S3DIS 是一个仅限于分割任务的数据集,因此没有标注是坐标系敏感的。

相关推荐
Tian_Hang21 小时前
eclipse ditto 学习笔记
运维·服务器·开发语言·javascript·3d
AI视觉网奇1 天前
BambuStudio 编译实战 2026
3d
AI前沿资讯1 天前
AI3D角色生产如何减少返工?用 V2Fun 前移建模与动画流程
人工智能·3d
蓝速科技1 天前
蓝速科技视觉 3D 全息舱 AI 数字人一体机带灯与无灯款深度评测
人工智能·科技·3d
尘中远1 天前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图
林恒smileZAZ2 天前
Three.js 3D 地图特效与材质实现指南
javascript·3d·材质
蓝速科技2 天前
蓝速科技 3D 全息舱 AI 数字人博物馆导览效果实录
人工智能·科技·3d
lauo2 天前
【案例】每天省5小时:ibbot手机文章中心-采集到自动发布-工作流(agent)
人工智能·microsoft·3d·智能手机
chaoyuanl2 天前
沉浸式飞行影院进场安装前期筹备事项
大数据·科技·3d·xr·娱乐
探物 AI19 天前
【3D·感知】从PointNet到PointPillars:如何让自动驾驶汽车“实时“看见3D世界?
3d·自动驾驶·汽车