第1章:数据集准备——公开数据集与标注格式详解
做障碍物检测,第一步不是调模型,而是找数据。
我见过太多同学一上来就撸代码,结果训练到一半发现数据格式不对,或者类别对不上,白白浪费几天时间。今天咱们就把数据集准备这件事彻底讲清楚。
1.1 三大主流公开数据集
先说说我常用的三个数据集。它们各有各的脾气,选对了能省不少事。
COCO(Common Objects in Context)
COCO 是微软搞出来的,80个类别,涵盖人、车、动物、日常用品。我个人习惯用它做通用检测的基准测试。
- 特点:图片场景丰富,标注质量高
- 规模:约33万张图片,250万个标注实例
- 适合场景:通用目标检测、实例分割
- 标注格式:COCO JSON
KITTI
KITTI 是自动驾驶领域的标杆。我在做车载项目时,第一个想到的就是它。
- 特点:真实道路场景,包含双目图像、激光雷达点云
- 规模:约1.5万张标注图片
- 适合场景:车辆、行人、自行车检测
- 标注格式:自定义TXT格式
Waymo Open Dataset
Waymo 是 Google 旗下的自动驾驶公司,它的数据集质量非常高。
- 特点:多传感器融合,标注精细
- 规模:约1000个场景,2000万+标注框
- 适合场景:3D障碍物检测、多模态融合
- 标注格式:TFRecord(内含边界框、类别、速度等信息)
说实话,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之间)。
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 核心知识体系
下面这张图是我自己整理的,把数据集准备的核心逻辑串起来了。
从这张图可以看出来,不管数据从哪来,最终都要统一成模型能吃的格式。我建议你提前规划好,别等到训练前才临时转换格式。
好了,数据集准备这块就聊到这儿。下一章咱们聊聊数据预处理和增强,那才是真正拉开差距的地方。