3. 数据集准备:车辆行人数据集介绍、公开数据集下载与目录结构解析

做目标检测,算法模型是引擎,数据集就是燃料。没有高质量的数据,再牛的YOLO也跑不起来。这一章,我就带你搞定车辆行人检测的数据集准备。

说实话,很多初学者喜欢一上来就调模型,结果训练完发现检测效果一塌糊涂。我当年也踩过这个坑——花了两周调参,最后发现是数据集没选对。嗯,咱们先把地基打牢。

3.1 车辆行人检测常用数据集概览

目前工业界和学术界用得最多的,主要是下面这几个。我按推荐程度排了个序:

数据集名称 规模(图片数) 标注类别 适用场景 我的推荐指数
BDD100K 10万张 10类(含car、pedestrian、rider等) 自动驾驶、城市道路 ⭐⭐⭐⭐⭐
Cityscapes 2.5万张(精细标注5000张) 30类(含vehicle、person、rider等) 城市街景、语义分割 ⭐⭐⭐⭐
KITTI 1.5万张 8类(含Car、Pedestrian、Cyclist等) 自动驾驶、立体视觉 ⭐⭐⭐⭐
Waymo Open Dataset 约20万张 4类(含Vehicle、Pedestrian、Cyclist等) 自动驾驶、多传感器 ⭐⭐⭐

我的建议:如果你刚入门,优先选BDD100K。它场景丰富、标注质量高,而且标注格式直接支持YOLO。Cityscapes虽然精细,但标注格式偏语义分割,转YOLO格式要多一步预处理。

3.2 BDD100K数据集详解

BDD100K是伯克利大学发布的,专门为自动驾驶场景设计。我个人特别喜欢这个数据集,原因有三:

  • 场景多样:包含晴天、雨天、夜晚、黄昏等各种光照条件
  • 标注全面:不仅有目标检测框,还有车道线、可行驶区域、全景分割
  • 格式友好:标注文件是JSON格式,转YOLO的txt标注很方便

3.2.1 下载BDD100K

下载方式有两种,我推荐第二种:

  1. 官网下载:访问bdd-data.berkeley.edu,需要注册账号,速度较慢
  2. 学术镜像下载:用以下命令直接拉取(我在项目中一直用这个方式)
# 下载BDD100K检测数据集(约5GB)
wget https://dl.cv.ethz.ch/bdd100k/data/bdd100k_det_20_labels.zip

# 下载图片(约1.8TB,建议只下载需要的子集)
# 这里我通常只下载10K子集做快速验证
wget https://dl.cv.ethz.ch/bdd100k/data/bdd100k_images_10k.zip

注意:BDD100K完整图片集有100K张,约1.8TB。我建议你先下载10K子集做实验,等模型调通了再下载全量数据。别一上来就下全量,硬盘容易爆。

3.2.2 BDD100K目录结构

下载解压后,目录结构是这样的:

bdd100k/
├── images/                    # 图片文件夹
│   ├── train/                 # 训练集(70K张)
│   ├── val/                   # 验证集(10K张)
│   └── test/                  # 测试集(20K张,无标注)
├── labels/                    # 标注文件夹
│   ├── bdd100k_labels_images_train.json   # 训练集标注
│   └── bdd100k_labels_images_val.json     # 验证集标注
└── info/                      # 数据集信息
    └── categories.json        # 类别定义文件

这里有个坑,我当年踩过——BDD100K的标注JSON文件里,框的坐标是归一化的,但格式是[x1, y1, x2, y2](左上角和右下角),而YOLO需要的是[x_center, y_center, width, height]。 所以转换时一定要做坐标变换。

3.3 Cityscapes数据集详解

Cityscapes是奔驰联合多所大学发布的,专注于城市街景理解。它的标注精度非常高,但代价是标注量少——精细标注只有5000张。

3.3.1 下载Cityscapes

