第1章:数据集准备——公开数据集与标注格式详解

做障碍物检测,第一步不是调模型,而是找数据。

我见过太多同学一上来就撸代码,结果训练到一半发现数据格式不对,或者类别对不上,白白浪费几天时间。今天咱们就把数据集准备这件事彻底讲清楚。

1.1 三大主流公开数据集

先说说我常用的三个数据集。它们各有各的脾气,选对了能省不少事。

COCO(Common Objects in Context)

COCO 是微软搞出来的,80个类别,涵盖人、车、动物、日常用品。我个人习惯用它做通用检测的基准测试。

  • 特点:图片场景丰富,标注质量高
  • 规模:约33万张图片,250万个标注实例
  • 适合场景:通用目标检测、实例分割
  • 标注格式:COCO JSON
我的经验:COCO 的类别编号从1开始,不是0。踩过这个坑的人应该不少。

KITTI

KITTI 是自动驾驶领域的标杆。我在做车载项目时,第一个想到的就是它。

  • 特点:真实道路场景,包含双目图像、激光雷达点云
  • 规模:约1.5万张标注图片
  • 适合场景:车辆、行人、自行车检测
  • 标注格式:自定义TXT格式
注意:KITTI 的标注坐标是归一化的,但它的归一化方式和 YOLO 不一样。我曾经因为这个原因,训练出来的模型预测框全偏了。

Waymo Open Dataset

Waymo 是 Google 旗下的自动驾驶公司,它的数据集质量非常高。

  • 特点:多传感器融合,标注精细
  • 规模:约1000个场景,2000万+标注框
  • 适合场景:3D障碍物检测、多模态融合
  • 标注格式:TFRecord(内含边界框、类别、速度等信息)

说实话,Waymo 的数据量太大了,本地跑不动的话,建议先采样一部分用。

一句话总结:做通用检测用 COCO,做自动驾驶用 KITTI 或 Waymo。

1.2 数据标注格式详解

标注格式说白了就是告诉模型:这张图里有什么东西,在什么位置。不同框架支持的格式不一样,但核心信息就那几样。

COCO JSON 格式

这是 COCO 数据集的标准格式,也是很多现代检测框架的首选。

{
  "images": [
    {
      "id": 1,
      "file_name": "000001.jpg",
      "width": 640,
      "height": 480
    }
  ],
  "annotations": [
    {
      "id": 1,
      "image_id": 1,
      "category_id": 3,
      "bbox": [100, 150, 200, 300],
      "area": 60000,
      "iscrowd": 0
    }
  ],
  "categories": [
    {"id": 3, "name": "car"}
  ]
}

bbox 的格式是 [x, y, width, height],注意是左上角坐标加宽高,不是中心点。

Pascal VOC XML 格式

这是比较老的格式了,但很多老项目还在用。说白了就是每个图片对应一个 XML 文件。

<annotation>
  <folder>images</folder>
  <filename>000001.jpg</filename>
  <size>
    <width>640</width>
    <height>480</height>
    <depth>3</depth>
  </size>
  <object>
    <name>car</name>
    <bndbox>
      <xmin>100</xmin>
      <ymin>150</ymin>
      <xmax>300</xmax>
      <ymax>450</ymax>
    </bndbox>
  </object>
</annotation>

VOC 用的是绝对坐标,xmin/ymin 是左上角,xmax/ymax 是右下角。嗯,这里要注意,坐标不能超出图片边界。

YOLO TXT 格式

YOLO 的格式最简单,每个图片对应一个 TXT 文件,每行一个目标。

0 0.5 0.5 0.3 0.4
1 0.2 0.3 0.1 0.2

格式是:class_id center_x center_y width height,所有值都是归一化的(0~1之间)。

避坑指南:我曾经把 YOLO 的归一化坐标写成了像素坐标,结果训练出来的模型预测框全跑到左上角去了。检查了半天才发现是归一化没做。

1.3 格式对比与选择建议

格式 坐标类型 文件形式 适用框架 我的推荐
COCO JSON 绝对坐标 (x,y,w,h) 单个JSON文件 Detectron2, MMDetection ★★★★★
Pascal VOC XML 绝对坐标 (xmin,ymin,xmax,ymax) 每图一个XML SSD, Faster R-CNN ★★★☆☆
YOLO TXT 归一化坐标 (cx,cy,w,h) 每图一个TXT YOLOv5, YOLOv8 ★★★★☆

你想想看,如果项目刚起步,我建议直接用 YOLO 格式,简单粗暴。但如果要做多类别、实例分割,COCO JSON 更合适。

1.4 核心知识体系

下面这张图是我自己整理的,把数据集准备的核心逻辑串起来了。

数据集准备核心知识体系 公开数据集 自建数据集 数据增强 COCO JSON Pascal VOC XML YOLO TXT 标注核心要素 类别ID | 边界框坐标 | 图片尺寸 | 是否遮挡/截断 训练就绪的数据集

从这张图可以看出来,不管数据从哪来,最终都要统一成模型能吃的格式。我建议你提前规划好,别等到训练前才临时转换格式。

核心要点:数据集的准备工作,占整个项目时间的30%以上。别急,慢慢来,数据质量决定了模型的天花板。

好了,数据集准备这块就聊到这儿。下一章咱们聊聊数据预处理和增强,那才是真正拉开差距的地方。

可可精品资料库