3、数据集与标注:行人、障碍物、交通标志公开数据集(KITTI、COCO、BDD100K、Cityscapes)及标注格式(VOC、COCO、YOLO)

在无人车感知系统的开发中,数据是驱动模型性能的基石。无论是行人检测、障碍物识别还是交通标志分类,模型的泛化能力与鲁棒性高度依赖于训练数据的规模、质量与多样性。本章将系统梳理无人车目标检测领域最常用的四个公开数据集——KITTI、COCO、BDD100K、Cityscapes,深入剖析它们的数据特点、适用场景与局限性,并详细讲解三种主流标注格式(VOC、COCO、YOLO)的存储结构与转换方法。理解这些内容,是进行模型选型、数据增强策略设计以及轻量化部署前数据准备的关键前提。

无人车目标检测数据集与标注格式全景图 KITTI 德国卡尔斯鲁厄 双目+激光雷达+GPS 7481训练/7518测试 3D框+2D框 类别:Car/Pedestrian/Cyclist COCO 通用物体检测基准 33万张图像/80类 行人/交通标志/车辆 实例分割+关键点 预训练首选 BDD100K 伯克利驾驶视频 10万段视频/1亿框 10类:交通灯/标志/车 天气/场景/时间属性 多任务标注 Cityscapes 城市场景语义分割 50城/5000精细标注 2万粗糙标注 像素级分割掩码 行人/车辆/交通标志 VOC格式 (XML) PASCAL VOC 2007/2012 文件夹:JPEGImages/Annotations 标注: 适合:小规模/教学/传统检测 工具:LabelImg COCO格式 (JSON) 单一JSON文件 字段:images/annotations/categories 标注:bbox[x,y,w,h] + area 支持分割/关键点/遮挡 工具:LabelMe/VIA YOLO格式 (TXT) 每张图一个txt文件 格式:class x_center y_center w h 坐标归一化到[0,1] 适合:YOLOv5/v8/轻量部署 工具:LabelImg/Ultralytics 格式转换工具:xml2coco.py / voc2yolo.py / json2yolo.py | 统一到COCO或YOLO格式进行训练

上图展示了四大数据集与三种标注格式的整体关系。在实际工程中,我们通常不会直接使用原始数据集,而是根据任务需求进行格式统一与数据清洗。下面将逐一展开分析。

3.1 核心数据集深度解析

3.1.1 KITTI:自动驾驶视觉基准的“鼻祖”

核心原理:KITTI由德国卡尔斯鲁厄理工学院与丰田美国技术研究院联合发布,是自动驾驶领域最早且最具影响力的公开数据集之一。其数据采集平台搭载了2台灰度摄像机、2台彩色摄像机、1台Velodyne 64线激光雷达以及GPS/IMU导航系统,能够提供同步的视觉与点云数据。对于目标检测任务,KITTI提供了7481张训练图像和7518张测试图像,标注类别主要聚焦于Car(汽车)、Pedestrian(行人)、Cyclist(骑行者)三类,同时包含2D边界框和3D边界框(含截断、遮挡等级属性)。

判断方法与适用场景:KITTI的标注质量较高,但数据采集时间较早(2011年),场景主要集中于德国卡尔斯鲁厄的中等城市交通环境。其图像分辨率约为1242×375,视野较窄。在工程实践中,KITTI更适合用于验证3D目标检测算法(如PointPillars、SECOND)以及多传感器融合方案。对于2D检测任务,KITTI的类别较少且场景单一,直接用于现代复杂路况的泛化能力有限。

经验提醒:使用KITTI时,务必注意其官方的“训练/测试”划分规则。许多使用“trainval”集合(7481张)进行训练,但实际部署时建议额外采集国内路况数据进行微调,否则模型对电动自行车、三轮车等中国特色目标几乎无法识别。

3.1.2 COCO:通用物体检测的“万金油”

核心原理:COCO(Common Objects in Context)由微软发布,包含33万张图像、超过250万个标注实例,覆盖80个物体类别。虽然它不是专门的自动驾驶数据集,但其中包含了person(行人)、car、traffic light、stop sign等与驾驶强相关的类别。COCO的标注信息极为丰富,不仅包含边界框,还提供实例分割掩码、关键点(如人体骨骼点)、图像标题等,是评估现代检测器(如YOLO、DETR)性能的基准平台。

实战价值:在无人车项目中,COCO最大的用途是作为预训练数据集。由于COCO类别多样、场景丰富,模型在COCO上预训练后,再迁移到自动驾驶专用数据集(如BDD100K)上进行微调,能够显著提升小目标(如远处行人)和遮挡目标的检测精度。COCO的评估指标(mAP@0.5:0.95)也是业界公认的模型性能标尺。

