Cityscapesデータセット

Cityscapesデータセットは、ヨーロッパ50都市で撮影された都市のストリートシーンに焦点を当てた、大規模なセマンティックセグメンテーションベンチマークです。高品質なピクセルレベルのアノテーションを提供しており、Ultralytics YOLOモデルを用いた自動運転研究や都市シーン理解において最も広く利用されているデータセットの一つです。

主な機能

  • Cityscapesのファインアノテーションには、2,975枚の学習画像、500枚の検証画像、1,525枚のテスト画像が含まれています。
  • このデータセットは、道路、車両、人間、構造物、物体、自然、空のカテゴリーにまたがる19の評価クラスをカバーしています。
  • Cityscapesは、セマンティックセグメンテーションのための平均Intersection over Union(mIoU)などの標準化された評価指標を提供しており、モデルのパフォーマンスを効果的に比較できます。

データセット構造

Ultralyticsの構成では、準備後に以下のレイアウトを想定しています:

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

セマンティックマスクはシングルチャネルのPNGファイルです。元のCityscapesラベルIDはlabel_mappingセクションを通じて標準の19の学習IDにマッピングされ、無視されるラベルやvoidラベルは255にマッピングされて学習や評価から除外されます。公式のleftImg8bitおよびgtFineアーカイブをCityscapesのウェブサイトからダウンロードしてデータセットルートに解凍してください。その後、cityscapes.yaml内の準備ブロックが画像とマスクをこのレイアウトに整理します。

アプリケーション

Cityscapesは、セマンティックセグメンテーションにおけるディープラーニングモデルの学習と評価に広く使用されており、特に自動運転、先進運転支援システム(ADAS)、および都市ロボティクスにおいて重要です。

高解像度の画像と詳細なアノテーションは、リアルタイムシーン解析、車線や障害物の理解、そして複雑な都市環境における密なピクセルレベルの理解を必要とするあらゆるタスクの研究において価値があります。

データセット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モデルを画像サイズ1024で100エポック学習するには、以下のコードスニペットを使用できます。利用可能な引数の詳細なリストについては、モデルのトレーニングページを参照してください。

学習例
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データセットを使用する場合は、以下の論文を引用してください:

引用
@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データセットのウェブサイトをご覧ください。

FAQ

Cityscapesデータセットとは何ですか?また、なぜコンピュータビジョンにとって重要なのですか?

Cityscapesデータセットは、ヨーロッパ50都市で撮影された都市のストリートシーンに焦点を当てた、大規模なセマンティックセグメンテーションベンチマークです。19の評価クラスにわたる5,000枚の緻密にアノテーションされた画像が含まれており、自動運転や都市シーン理解の研究における基礎的なリソースとなっています。その高解像度画像、密なアノテーション、および標準化された平均Intersection over Union(mIoU)指標は、密な予測モデルのベンチマークに最適です。

Cityscapesデータセットを使用してYOLOモデルを学習するにはどうすればよいですか?

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データセットはどのように構成されていますか?

準備後、データセットはimages/{train,val,test}/およびmasks/{train,val,test}/ディレクトリに整理され、各画像はシングルチャネルのPNGマスクとペアになっています。UltralyticsのYAMLファイルは、masks_dir: masksフィールドを通じて各画像をマスクとペアにし、label_mappingを使用して元のCityscapesラベルIDを標準の19の連続した学習IDに変換し、無視されるラベルやvoidラベルを255にマッピングします。

Cityscapesを手動でダウンロードする必要がありますか?

Yes. Cityscapes requires accepting the dataset terms on the official website. Download and extract leftImg8bit and gtFine into the cityscapes dataset root before using the preparation block in cityscapes.yaml to create the expected images/ and masks/ layout.

なぜCityscapesはlabel_mappingを使用するのですか?

Cityscapesのソースマスクには、評価に使用される19の学習IDとは異なる元のラベルIDが保存されています。label_mappingセクションは有効なラベルを連続したクラスID 018に変換し、無視されるラベルやvoidラベルに255を割り当てることで、学習および検証中の損失計算とメトリクス算出からそれらを除外します。

コメント