SDG 合成数据 IADataSDG

三维包围盒检测:从引擎真值到 KITTI / COCO

需要 3D BBox 真值,或需向 KITTI / COCO 格式转换并了解各格式的信息损失。

2026-04-09 7 分钟阅读
文章目录11

三维包围盒检测:从引擎真值到 KITTI / COCO

概述

训练自动驾驶感知模型需要三维包围盒标注——不仅要知道「画面中哪里有车」,还需要物体在空间中的尺寸、距离与朝向。获取此类真值是仿真采集的核心价值之一:在真实世界中逐帧人工标注三维框成本极高且精度受限,而在引擎中所有几何信息天然可得。

IADataSDG 的检测管线直接从场景几何中提取方向包围盒(OBB),经相机投影产生精确的 2D / 3D 标注,并提供到 KITTI 与 COCO 等标准格式的离线转换。本文说明这条管线的设计思路、输出格式,以及两种标准格式各自的能力边界


检测真值的来源:几何,非检测器

与“先跑一个检测器,再把结果当标签”不同,仿真里的检测真值更像是从场景里直接把答案拿出来

用户只需要先说明哪些物体需要被检测、它们属于什么类别。接下来,系统会在每一帧里直接读取这些物体的几何信息,再把它们按当前相机的视角投到图像上。这里最关键的一点是,它用的是真正参与这一帧渲染的视图信息,而不是在别的线程里临时猜一个近似视角。这样做的意义,不只是“更精确”,更是为了尽量减少那种看起来只差一点、实际会在训练里不断累积的错位。

由于几何来自引擎本身、投影矩阵又与实际渲染帧对齐,这条路线能显著减少由游戏线程重建视图、轴对齐包围体或错帧引起的系统误差;但几何真值仍应通过重投影与可视化持续验证,而不能仅凭文件格式通过就认定“完全正确”。


格式通过不代表几何正确

三维框最容易出现一种“看上去一切正常”的错误:文件格式对了、字段也全了,但框就是和 RGB 里的目标对不上。原因通常不在某一个字段,而在于 2D 框、3D 尺寸、相机参数可能来自不同阶段,最后被硬拼成了一份表面合法的标注。

因此,IADataSDG 把Box3D JSON当作原生格式,而把 KITTI / COCO 看作兼容层。前者保留了更多适合核对几何的内容,后者则更适合接入已有工具链。更稳妥的做法,不是只看文件能不能被读进去,而是把下面两类检查放进日常验证里:

  • 将 3D 框重投影回 RGB,做叠加目检。
  • 对失败样本做 reprojection IoU 或等效几何一致性抽查,而不是只看校验器是否通过。

主输出:Box3D JSON

每帧、每相机生成一份 JSON 文件({camera}/labels/frame_*.json),这是精度最高且信息最完整的输出格式。

根级字段:

字段含义
frame帧编号
camera相机名
resolution[width, height]
objects目标数组

每个目标:

字段含义
type类别名(来自IA.Type.*标签)
distance_m目标到相机的距离(米)
truncated截断率 [0, 1],视口边缘裁剪程度
occluded遮挡等级(当前占位,固定 0)
bbox2d2D 包围框[left, top, right, bottom](像素)
dimensions_m三维尺寸[x, y, z](米)
edges_2d3D 框各条边的 2D 投影,每条为[x1, y1, x2, y2]
pivot_2d目标参考点(pivot)的 2D 投影[px, py]

edges_2d是区别于传统 2D BBox 标注的核心:它提供了投影后的完整三维框轮廓,可直接叠加在图像上做可视化,也可被训练管线直接消费。


KITTI 格式转换与限制

通过convert_labels.py --kitti可将 Box3D JSON 转为标准 KITTI 15 列格式:

type truncated occluded alpha left top right bottom h w l x y z rotation_y

转换过程中存在不可避免的信息损失

项目Box3D JSONKITTI 15 列说明
2D 框bbox2d直接可用直接映射无损
3D 尺寸dimensions_mh, w, l无损
3D 位置无世界坐标导出x, y, z由 pivot + 深度 + 内参推算近似值;无法恢复真实世界坐标
朝向无旋转导出rotation_y固定为 0占位;当前序列化器不导出世界系旋转角
观测角alphaatan2(x, z)推导取决于位置近似质量
遮挡occluded= 0(占位)透传均为占位
3D 边投影edges_2d(完整线段)不存在丢失——KITTI 没有此字段

核心限制:KITTI 格式要求相机坐标系下的精确 3D 位置与旋转角,而 Box3D 管线当前不导出世界系的location/rotation。KITTI 的x, y, z是由 2D pivot、距离与内参逆投影近似得到的,rotation_y为 0——这意味着KITTI 输出适合 2D 检测评估,但不适合直接用于 3D 位姿回归任务


COCO 格式转换与限制

通过convert_labels.py --coco生成标准 COCO Detection JSON:

