BDD100K数据集标注类别顺序解析与实战指南

1次阅读
没有评论

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

image.webp

背景介绍

BDD100K 是伯克利大学发布的自动驾驶场景大规模数据集,包含 10 万张高清道路图像,涵盖昼夜、晴雨等多种驾驶场景。作为计算机视觉领域的基准数据集,它被广泛用于目标检测、语义分割、车道检测等任务。数据集提供 JSON 格式的标注文件,其中包含丰富的物体类别信息,但新手常因不熟悉标注顺序而遇到解析错误。

BDD100K 数据集标注类别顺序解析与实战指南

痛点分析

刚接触 BDD100K 时,开发者常遇到以下问题:

  • 混淆检测框坐标与类别 ID 的对应关系
  • 不确定类别顺序是固定还是随机排列
  • 处理多任务(如同时做检测和分割)时类别映射不一致
  • 误将‘traffic light’和‘traffic sign’归为同类
  • 忽略‘rider’和‘person’的区分逻辑

核心解析

BDD100K 的 40 个标注类别按固定顺序排列,分为 6 大类:

  1. 交通工具类(0-9)
  2. 0: pedestrian
  3. 1: rider
  4. 2: car
  5. 3: truck
  6. 4: bus
  7. 5: train
  8. 6: motorcycle
  9. 7: bicycle
  10. 8: traffic light
  11. 9: traffic sign

  12. 交通设施类(10-18)

  13. 包含红绿灯状态、各类道路标志等

  14. 自然环境类(19-28)

  15. 如 sky、building、vegetation 等背景元素

  16. 路面标记类(29-35)

  17. 包括 lane、crosswalk 等地面标识

  18. 特殊物体类(36-38)

  19. 如 trailer、dynamic 物体

  20. 其他类(39)

  21. 未分类对象

代码示例

以下是通过 Python 加载标注文件的示例:

import json
import matplotlib.pyplot as plt

# 类别名称列表(按官方顺序)CLASS_NAMES = [
    'pedestrian', 'rider', 'car', 'truck', 'bus', 
    'train', 'motorcycle', 'bicycle', 'traffic light', 'traffic sign',
    # 完整列表见官方文档...
]

def load_bdd100k_labels(json_path):
    """加载并解析标注文件"""
    with open(json_path) as f:
        data = json.load(f)

    annotations = []
    for obj in data['frames'][0]['objects']:
        category = CLASS_NAMES[obj['category']]  # 关键:按索引映射类别
        bbox = [obj['box2d']['x1'],
            obj['box2d']['y1'],
            obj['box2d']['x2'],
            obj['box2d']['y2']
        ]
        annotations.append((category, bbox))

    return annotations

最佳实践

  1. 预处理建议
  2. 使用官方提供的 bdd100k 工具包进行格式验证
  3. 对‘traffic light’按颜色(红 / 黄 / 绿)进一步细分
  4. 合并相似类别(如‘motorcycle’和‘bicycle’)时注意索引调整

  5. 可视化技巧

  6. 用 Seaborn 绘制类别分布直方图
  7. 标注样本时采用不同颜色区分大类

  8. 性能优化

  9. 将类别 ID 转换为 one-hot 编码时预先建立查找表
  10. 对 JSON 文件使用 ijson 库流式读取

避坑指南

常见错误及解决方案:

  • 错误 1:直接使用 0 -39 外的数字
  • 方案:添加 assert 0 <= cat_id < 40 校验

  • 错误 2:忽略‘rider’的特殊性(人 + 车组合)

  • 方案:单独处理该类别或拆分为两个实例

  • 错误 3:错误映射交通灯状态

  • 方案:通过 attributes 字段的 trafficLightColor 子属性判断

结语

掌握 BDD100K 的标注顺序后,建议尝试:
1. 构建自定义类别子集(如只检测车辆)
2. 与其他数据集(如 Cityscapes)的类别体系对比
3. 针对长尾分布问题设计重采样策略

数据集如同乐高积木,理解其内部结构才能搭建出理想的视觉系统。

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