共计 2176 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍
BDD100K 是由 UC Berkeley 发布的大规模自动驾驶数据集,包含 10 万段高清驾驶视频(每段 40 秒)及其标注信息。它在计算机视觉领域具有重要地位,主要原因包括:

- 数据规模大:总时长超过 1100 小时,覆盖不同天气、光照和场景
- 标注丰富:包含物体检测、语义分割、车道线检测等多任务标注
- 场景多样:采集自纽约、旧金山等地,包含城市、乡村、高速公路等场景
下载指南
官方下载渠道
访问官方下载页面 (https://bdd-data.berkeley.edu/) 需要注册账号。数据集分为多个部分:
- 图像数据(约 1.8TB)
- 标注文件(JSON 格式)
- 视频数据(可选)
加速下载技巧
推荐使用 aria2c 进行多线程下载,速度可提升 3 - 5 倍:
-
安装 aria2 工具
sudo apt-get install aria2 -
使用 16 线程下载示例
aria2c -x16 -s16 https://bdd-data.berkeley.edu/downloads/bdd100k/images.zip
数据校验方法
下载完成后务必校验文件完整性:
- 获取官方 MD5 校验码
- 计算下载文件的 MD5 值
import hashlib def get_md5(file_path): with open(file_path, 'rb') as f: return hashlib.md5(f.read()).hexdigest()
数据结构解析
解压后的目录结构如下:
bdd100k/
├── images/ # 图像文件夹
│ ├── train/ # 训练集(70k)
│ ├── val/ # 验证集(10k)
│ └── test/ # 测试集(20k)
└── labels/ # 标注文件夹
├── det_20/ # 检测标注(COCO 格式)
└── seg/ # 语义分割标注
标注文件采用 JSON 格式,主要字段包括:
- “name”: 图像文件名
- “attributes”: 天气、场景等元信息
- “labels”: 物体标注列表(包含类别、边界框等)
代码实战
数据加载基础
import json
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# 加载标注文件
with open('bdd100k/labels/det_20/train.json') as f:
annotations = json.load(f)
# 可视化标注示例
def visualize_annotation(img_path, annotation):
img = Image.open(img_path)
fig, ax = plt.subplots(1)
ax.imshow(img)
for obj in annotation['labels']:
box = obj['box2d']
rect = patches.Rectangle((box['x1'], box['y1']),
box['x2']-box['x1'], box['y1']-box['y2'],
linewidth=1, edgecolor='r', facecolor='none')
ax.add_patch(rect)
ax.text(box['x1'], box['y1'], obj['category'])
plt.show()
数据增强实现
import albumentations as A
transform = A.Compose([A.RandomBrightnessContrast(p=0.5),
A.HorizontalFlip(p=0.5),
A.RandomCrop(width=720, height=720),
A.Resize(640, 640)
], bbox_params=A.BboxParams(format='pascal_voc'))
# 应用增强
augmented = transform(image=img, bboxes=boxes)
避坑指南
常见问题解决
-
下载中断:使用
-c参数继续下载aria2c -c -x16 https://example.com/file.zip -
内存不足:使用生成器分批处理
def batch_loader(annotations, batch_size=32): for i in range(0, len(annotations), batch_size): yield annotations[i:i+batch_size]
标注解析注意
- 边界框格式有
box2d和box3d两种 - 某些类别有
occluded和truncated属性 - 天气标签可能影响模型泛化能力
性能优化
处理大规模数据时的建议:
- 使用 Dask 或 PySpark 进行分布式处理
- 将数据转换为 TFRecords 或 LMDB 格式
- 使用多进程数据加载
from torch.utils.data import DataLoader dataloader = DataLoader(dataset, batch_size=32, num_workers=4, pin_memory=True)
结语
BDD100K 数据集为自动驾驶研究提供了丰富的训练素材。通过本文介绍的方法,你应该已经掌握了从下载到预处理的全流程。建议在实际项目中:
- 根据任务需求选择合适的子集
- 注意数据分布特点(如天气占比)
- 结合其他数据集(如 Cityscapes)提升模型泛化能力
期待看到你利用 BDD100K 数据集取得的研究成果!
正文完
