Cityscapes数据集下载与标注实战指南:从入门到避坑

1次阅读
没有评论

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

image.webp

背景与痛点分析

Cityscapes 作为自动驾驶领域标杆数据集,新手常遇到三大门槛:

Cityscapes 数据集下载与标注实战指南:从入门到避坑

  1. 下载困难:官方服务器位于德国,国内直连速度常低于 100KB/s,且 33GB 的完整数据集容易因网络中断导致下载失败
  2. 标注体系复杂:包含 5 种标注类型(gtFine、gtCoarse 等),其中仅 gtFine 就有 3 种细分格式(polygons、instanceIds、labelIds),官方文档分散在多个 PDF 中
  3. 标签歧义 :如group 表示人群聚合体,caravan特指拖挂房车,这些在常规数据集中罕见的类别容易误用

高效下载方案

推荐清华大学开源镜像站的分流方案(需注册账号):

# 分段下载命令示例(使用 axel 多线程工具)axel -n 8 https://mirrors.tuna.tsinghua.edu.cn/cityscapes/file.zip

目录结构关键说明:

  • leftImg8bit:原始街景图(2048×1024 分辨率)
  • train/val/test子目录对应官方划分
  • gtFine:精细标注
  • _polygons.json:矢量多边形标注
  • _labelIds.png:语义标签图(每个像素值为类别 ID)
  • _instanceIds.png:实例标签图(同类不同实例用不同编号)

标注格式深度解析

通过实际代码理解三种核心标注:

import matplotlib.pyplot as plt
import numpy as np

# 定义官方 19 类语义标签颜色映射(RGB 值)cityscapes_palette = [(128, 64, 128),   # 路面
    (244, 35, 232),   # 人行道
    (70, 70, 70),     # 建筑
    # ... 完整色板见官方文档
]

def visualize_annotations(img_path, label_path):
    img = plt.imread(img_path)
    label = plt.imread(label_path)

    # 创建彩色掩膜
    colored_mask = np.zeros_like(img)
    for class_id, color in enumerate(cityscapes_palette):
        colored_mask[label == class_id] = color

    plt.imshow(img)
    plt.imshow(colored_mask, alpha=0.5)  # 半透明叠加
    plt.show()

关键差异对比:

  • labelIds:适用于语义分割任务,像素值对应trainIds(0~18)
  • instanceIds:前 8 位是类别 ID,后 16 位是实例编号,适合实例分割
  • polygons.json:包含物体边界坐标,适合需要几何信息的任务

JSON 标注处理实战

解析车辆多边形标注示例:

import json

with open('gtFine/train/munich/munich_000000_000019_gtFine_polygons.json') as f:
    data = json.load(f)

for obj in data['objects']:
    if obj['label'] == 'car':
        print(f"车辆 ID: {obj['id']}")
        print(f"顶点坐标: {obj['polygon']}")
        print(f"遮挡情况: {obj['occluded']}")

避坑指南

  1. 数据集划分:官方 test 集标签不公开,提交结果到评测服务器才能获取分数
  2. 特殊标签处理
  3. group标签需保持整体性,不应拆分个体
  4. caravantrailer 区别在于是否可独立行驶
  5. 内存优化
  6. 使用 OpenCV 的 imread 时指定 cv2.IMREAD_REDUCED_COLOR_2 降低分辨率
  7. 批量处理时用生成器替代完整加载

进阶应用

转 COCO 格式

使用官方提供的 cityscapesScripts 工具:

python cityscapesscripts/annotation/cityscapes2coco.py --dataset cityscapes --out annotations.json

在 MMSegmentation 中使用

配置数据路径即可直接加载:

# configs/_base_/datasets/cityscapes.py
data_root = 'data/cityscapes/'
data = dict(
    train=dict(
        type='CityscapesDataset',
        data_root=data_root,
        img_dir='leftImg8bit/train',
        ann_dir='gtFine/train'))

经验总结

经过实际项目验证,处理 Cityscapes 时有三个效率提升点:
1. 预处理阶段将所有标注转换为 HDF5 格式,减少 IO 时间
2. 对 instanceIds 采用位运算提取类别 ID:class_id = instance_id >> 16
3. 使用 dataloaderpersistent_workers参数避免重复初始化

数据集虽复杂,但理解其设计逻辑后,能显著提升自动驾驶相关模型的训练效率。建议先从小规模子集(如 val 集的 100 张样本)开始实验,再扩展到全量数据。

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