Ultralytics YOLO27:
Get Started

Cityscapes 数据集#

Cityscapes 数据集是一个大规模语义分割基准,包含在 50 个欧洲城市采集的城市场景图像,其中 2,975 张训练图像和 500 张验证图像经过精细标注,涵盖 19 个类别。它是使用 Ultralytics YOLO 模型开展自动驾驶研究和城市场景理解时最广泛使用的数据集之一。

主要功能#

  • Cityscapes 精细标注包含 2,975 张训练图像和 500 张验证图像,覆盖 19 个类别;该数据集还提供 1,525 张测试图像,但公开发布的掩码只标注自车和图像边界 — 真实类别标注不会公开,官方测试集评分需要向 Cityscapes 评估服务器提交预测结果。
  • 该数据集涵盖 19 个评估类别,涉及平坦区域、人类、车辆、建筑、物体、自然和天空类别。
  • Cityscapes 提供标准化评估指标,例如用于语义分割的平均交并比 (mIoU),以便有效比较模型性能。
  • 在投入约 11 GB 的手动下载之前,先使用包含 8 张图像的 Cityscapes8 子集检查训练流程是否正常。

数据集结构#

准备完成后,Ultralytics 配置要求采用以下目录结构:

cityscapes/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── masks/
    ├── train/
    ├── val/
    └── test/
需要手动下载

Cityscapes 不支持自动下载压缩包。请在 Cityscapes 网站创建账号,然后下载 leftImg8bit_trainvaltest.zip 和 gtFine_trainvaltest.zip 压缩包(合计约 11 GB),并将两者解压到 cityscapes 数据集根目录。首次训练时,Ultralytics 会自动将它们重新整理为上述 images/ 和 masks/ 目录结构。

语义掩码是单通道 PNG 文件。原始 Cityscapes 标签 ID 会通过 label_mapping 配置段映射为标准的 19 个训练 ID;被忽略或空白的标签会映射到 255,因此不会参与训练和评估。

注意

公开发布的 gtFine/test 掩码只标注自车和图像边界区域 — 所有其他类别均为空白。使用 val 拆分在本地计算 mIoU;官方测试集评分需要向 Cityscapes 评估服务器提交预测结果。

应用场景#

Cityscapes 广泛用于训练和评估语义分割领域的深度学习模型,尤其适用于自动驾驶、高级驾驶辅助系统 (ADAS) 和城市机器人研究。

其高分辨率图像和精细标注也使其适用于实时场景解析、车道与障碍物理解,以及任何需要对复杂城市场景进行密集像素级理解的任务。预训练 YOLO26 语义分割模型在 Cityscapes 验证集上的 mIoU 最高可达 83.6 — 完整基准测试表请参阅语义分割模型页面。你可以使用 Ultralytics Platform 在整个模型开发流程中整理、可视化和管理 Cityscapes 数据。

数据集 YAML#

数据集 YAML 文件定义 Cityscapes 路径、类别、掩码目录和标签映射。cityscapes.yaml 文件维护在 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/cityscapes.yaml。

ultralytics/cfg/datasets/cityscapes.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes
# Example usage: yolo semantic train data=cityscapes.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes ← downloads here (11 GB)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes # dataset root dir
train: images/train # train images (relative to 'path') 2975 images
val: images/val # val images (relative to 'path') 500 images
test: images/test # test images (relative to 'path') 1525 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Preparation script (requires manual Cityscapes download)
download: |
  from pathlib import Path
  from shutil import copy2

  cityscapes_dir = Path(yaml["path"])  # dataset root dir
  # Download and extract the official Cityscapes leftImg8bit and gtFine archives into cityscapes_dir first.
  leftimg8bit_dir = cityscapes_dir / "leftImg8bit"
  gtfine_dir = cityscapes_dir / "gtFine"

  for split in ("train", "val", "test"):
      print(f"Processing {split} set")
      src_image_dir = leftimg8bit_dir / split
      dst_image_dir = cityscapes_dir / "images" / split
      dst_mask_dir = cityscapes_dir / "masks" / split
      dst_image_dir.mkdir(parents=True, exist_ok=True)
      dst_mask_dir.mkdir(parents=True, exist_ok=True)

      image_paths = sorted(src_image_dir.rglob("*_leftImg8bit.png"))
      for image_path in image_paths:
          relative_path = image_path.relative_to(src_image_dir)
          mask_path = gtfine_dir / split / relative_path.parent / image_path.name.replace(
              "_leftImg8bit.png", "_gtFine_labelIds.png"
          )
          if not mask_path.exists():
              raise FileNotFoundError(f"Mask not found for {image_path}: {mask_path}")

          image_name = image_path.name.replace("_leftImg8bit", "")
          mask_name = mask_path.name.replace("_gtFine_labelIds", "")
          copy2(image_path, dst_image_dir / image_name)
          copy2(mask_path, dst_mask_dir / mask_name)