数据集 图像数量 类别数 标注类型 主要优势 主要局限
KITTI 1.5万 3 2D+3D框 3D标注精确、多传感器同步 场景单一、类别少、数据较旧
COCO 33万 80 2D框+分割+关键点 类别丰富、预训练效果好 非驾驶场景、无3D信息
BDD100K 10万 10 2D框+可驾驶区域+车道线 驾驶场景多样、天气/时间属性 标注噪声较大、类别较少
Cityscapes 2.5万 8 像素级分割 分割精度高、城市场景真实 无2D框、不直接用于检测

3.1.3 BDD100K:驾驶场景的“大而全”

核心原理:BDD100K由伯克利大学发布,是目前规模最大的公开驾驶视频数据集,包含10万段高清视频(约40秒/段),从中抽帧得到10万张图像用于目标检测标注。其标注类别包括car、bus、person、bike、truck、traffic light、traffic sign等10类。BDD100K最大的特色在于属性标注:每张图像都记录了天气(晴天/雨天/雪天/雾天)、场景(城市/乡村/高速)、时间(白天/夜晚)等信息,这使得模型能够针对不同环境进行域适应训练。

操作流程建议:在构建无人车感知模型时,建议将BDD100K作为主训练集。具体操作:首先筛选出包含行人和交通标志的图像子集,然后根据部署地区的气候特点(如多雨或多雾)进行针对性采样。例如,若目标市场是重庆(多雾),则应加大BDD100K中雾天样本的采样权重。

风险提示:BDD100K的标注质量参差不齐,部分边界框存在偏移或漏标现象。使用前务必进行数据清洗,建议利用模型预测结果与人工标注进行交叉验证,剔除置信度差异过大的样本。

3.1.4 Cityscapes:像素级理解的“精细工”

核心原理:Cityscapes专注于城市场景的语义分割,包含50个不同城市的街景图像,提供5000张精细标注图像(像素级)和20000张粗糙标注图像。其标注类别涵盖行人、车辆、交通标志、路面、建筑等19个类别。虽然它不直接提供2D边界框,但通过分割掩码可以轻松转换为检测框,且精度远高于人工绘制的矩形框。

应用场景:在轻量模型部署中,Cityscapes常用于训练语义分割辅助分支。例如,在YOLOP(同时检测目标、可驾驶区域和车道线)等多任务模型中,Cityscapes的分割数据能够帮助模型更好地理解道路边界与障碍物轮廓,从而提升检测的鲁棒性。

3.2 标注格式详解与转换实战

3.2.1 VOC格式:XML的“经典派”

VOC格式源自PASCAL VOC挑战赛,采用XML文件存储标注信息。每个XML文件对应一张图像,文件名与图像名一致。核心结构如下:

<annotation>
    <folder>JPEGImages</folder>
    <filename>000001.jpg</filename>
    <size>
        <width>1920</width>
        <height>1080</height>
        <depth>3</depth>
    </size>
    <object>
        <name>pedestrian</name>
        <bndbox>
            <xmin>100</xmin>
            <ymin>200</ymin>
            <xmax>150</xmax>
            <ymax>350</ymax>
        </bndbox>
    </object>
</annotation>

优缺点分析:VOC格式直观易读,适合小规模数据集和教学场景。但其缺点也很明显:文件数量多(一张图一个XML)、不支持分割多边形、解析速度慢。在轻量化部署流水线中,VOC格式通常需要转换为COCO或YOLO格式。

3.2.2 COCO格式:JSON的“全能王”

COCO格式将所有标注信息整合到一个JSON文件中,通过images、annotations、categories三个数组建立索引关系。其边界框表示为[x, y, width, height](左上角坐标+宽高),并额外提供area字段用于计算mAP。COCO格式支持分割多边形(segmentation)和关键点(keypoints),是当前学术研究与工业界最通用的格式。

{
  "images": [{"id": 1, "file_name": "000001.jpg", "width": 1920, "height": 1080}],
  "annotations": [{
    "id": 1, "image_id": 1, "category_id": 1,
    "bbox": [100, 200, 50, 150], "area": 7500,
    "iscrowd": 0
  }],
  "categories": [{"id": 1, "name": "pedestrian"}]
}

3.2.3 YOLO格式:TXT的“极简派”

YOLO格式是Ultralytics YOLO系列(v5/v8)默认使用的格式,每张图像对应一个同名TXT文件,每行代表一个目标。格式为:class_id x_center y_center width height,其中坐标值均归一化到[0,1]区间。归一化公式为:x_center = (xmin + xmax) / 2 / width,w = (xmax - xmin) / width。

