共计 3502 个字符,预计需要花费 9 分钟才能阅读完成。
Cityscapes 数据集简介
Cityscapes 数据集是 2016 年由奔驰等公司联合发布的自动驾驶场景理解数据集,包含 50 个城市街道场景的 5000 张精细标注图片(2975 训练、500 验证、1525 测试)和 20000 张粗标注图片。其特点包括:

- 高分辨率图像:所有图片均为 2048×1024 像素
- 精细语义分割:涵盖 30 个类别(19 类用于评估)
- 立体视觉支持:提供双目图像对
- 多任务标注:包含实例分割、深度信息等
官方下载方式
- 访问 官网
- 注册账号并填写研究用途申请表
- 等待邮件批准(通常 1 - 2 个工作日)
- 登录后下载以下核心文件:
- gtFine_trainvaltest.zip(精细标注)
- leftImg8bit_trainvaltest.zip(原始图像)
- disparity_trainvaltest.zip(视差图)
国内开发者痛点分析
下载速度问题
- 官方服务器位于德国,国内直连下载速度常低于 100KB/s
- 大文件(如 leftImg8bit_trainvaltest.zip 约 70GB)下载易中断
数据格式复杂性
- 目录结构嵌套层级深(如
gtFine/train/aachen/aachen_000000_000019_gtFine_labelIds.png) - 不同标注类型使用不同文件后缀(_labelIds.png, _instanceIds.png 等)
- 需要自行划分 train/val 集
加速下载方案对比
国内镜像源
| 来源 | 地址 | 更新频率 | 校验方式 |
|---|---|---|---|
| 清华 TUNA | https://mirrors.tuna.tsinghua.edu.cn/ | 每周同步 | SHA256 校验文件 |
| 阿里云镜像 | https://mirrors.aliyun.com/ | 每日同步 | MD5 校验 |
| 华为云镜像 | https://mirrors.huaweicloud.com/ | 手动同步 | 官方哈希对照 |
下载工具推荐
-
Aria2 多线程下载
aria2c -x16 -s16 -c https://mirror.example.com/file.zip -
IDM 工具(Windows 平台)
- 支持断点续传
- 自动捕获下载链接
数据加载实战(PyTorch 实现)
目录结构预处理
建议重组为标准格式:
Cityscapes/
├── leftImg8bit/
│ ├── train/
│ ├── val/
│ └── test/
└── gtFine/
├── train/
├── val/
└── test/
核心代码实现
import os
import torch
from torch.utils.data import Dataset
from PIL import Image
import numpy as np
class CityscapesDataset(Dataset):
"""
参数说明:
root: 数据集根目录
split: 'train', 'val' 或 'test'
transform: 图像增强方法
target_transform: 标注增强方法
"""def __init__(self, root, split='train', transform=None, target_transform=None):
self.root = root
self.split = split
self.transform = transform
self.target_transform = target_transform
# 自动收集图像 - 标注对
self.images = []
self.targets = []
img_dir = os.path.join(root, 'leftImg8bit', split)
label_dir = os.path.join(root, 'gtFine', split)
for city in os.listdir(img_dir):
img_city_dir = os.path.join(img_dir, city)
label_city_dir = os.path.join(label_dir, city)
for img_name in os.listdir(img_city_dir):
if img_name.endswith('_leftImg8bit.png'):
base_name = img_name.replace('_leftImg8bit.png', '')
label_name = f"{base_name}_gtFine_labelIds.png"
self.images.append(os.path.join(img_city_dir, img_name))
self.targets.append(os.path.join(label_city_dir, label_name))
def __len__(self):
return len(self.images)
def __getitem__(self, idx):
image = Image.open(self.images[idx]).convert('RGB')
target = Image.open(self.targets[idx])
if self.transform:
image = self.transform(image)
if self.target_transform:
target = self.target_transform(target)
return image, target
性能优化建议
存储优化
-
使用符号链接(Linux/macOS)
ln -s /mnt/ssd/cityscapes ./datasets/cityscapes -
转换为 HDF5 格式
- 减少小文件 IO 开销
- 示例转换代码:
import h5py with h5py.File('cityscapes.h5', 'w') as f: for img_path, label_path in zip(dataset.images, dataset.targets): img = np.array(Image.open(img_path)) label = np.array(Image.open(label_path)) group = f.create_group(os.path.basename(img_path)) group.create_dataset('image', data=img, compression='gzip') group.create_dataset('label', data=label, compression='gzip')
训练加速
- 启用 pin_memory
DataLoader(..., pin_memory=True, num_workers=4) - 使用混合精度训练
scaler = torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): outputs = model(inputs) loss = criterion(outputs, targets) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()
常见问题解决方案
标注不对齐问题
现象:预测结果与图像出现偏移
解决方法:
1. 检查是否误用了 _polygons.json 文件
2. 确认加载的是 _labelIds.png 而非_instanceIds.png
3. 验证图像和标注的文件名严格匹配
内存不足处理
-
降低分辨率
transform = Compose([Resize((1024, 512)), # 长宽保持 2:1 比例 ToTensor()]) -
使用迭代式加载
for batch in DataLoader(..., batch_size=4): process(batch) torch.cuda.empty_cache()
版本控制建议
-
使用
dvc管理数据版本dvc add data/cityscapes git add data/cityscapes.dvc -
记录数据集哈希值
import hashlib def get_dir_hash(path): hash_md5 = hashlib.md5() for root, _, files in os.walk(path): for file in sorted(files): with open(os.path.join(root, file), "rb") as f: hash_md5.update(f.read()) return hash_md5.hexdigest()
结语
Cityscapes 数据集作为自动驾驶领域的重要基准,其规范的使用方法能显著提升研发效率。本文介绍的方法在多个实际项目中验证有效,特别是国内镜像加速方案可将下载时间从数天缩短至数小时。建议开发者建立规范的数据管理流程,这对团队协作和实验复现至关重要。
正文完