Cityscapes需要注册下载,不能直接wget。流程如下:

  1. 访问 www.cityscapes-dataset.com 注册账号
  2. 同意协议后,下载 gtFine 和 leftImg8bit 两个压缩包
  3. 解压到本地目录

小技巧:Cityscapes的标注是像素级语义分割,如果你只想做目标检测,可以用我写的一个脚本自动提取边界框。脚本我会在后面的章节提供。

3.3.2 Cityscapes目录结构

cityscapes/
├── leftImg8bit/               # 原始图片
│   ├── train/                 # 训练集(2975张)
│   │   ├── aachen/            # 按城市分文件夹
│   │   ├── bochum/
│   │   └── ...
│   ├── val/                   # 验证集(500张)
│   └── test/                  # 测试集(1525张)
└── gtFine/                    # 精细标注
    ├── train/
    ├── val/
    └── test/
        ├── aachen/
        │   ├── aachen_000000_000019_gtFine_color.png    # 彩色标注图
        │   ├── aachen_000000_000019_gtFine_instanceIds.png # 实例ID图
        │   ├── aachen_000000_000019_gtFine_labelIds.png    # 类别ID图
        │   ├── aachen_000000_000019_gtFine_polygons.json   # 多边形标注
        │   └── aachen_000000_000019_gtFine.json            # 完整标注信息
        └── ...

你看,Cityscapes每个场景有5个标注文件。做目标检测时,我们主要用 instanceIds.png 和 polygons.json。前者可以直接提取实例边界框,后者包含多边形坐标。

3.4 数据集目录结构对比

对比维度 BDD100K Cityscapes
标注格式 JSON(边界框) JSON + PNG(语义/实例分割)
转YOLO难度 低(直接解析JSON) 高(需从分割图提取框)
场景多样性 高(多天气、多时段) 中(主要是白天、好天气)
标注精度 中(边界框) 高(像素级)
推荐用途 目标检测模型训练 语义分割、高精度检测

3.5 数据集准备流程(SVG流程图)

下面这张图,是我在实际项目中总结的数据集准备流程。你照着走,基本不会出错:

数据集准备流程图 数据集准备全流程 选择数据集 下载数据 解压并检查目录结构 标注格式转换(→YOLO) 划分训练/验证集 💡 建议:先做10K子集验证,再跑全量数据

3.6 避坑指南:我踩过的三个坑

做数据集准备这几年,我踩过不少坑。挑三个最典型的分享给你:

坑一:标注格式不匹配

我曾经直接用BDD100K的JSON标注训练YOLOv5,结果loss死活不收敛。查了两天才发现——BDD100K的框坐标是[x1,y1,x2,y2],而YOLO需要[x_center,y_center,width,height]。坐标变换公式很简单:

x_center = (x1 + x2) / 2 / image_width
y_center = (y1 + y2) / 2 / image_height
width = (x2 - x1) / image_width
height = (y2 - y1) / image_height

坑二:类别ID不一致

BDD100K的类别ID从0开始,但Cityscapes的类别ID是连续的但有空缺。比如Cityscapes的"person"类ID是24,"rider"是25。如果你混用数据集,一定要先统一类别映射表。我习惯自己写一个映射文件:

# 自定义类别映射(YOLO格式)
0: car
1: pedestrian
2: rider
3: truck
4: bus

坑三:图片路径问题

BDD100K的图片路径是相对路径,比如 images/train/xxx.jpg。如果你移动了数据集位置,记得更新标注文件里的路径。我一般用软链接来解决:

ln -s /data/bdd100k/images ./images

3.7 本章小结

这一章我们聊了三个核心点:

  • 数据集选型:BDD100K适合快速上手,Cityscapes适合高精度场景
  • 下载与目录结构:两个数据集的目录组织方式不同,但核心都是images + labels
  • 格式转换:从JSON或分割图提取YOLO格式标注,注意坐标变换和类别映射