# 000001.txt
0 0.0651 0.2546 0.0260 0.1389
1 0.5234 0.4812 0.3125 0.3567

转换注意事项:YOLO格式不包含图像尺寸信息,因此训练时必须确保图像尺寸与标注时的尺寸一致。若进行图像缩放或填充,需同步更新TXT文件中的归一化坐标。

3.3 格式转换工具链与案例拆解

3.3.1 转换流程清单

  1. 需求分析:确定训练框架(如YOLOv8、MMDetection)所需的标注格式。
  2. 数据盘点:统计现有数据集的标注格式、类别分布、图像尺寸。
  3. 编写转换脚本:使用Python的xml.etree.ElementTree或json库解析源文件。
  4. 坐标校验:转换后随机抽取100张图,可视化边界框与原图叠加,检查是否偏移。
  5. 类别映射:将不同数据集的类别名称统一映射到自定义的类别ID表。

3.3.2 实战案例:多源数据统一为YOLO格式

背景与约束:某无人配送小车项目需要检测行人、锥桶、减速带三类目标。团队收集了KITTI(有行人)、BDD100K(有行人+锥桶)和自采数据(有减速带)。但KITTI是VOC格式,BDD100K是COCO格式,自采数据是标注软件导出的VOC格式。训练框架选定为YOLOv8,需要将所有数据统一为YOLO格式。

初始现象与目标:直接混合训练导致模型loss震荡,检测精度mAP@0.5仅为0.62。分析发现:KITTI图像尺寸为1242×375,BDD100K为1280×720,自采数据为1920×1080,且三类数据的类别ID定义混乱(KITTI中行人ID=1,BDD100K中行人ID=0)。

分析判断过程:首先,统一图像尺寸至640×640(YOLOv8默认),采用letterbox填充。其次,编写映射字典:{'Pedestrian':'person', 'Car':'car', 'Truck':'truck'},将KITTI的3类映射到自定义的10类体系。最后,针对锥桶和减速带样本不足的问题,从BDD100K中筛选包含cone的帧,并利用数据增强(旋转、亮度变化)扩充至2000张。

实际操作步骤:

# 转换脚本核心逻辑(伪代码)
def voc_to_yolo(xml_path, img_w, img_h, class_map):
    tree = ET.parse(xml_path)
    lines = []
    for obj in tree.findall('object'):
        name = obj.find('name').text
        if name not in class_map: continue
        xmin = int(obj.find('bndbox/xmin').text)
        ymin = int(obj.find('bndbox/ymin').text)
        xmax = int(obj.find('bndbox/xmax').text)
        ymax = int(obj.find('bndbox/ymax').text)
        x_center = ((xmin + xmax) / 2) / img_w
        y_center = ((ymin + ymax) / 2) / img_h
        w = (xmax - xmin) / img_w
        h = (ymax - ymin) / img_h
        lines.append(f"{class_map[name]} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}")
    return lines

结果对比:统一格式并清洗后,模型mAP@0.5提升至0.81,loss曲线收敛平稳。关键改进点在于:① 剔除了KITTI中遮挡等级为2(严重遮挡)的行人样本,减少标注噪声;② 对BDD100K的锥桶类别进行了二次人工复核,修正了约15%的错误框。

风险与代价:格式转换本身耗时约2人天,但最大的代价是数据清洗环节——人工复核锥桶标注花费了额外3天。复盘经验:在项目启动初期就应定义统一的类别体系,避免后期大规模映射。

3.4 常见误区与总结复盘

误区一:盲目追求数据集“大而全”。直接下载全部BDD100K(10万张)进行训练,导致训练时间过长且内存溢出。正确做法:根据部署场景筛选子集,例如仅保留白天+城市+晴天的样本,可减少60%数据量而不损失精度。
误区二:忽略类别不平衡。在COCO预训练模型中,行人样本充足,但“交通标志”类别极少。若直接微调,模型对交通标志的召回率极低。解决方案:使用Focal Loss或对交通标志类别进行过采样。
误区三:坐标转换错误。YOLO格式要求归一化坐标,但部分转换脚本误将x_center写成了xmin,导致边界框偏移。务必在转换后执行可视化验证。

总结:数据集与标注是无人车感知的“地基”。KITTI适合3D感知研究,COCO是预训练利器,BDD100K最贴近真实驾驶场景,Cityscapes提供精细分割信息。在工程实践中,建议采用“COCO预训练 + BDD100K微调 + 自采数据增强”的三级策略。标注格式方面,YOLO格式因其简洁高效,已成为轻量部署的主流选择,但需严格把控坐标归一化与类别映射的正确性。最终,数据质量远比数据数量重要——一个经过精心清洗的5000张数据集,其训练效果往往优于未经处理的5万张噪声数据。