BDD100K数据集下载与使用全指南:从数据获取到预处理实战

1次阅读
没有评论

共计 2176 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景介绍

BDD100K 是由 UC Berkeley 发布的大规模自动驾驶数据集,包含 10 万段高清驾驶视频(每段 40 秒)及其标注信息。它在计算机视觉领域具有重要地位,主要原因包括:

BDD100K 数据集下载与使用全指南:从数据获取到预处理实战

  1. 数据规模大:总时长超过 1100 小时,覆盖不同天气、光照和场景
  2. 标注丰富:包含物体检测、语义分割、车道线检测等多任务标注
  3. 场景多样:采集自纽约、旧金山等地,包含城市、乡村、高速公路等场景

下载指南

官方下载渠道

访问官方下载页面 (https://bdd-data.berkeley.edu/) 需要注册账号。数据集分为多个部分:

  • 图像数据(约 1.8TB)
  • 标注文件(JSON 格式)
  • 视频数据(可选)

加速下载技巧

推荐使用 aria2c 进行多线程下载,速度可提升 3 - 5 倍:

  1. 安装 aria2 工具

    sudo apt-get install aria2

  2. 使用 16 线程下载示例

    aria2c -x16 -s16 https://bdd-data.berkeley.edu/downloads/bdd100k/images.zip

数据校验方法

下载完成后务必校验文件完整性:

  1. 获取官方 MD5 校验码
  2. 计算下载文件的 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)

避坑指南

常见问题解决

  1. 下载中断:使用 -c 参数继续下载

    aria2c -c -x16 https://example.com/file.zip

  2. 内存不足:使用生成器分批处理

    def batch_loader(annotations, batch_size=32):
        for i in range(0, len(annotations), batch_size):
            yield annotations[i:i+batch_size]

标注解析注意

  • 边界框格式有 box2dbox3d两种
  • 某些类别有 occludedtruncated属性
  • 天气标签可能影响模型泛化能力

性能优化

处理大规模数据时的建议:

  1. 使用 Dask 或 PySpark 进行分布式处理
  2. 将数据转换为 TFRecords 或 LMDB 格式
  3. 使用多进程数据加载
    from torch.utils.data import DataLoader
    
    dataloader = DataLoader(dataset, batch_size=32, 
                           num_workers=4, pin_memory=True)

结语

BDD100K 数据集为自动驾驶研究提供了丰富的训练素材。通过本文介绍的方法,你应该已经掌握了从下载到预处理的全流程。建议在实际项目中:

  1. 根据任务需求选择合适的子集
  2. 注意数据分布特点(如天气占比)
  3. 结合其他数据集(如 Cityscapes)提升模型泛化能力

期待看到你利用 BDD100K 数据集取得的研究成果!

正文完
 0
评论(没有评论)