json
{
  "images": [...],
  "annotations": [{"bbox": [x, y, w, h], "area": ..., "category_id": ...}],
  "categories": [...]
}

COCO 转换的限制更为直接:

项目状态
2D BBoxbbox2d转为 COCO[x, y, w, h]格式
类别映射自动从type建立 category ID
3D 信息全部丢失——COCO 标准不含 3D
分割掩码——COCO 的segmentation字段为空
截断 / 遮挡丢失——COCO 无对应字段

COCO 输出仅适合2D 目标检测评估(AP / AR 指标),不包含三维信息或实例分割掩码。


格式选择建议

                  ┌──────────────────┐
                  │   Box3D JSON     │  ← 精度最高、信息最全
                  │  edges_2d + 3D   │
                  └───────┬──────────┘
                    ┌─────┴─────┐
                    ▼           ▼
            ┌───────────┐ ┌──────────┐
            │   KITTI    │ │   COCO   │
            │ 15 列 TXT  │ │  JSON    │
            └───────────┘ └──────────┘
            3D 近似、旋转占位  仅 2D BBox
  • 如果训练管线可消费自定义 JSON:直接使用 Box3D JSON,可获得完整的 3D 框投影与尺寸信息。
  • 如果需要与 KITTI 基准对齐:使用 KITTI 转换,但需知晓 3D 位置为近似值、旋转角为占位。适合 2D 检测指标。
  • 如果需要与 COCO 工具链对接:使用 COCO 转换,但仅包含 2D 框信息。

与其他 SDG 工具对比

能力IADataSDGIsaac SimCARLA
3D BBox 精度引擎几何 OBB,渲染线程 VP 对齐引擎几何,相似精度引擎几何
投影线段 (edges_2d)支持,含近平面裁剪不输出投影线段不输出
KITTI 导出离线转换(15 列,位置近似)内置,但同样受格式限制内置
COCO 导出离线转换内置不内置
多相机一致性同帧共享 bounds 快照支持有限
编辑器标注工具Detection Tag Tool(批量、可撤销)GUI 标注无专用工具
遮挡分级占位(未实现真实遮挡计算)部分支持部分支持

在 AI 模型训练中的价值

  • 单目 3D 检测:FCOS3D、PGD、MonoDETR 等方法依赖带精确 3D 尺寸与距离的标注;人工在 2D 图像上回归 3D 框误差大,仿真几何真值可提供训练所需的无噪声监督。Box3D JSON 中的edges_2d还可训练基于投影线段的 3D 框回归网络,不受 KITTI 格式约束。
  • 多模态融合检测:BEVFusion、TransFusion 等将相机与 LiDAR 特征在 BEV 空间对齐;训练需要跨传感器的一致 3D 标注。仿真中所有传感器共享同一帧的 bounds 快照,确保融合真值无时间偏移。
  • 预训练与微调:合成 3D 标注量大且无标注成本,可用于检测模型的大规模预训练;在 nuScenes / Waymo 等真实数据上微调后,已有工作表明预训练阶段引入仿真数据可提升收敛速度与长尾类别精度。
  • 数据不平衡缓解:真实数据集中稀有类别(施工车辆、动物、轮椅等)样本极少;仿真可按需放置并自动标注,定向补充尾部类别的训练样本。
  • 标注质量基准:合成框精度为像素级,可作为标注工具校验或众包标注一致性评估的参照。

小结

IADataSDG 的 3D BBox 管线以引擎精确几何为真值来源,提供信息丰富的 Box3D JSON 作为原生输出,并支持到 KITTI 与 COCO 的离线转换。核心要点:

  • Box3D JSON 是推荐的首选格式,包含 3D 框投影线段、精确尺寸与距离。
  • KITTI 转换为有损近似:3D 位置由逆投影推导、旋转角为占位,适合 2D 评估而非 3D 位姿回归。
  • COCO 转换仅保留 2D BBox,不含三维信息或分割掩码。
  • 如需完整三维信息,建议直接消费 Box3D JSON 或等待后续对世界坐标导出的支持。

参考文献

[1] A. Geiger et al., "Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite,"CVPR, 2012.

[2] T.-Y. Lin et al., "Microsoft COCO: Common Objects in Context,"ECCV, 2014.

[3] T. Wang et al., "FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection,"ICCVW, 2021.

[4] T. Wang et al., "Probabilistic and Geometric Depth: Detecting Objects in Perspective,"CoRL, 2021.

[5] Z. Zhang et al., "MonoDETR: Depth-guided Transformer for Monocular 3D Object Detection,"ICCV, 2023.

[6] Z. Liu et al., "BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation,"ICRA, 2023.

[7] X. Bai et al., "TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers,"CVPR, 2022.

[8] H. Caesar et al., "nuScenes: A multimodal dataset for autonomous driving,"CVPR, 2020.