同一批标注,两类消费方要的东西完全不一样。这一页先讲它们怕的东西为什么相反, 再看导出格式实际长什么样。
| 训练感知模型 | 规划直接消费 | |
|---|---|---|
| 怎么用 | 当成一批样本去做统计学习 | 当成"障碍物在哪"的即时输入 |
| 有平均吗 | ✅ 有。个别误差会被大批样本稀释 | ❌ 没有。这条数据直接进决策 |
| 怕什么 | 映射有矛盾 | 数值不对 |
一句话:训练关心映射有没有矛盾,规划关心数值对不对。
拿"框整体往右偏 10 厘米"这个偏差做例子,改一下它的性质,看结论怎么变。
| 偏差类型 | 对训练 | 对规划 |
|---|---|---|
| 随机噪声 | 轻微,可以平均掉 | 烦,但能靠保守策略吸收 |
| 均匀偏差 | ✅ 基本无害 | ❌ 最严重 |
| 非均匀偏差 | ❌ 有害,伤泛化 | ❌ 严重 |
| 不一致 | ❌ 最有害 | ❌ 严重 |
训练时: 场景 X → 标注 Y,整体偏了 10 厘米
模型学: X → Y
推理时: 场景 X' → 输出 Y',也整体偏 10 厘米
模型学到的映射是自洽的。长得一样的输入给同样偏的输出,没有矛盾。
打个比方:一把尺子的刻度整体印偏了一毫米。你量什么都会多一毫米, 但你量完之后减掉一毫米就对了。测量过程本身没错。
因为"越靠边越偏"是一个跟输入位置有关的形变,不是常数偏移。
模型本来只需学: 形状 → 形状
现在被迫多学: 位置 → 形变
而那个形变不是世界的规律,是标注错误。模型把标注错误当成了物理规律来学, 换一台相机就崩。它伤的是泛化。
障碍物位置平滑 正常
尺寸合理 正常
时序连续 正常
就是整体错了一个常数
规划永远不会发现所有东西都偏了十厘米,因为没有任何东西看起来不对。
而比这更麻烦的是:整体错一个常数,只有在跟另一个独立来源对比时才能发现。 它躲过了所有内部检查。
导出这一环承担三件事:合并、过滤、和交代清楚"这些数是怎么来的"。
其中第三件最容易被忽略。前面讲过,标注结果里混着两类东西:
| 来源 | 例子 | 错了会怎样 |
|---|---|---|
| 观测 | 宽度 1.82 米、距离 12.3 米 | 有噪声,可以查、可以修 |
| 先验 | 车长填的是 4.6 米,因为厂商目录这么写 | 静默。没有东西可查,因为它是假设 |
导出的训练集里,这两类东西长得一模一样。下游会拿一个假设当成一次测量去用。
不可见的部分用先验补,这一点可以接受,但要能被认出来它是先验。
否则下游默认"这个 4.6 是量出来的",而它其实是猜的。
最通用的导出格式是 COCO。它的结构很简单,一个 JSON 里有三个数组:
images 每张图的文件名、宽、高
annotations 每个标注的 bbox、类别 id、图片 id
categories 类别的 id 和名字
其中 bbox 是最容易踩坑的地方,它的约定是:
[x, y, width, height]
x, y 左上角的绝对像素坐标,原点在图像左上角
width 宽,像素
height 高,像素
注意:不是中心点,不是归一化,是【左上角加宽高】
一、把中心点当左上角。差半个宽高,整体偏移。
二、归一化。有人习惯 YOLO 那种 0 到 1 的写法,直接换过来会小一百倍。
三、丢掉 3D 信息。COCO 只有 2D 框。 3D 标注体系里那些位置、朝向、尺寸,导出成 COCO 时会全部丢掉。
第三点很重要:COCO 是一种降维导出。如果下游要 3D, 就得用平台自己的原生格式,而不是 COCO。
| COCO | 原生格式 | |
|---|---|---|
| 能表达 3D 吗 | ❌ 只有 2D 框 | ✅ 位置、朝向、尺寸 |
| 能表达身份吗 | ❌ 没有跨帧身份 | ✅ 带身份,能还原轨迹 |
| 能表达来源吗 | ❌ 没有 | ✅ 人标的还是模型标的 |
| 通用性 | ✅ 几乎所有人都吃 | ❌ 换平台要改 |
COCO 是交付格式,原生格式是归档格式。
给外部用 COCO,因为它通用。自己留着用原生的,因为只有它能还原全部信息。 而且要注意 COCO 是有损的,导出之后再也导不回来。
两类下游怕的东西相反:训练怕不一致,规划怕一致地错。 所以别用同一个指标去评价同一批数据。
导出不是格式转换,它要负责合并、过滤,以及交代清楚哪些数是量出来的、哪些是猜的。
COCO 是交付格式,不是归档格式。它丢掉的 3D 和身份信息,导出去就回不来了。