Ultralytics YOLO27:

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.zipgtFine_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

# Load a model
model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)

# Train the model
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
    
    # Load a model
    model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    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,同时将忽略和无效标签映射到 255test 划分中的掩码仅标注自车和边界区域,因此请使用 val 进行本地 mIoU 检查。

  • 是的。在 Cityscapes 网站上创建账户并下载 leftImg8bit_trainvaltest.zipgtFine_trainvaltest.zip 存档(合计约 ~11 GB)。将两者解压到 cityscapes 数据集根目录下——首次训练时,Ultralytics 会自动将它们重新整理为预期的 images/masks/ 目录结构。

  • Cityscapes 源掩码存储的原始标签 ID 与评估所使用的 19 个训练 ID 不同。label_mapping 部分会将有效标签转换为连续的类别 ID 018,并将 255 分配给忽略和无效标签,使其在训练和验证期间不会计入损失和指标。

  • 不可以。Cityscapes 采用非商业许可发布,允许用于学术研究、教学和评估,但禁止将该数据集或其衍生作品用于商业用途、许可或销售。如需商业许可选项,请直接联系 Cityscapes 团队。

评论