Cityscapes Datensatz

Der Cityscapes Datensatz ist ein groß angelegter semantischer Segmentierungs-Benchmark, der sich auf städtische Straßenszenen aus 50 europäischen Städten konzentriert. Er bietet hochwertige pixelgenaue Annotationen und ist einer der am weitesten verbreiteten Datensätze für die Erforschung des autonomen Fahrens und das Verständnis städtischer Szenen mit Ultralytics YOLO-Modellen.

Hauptfunktionen

  • Die feinen Annotationen von Cityscapes umfassen 2.975 Trainingsbilder, 500 Validierungsbilder und 1.525 Testbilder.
  • Der Datensatz deckt 19 Evaluierungsklassen ab, die sich auf die Kategorien Straße, Fahrzeug, Mensch, Bauwerk, Objekt, Natur und Himmel erstrecken.
  • Cityscapes bietet standardisierte Evaluierungsmetriken wie mean Intersection over Union (mIoU) für die semantische Segmentierung, was einen effektiven Vergleich der Modellleistung ermöglicht.

Datensatzstruktur

Die Ultralytics-Konfiguration erwartet nach der Vorbereitung das folgende Layout:

cityscapes/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── masks/
    ├── train/
    ├── val/
    └── test/

Die semantischen Masken sind einkanalige PNG-Dateien. Die ursprünglichen Cityscapes-Label-IDs werden über den Abschnitt label_mapping auf die standardmäßigen 19 Train-IDs abgebildet, und ignorierte oder leere Labels werden auf 255 gesetzt, damit sie vom Training und der Evaluierung ausgeschlossen werden. Lade die offiziellen leftImg8bit- und gtFine-Archive von der Cityscapes-Website herunter und entpacke sie im Datensatz-Root; der Vorbereitungsblock in cityscapes.yaml organisiert anschließend die Bilder und Masken in dieses Layout.

Anwendungen

Cityscapes wird häufig zum Trainieren und Evaluieren von Deep Learning-Modellen im Bereich der semantischen Segmentierung eingesetzt, insbesondere für autonomes Fahren, fortschrittliche Fahrerassistenzsysteme (ADAS) und urbane Robotik.

Die hochauflösenden Bilder und detaillierten Annotationen machen ihn zudem wertvoll für die Forschung an Echtzeit-Szenenanalyse, Spur- und Hinderniserkennung sowie für alle Aufgaben, die ein dichtes, pixelgenaues Verständnis komplexer städtischer Umgebungen erfordern.

Datensatz YAML

Eine Datensatz-YAML-Datei definiert die Pfade, Klassen, das Maskenverzeichnis und die Label-Zuordnung für Cityscapes. Die Datei cityscapes.yaml wird unter https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/cityscapes.yaml gepflegt.

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)

Verwendung

Um ein YOLO26n-sem Modell für 100 Epochen mit einer Bildgröße von 1024 auf dem Cityscapes-Datensatz zu trainieren, kannst du die folgenden Code-Snippets verwenden. Eine umfassende Liste der verfügbaren Argumente findest du auf der Seite zum Modell Training.

Trainingsbeispiel
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)

Zitate und Danksagungen

Wenn du den Cityscapes-Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Papier:

Zitat
@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}
}

Wir möchten dem Cityscapes-Team dafür danken, dass es diese wertvolle Ressource für die Communities im Bereich autonomes Fahren und Computer Vision erstellt und pflegt. Weitere Informationen über den Cityscapes-Datensatz und seine Ersteller findest du auf der Cityscapes Datensatz-Website.

FAQ

Was ist der Cityscapes-Datensatz und warum ist er wichtig für Computer Vision?

Der Cityscapes Datensatz ist ein groß angelegter semantischer Segmentierungs-Benchmark, der sich auf städtische Straßenszenen aus 50 europäischen Städten konzentriert. Er enthält 5.000 fein annotierte Bilder in 19 Evaluierungsklassen und ist damit eine grundlegende Ressource für die Forschung an autonomen Fahren und das Verständnis städtischer Szenen. Seine hochauflösenden Bilder, dichten Annotationen und die standardisierte Mean Intersection over Union (mIoU)-Metrik machen ihn ideal für das Benchmarking von Dichte-Vorhersagemodellen.

Wie kann ich ein YOLO-Modell mit dem Cityscapes-Datensatz trainieren?

Um ein YOLO26n-sem Modell für 100 Epochen mit einer Bildgröße von 1024 auf dem Cityscapes-Datensatz zu trainieren, kannst du die folgenden Code-Snippets verwenden. Eine detaillierte Liste der verfügbaren Argumente findest du auf der Seite zum Modell Training.

Trainingsbeispiel
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)

Wie ist der Cityscapes-Datensatz strukturiert?

Nach der Vorbereitung ist der Datensatz in die Verzeichnisse images/{train,val,test}/ und masks/{train,val,test}/ organisiert, wobei jedes Bild mit einer einkanaligen PNG-Maske gepaart ist. Die Ultralytics-YAML-Datei verknüpft jedes Bild über das Feld masks_dir: masks mit seiner Maske und verwendet label_mapping, um ursprüngliche Cityscapes-Label-IDs in die standardmäßigen 19 fortlaufenden Train-IDs zu konvertieren, wobei ignorierte und leere Labels auf 255 abgebildet werden.

Muss ich Cityscapes manuell herunterladen?

Ja. Für Cityscapes musst du die Nutzungsbedingungen für den Datensatz auf der offiziellen Website akzeptieren. Lade leftImg8bit und gtFine herunter und entpacke sie im cityscapes-Datensatz-Root, bevor du den Vorbereitungsblock in cityscapes.yaml verwendest, um das erwartete images/- und masks/-Layout zu erstellen.

Warum verwendet Cityscapes label_mapping?

Cityscapes-Quellmasken speichern ursprüngliche Label-IDs, die sich von den 19 für die Evaluierung verwendeten Train-IDs unterscheiden. Der Abschnitt label_mapping konvertiert gültige Labels in fortlaufende Klassen-IDs von 0 bis 18 und weist ignorierten sowie leeren Labels den Wert 255 zu, damit sie während des Trainings und der Validierung von der Verlustberechnung und den Metriken ausgeschlossen werden.

Kommentare