4. 数据集与标注规范

可行驶区域与道路语义分割模型的性能上限,很大程度上由数据集决定。工程中常见的问题不是“模型不够新”,而是“标注口径不一致”:同一类道路边界,不同标注员给出的像素范围可能相差几十厘米;同一段路沿,有人标为 curb,有人标为 sidewalk。因此,理解主流数据集的设计目标、类别体系与标注规范,并建立可执行的质量控制流程,是分割工程落地的基础环节。

一、三大主流数据集定位与差异

Cityscapes、BDD100K、ApolloScape 分别代表了城市精细标注、大规模多样驾驶场景、高精度三维与全景语义三个方向。它们不是互相替代关系,而是互补关系。

数据集 规模与场景 标注特点 典型用途
Cityscapes 50 城、5000 精标 + 20000 粗标,1024×2048 30 类,像素级多边形,含 instance 与 ego-vehicle 标注 城市场景语义分割基准、类别体系参考
BDD100K 10 万段视频、1 亿帧,多天气多时段 10 万关键帧精标,40+ 类,含可行驶区域与车道线 大规模预训练、域适应、时序一致性研究
ApolloScape 高分辨率图像 + 点云,多城市采集 像素级 + 3D 点云语义,25+ 类,含路面材质 3D 语义、路面属性、复杂遮挡场景

Cityscapes 的类别体系最常被借鉴,其将道路相关类别细分为 road、sidewalk、curb、parking、rail track 等,并区分 ego-vehicle 与普通车辆。BDD100K 更强调场景多样性,标注中“可行驶区域”通常以多边形覆盖,允许一定程度的边界模糊。ApolloScape 则提供点云级语义,适合研究路面材质与三维几何约束。

二、标注规范的核心口径

无论使用哪个数据集,自建标注前必须冻结一份《标注规范》。规范中至少要明确以下四类口径:

  • 边界归属:道路与路沿交界处,像素归 road 还是 curb?通常以“可行驶轮胎接触面”为 road 边界,路沿立面归 curb。
  • 遮挡处理:被车辆、行人遮挡的道路区域,是否根据上下文补全?Cityscapes 要求补全,BDD100K 允许留空。
  • 最小标注单元:小于多少像素的物体忽略?常见阈值为 100 像素或 0.1% 图像面积。
  • 类别互斥:同一像素只能属于一个类别,禁止重叠多边形;若重叠,按优先级裁剪。
建议在规范中附上 20~30 张“边界案例图”,标注员上岗前必须通过边界案例测试,一致率低于 90% 不得进入正式标注。

三、标注质量控制流程

质量控制不是最后抽检,而是贯穿采集、预标注、标注、审核、验收的全流程。下图展示了从原始数据到合格标注集的闭环流程,其中预标注与一致性校验是提升效率的关键节点。

道路语义分割标注质量控制闭环 原始数据采集 多城/多天气/多时段 模型预标注 粗分割 + 人工修正 人工精细标注 多边形/像素级 交叉审核 双人独立 + 仲裁 验收入库 版本化发布 一致性校验(IoU / 边界距离 / 类别混淆矩阵) 双人标注 IoU ≥ 0.92,边界平均偏差 ≤ 3 px 不达标返工 抽检与指标监控 mIoU、边界 F1、类别召回率 关键控制点: ① 预标注模型需与目标域匹配,避免引入系统性偏差;② 审核采用双人独立标注,IoU 低于阈值触发仲裁; ③ 每批次抽检 5%~10%,按类别统计召回率,对低召回类别定向补充标注。

四、实操:一致性校验与返工判定

一致性校验通常以双人独立标注结果为输入,计算像素级 IoU 与边界距离。以下脚本展示了如何对两张标注掩码进行快速比对,并输出需要返工的类别清单。

import numpy as np

def consistency_check(mask_a, mask_b, num_classes=19, iou_thr=0.92):
    """双人标注一致性校验,返回不达标类别"""
    report = {}
    for c in range(num_classes):
        a = (mask_a == c)
        b = (mask_b == c)
        inter = np.logical_and(a, b).sum()
        union = np.logical_or(a, b).sum()
        if union == 0:
            continue
        iou = inter / union
        report[c] = round(iou, 4)
    bad = {c: v for c, v in report.items() if v < iou_thr}
    return report, bad

# 示例输出
# {0: 0.981, 1: 0.954, 8: 0.873, 11: 0.901}
# 返工类别: {8: 0.873, 11: 0.901}

当某类别 IoU 低于阈值时,不应直接全量返工,而应先定位分歧区域:是边界定义模糊,还是标注员理解偏差。若分歧集中在路沿与道路交界处,应回到规范中补充边界案例;若分歧分散,则需对标注员进行再培训。

常见误区:用模型预测结果直接作为“真值”去校验人工标注。模型本身存在偏差,这种做法会把模型错误固化为标注标准。正确做法是人工仲裁 + 规范迭代,模型仅用于预标注和辅助发现异常。

五、复盘:数据集选择的工程建议

实际项目中,很少只用一个数据集。推荐策略是:以 Cityscapes 的类别体系为基准,用 BDD100K 做大规模预训练以提升泛化,再用 ApolloScape 的点云语义补充三维几何约束。自建数据时,先冻结规范、跑通一致性校验闭环,再逐步扩大标注规模。数据集的质量不取决于标注了多少帧,而取决于每一帧的边界口径是否可复现、可仲裁、可追溯。