用法#

要在 Cityscapes 数据集上训练 YOLO26n-sem 模型 100 个轮次,图像尺寸为 1024,可以使用以下代码片段。可用参数的完整列表请参阅模型训练页面。

训练示例
from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n-sem.pt")  # 加载预训练模型(推荐用于训练)

# 训练模型
results = model.train(data="cityscapes.yaml", epochs=100, imgsz=1024)

引用、许可证和致谢#

Cityscapes 采用自定义非商业许可证发布 — 学术研究和评估可免费使用,但商业使用、授权或再分发数据需要获得 Cityscapes 团队的单独许可。

如果你在研究或开发工作中使用 Cityscapes 数据集,请引用以下论文:

引用格式
@inproceedings{Cordts2016Cityscapes,
  title={The Cityscapes Dataset for Semantic Urban Scene Understanding},
  author={Cordts, Marius and Omran, Mohamed and Ramos, Sebastian and Rehfeld, Timo and Enzweiler, Markus and Benenson, Rodrigo and Franke, Uwe and Roth, Stefan and Schiele, Bernt},
  booktitle={Proc. of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2016}
}

感谢 Cityscapes 团队为自动驾驶和计算机视觉社区创建并维护这一宝贵资源。有关 Cityscapes 数据集及其创建者的更多信息,请访问 Cityscapes 数据集网站。

常见问题#

  • Cityscapes 数据集是一个大规模语义分割基准,包含来自 50 个欧洲城市的城市场景,广泛用作自动驾驶和 ADAS 研究的标准参考。该数据集拥有 19 个经过精细标注的评估类别、高分辨率图像,以及标准化的平均交并比 (mIoU) 指标,是密集场景理解模型最常被引用的基准之一。

  • 要在 Cityscapes 数据集上训练 YOLO26n-sem 模型 100 个轮次,图像尺寸为 1024,可以使用以下代码片段。可用参数的详细列表请参阅模型训练页面。

    训练示例
    from ultralytics import YOLO
    
    # 加载模型
    model = YOLO("yolo26n-sem.pt")  # 加载预训练模型(推荐用于训练)
    
    # 训练模型
    results = model.train(data="cityscapes.yaml", epochs=100, imgsz=1024)
  • 准备完成后,数据集会整理到 images/{train,val,test}/ 和 masks/{train,val,test}/ 目录中,每张图像都配有一张单通道 PNG 掩码。Ultralytics YAML 文件通过 masks_dir: masks 字段将每张图像与其掩码配对,并使用 label_mapping 将原始 Cityscapes 标签 ID 转换为标准的 19 个连续训练 ID,同时将被忽略和空白的标签映射到 255。test 拆分中的掩码只标注自车和边界区域,因此请使用 val 在本地检查 mIoU。

  • 需要。在 Cityscapes 网站创建账号,并下载 leftImg8bit_trainvaltest.zip 和 gtFine_trainvaltest.zip 压缩包(合计约 11 GB)。将两者解压到 cityscapes 数据集根目录 — 首次训练时,Ultralytics 会自动将它们重新整理为所需的 images/ 和 masks/ 目录结构。

  • Cityscapes 源掩码存储的原始标签 ID 与评估使用的 19 个训练 ID 不同。label_mapping 配置段会将有效标签转换为连续类别 ID 0–18,并将 255 分配给被忽略和空白的标签,使其在训练和验证期间不参与损失及指标计算。

  • 不可以。Cityscapes 采用非商业许可证发布,允许学术研究、教学和评估,但禁止商业使用、授权或出售该数据集及其衍生作品。有关商业授权选项,请直接联系 Cityscapes 团队。

评论