セマンティックセグメンテーションデータセットの概要

セマンティックセグメンテーションは、画像内のすべてのピクセルに1つのクラスラベルを割り当てます。インスタンスセグメンテーションとは異なり、セマンティックセグメンテーションは同じクラスの個々のオブジェクトを分離しません。トレーニングターゲットは、各ピクセルがクラスIDを保持する密なクラスマップです。

このガイドでは、Ultralytics YOLOセマンティックセグメンテーションモデルで使用されるデータセット形式を説明し、トレーニングと検証に使用可能な組み込みのデータセット構成をリストアップします。

サポートされているデータセット形式

2つのラベル形式がサポートされています。データセットローダーは、データセットのYAMLで masks_dir キーが定義されているかどうかに基づいてパスを選択します。

PNGマスク形式

セマンティックセグメンテーションデータセットは、サンプルごとに1つの画像ファイルと1つのマスクファイルを使用します。マスクは通常PNG形式のシングルチャネル画像であり、各ピクセル値は対応する画像ピクセルのクラスインデックスとなります。

  • ピクセル値 012 ... は、データセットの names マッピングからのクラスIDを表します。
  • ピクセル値 255 は無視ラベルとして扱われ、損失およびメトリクスの計算から除外されます。
  • マスクファイルは、対応する画像ファイルと同じステム名(拡張子を除いたファイル名)である必要があります。例:frankfurt_000000_000294.png
  • サポートされているマスク拡張子は .png.PNG.bmp.tif です。

デフォルトのレイアウトでは、画像とマスクを並行したフォルダに保持します。データセットYAMLの masks_dir 値が images パスコンポーネントを置き換えてマスクを検索します。

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

For example, an image at images/train/aachen_000000_000019.png is paired with a mask at masks/train/aachen_000000_000019.png when masks_dir: masks.

YOLOポリゴンラベル形式

データセットにすでにUltralytics YOLOポリゴンラベル(画像ごとに1つの .txt ファイルがあり、<class-index> <x1> <y1> <x2> <y2> ... の行で構成)がある場合、PNGマスクへの変換なしで直接セマンティックセグメンテーションをトレーニングできます。行レベルのレイアウトについてはインスタンスセグメンテーションデータセット形式を参照してください。

このパスは、データセットYAMLで masks_dir省略されている場合に自動的に選択されます。動作:

  • ポリゴンはロード時に画像ごとのセマンティックマスクに変換され、領域によってソートされるため、重複領域では小さいオブジェクトが大きなオブジェクトを上書きします。
  • Multi-class (N > 1 in names): an extra background class is appended after your declared classes for pixels not covered by any polygon. The model is built with N + 1 output channels and the last channel is background.
  • Single-class (N == 1 in names): still trained as 1 class. The mask is binary, with your declared class shown as 1 and pixels not covered by any polygon as 0. No extra background class is added to names.
  • 拡張パディング(例:ランダムクロップ)によって追加されたピクセルには、無視ラベルとして 255 が使用されます。

データがすでにインスタンスポリゴンとしてラベル付けされており、同じファイルからセマンティックセグメンテーションモデルを作成したい場合は、このパスを使用してください。

データセットYAML形式

セマンティックセグメンテーションデータセットはYAMLファイルで構成されます。主なフィールドは以下の通りです:

キー説明
pathデータセットのルートディレクトリ。
trainpath からの相対的なトレーニング画像パス、または絶対パス。
val検証画像のパス(path からの相対パス、または絶対パス)。
testオプションのテスト画像パス。
masks_dirセマンティックマスクに使用されるディレクトリ名。YOLOポリゴンラベル形式に切り替えるには、このキーを省略してください。
namesクラスIDとクラス名のマッピング。
label_mappingソースデータセットIDからトレーニングIDまたは ignore_label へのオプションのマッピング。
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

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

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 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

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

ソースマスクIDが連続するトレーニングクラスIDと一致しない場合は、label_mapping を使用します。CityscapesおよびADE20Kには、元のラベルIDをYOLOセマンティックセグメンテーションのトレーニングIDに変換し、未使用のラベルを無視するためのマッピングが含まれています。

使用方法

PythonまたはCLIを使用してYOLO26セマンティックセグメンテーションモデルをトレーニングします:

from ultralytics import YOLO

# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

サポートされているデータセット

Ultralyticsは、以下のデータセットに対してセマンティックセグメンテーションのデータセットYAMLファイルを提供しています:

  • Cityscapes:19のトレーニングクラスを持つ都市の路上風景セマンティックセグメンテーションデータセット。
  • Cityscapes8:迅速なテストおよびCIチェック用の8画像Cityscapesサブセット。
  • ADE20K:150のセマンティッククラスを持つシーン解析データセット。

独自のデータセットを追加する

オプションA — PNGマスク

  1. images/trainimages/val のような分割フォルダの下に画像を保存します。
  2. 対応するマスクフォルダ(masks/trainmasks/val など)の下に、画像ごとに1つのシングルチャネルマスクを保存します。
  3. マスクのピクセル値がクラスIDであることを確認してください。無視されるべきピクセルには 255 を使用してください。
  4. pathtrainvalmasks_dirnames を含むデータセットYAMLを作成します。
  5. マスクIDを連続するトレーニングIDに変換する必要がある場合にのみ、label_mapping を追加します。
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

オプションB — ポリゴンラベル

  1. Lay out images and .txt polygon files exactly as for instance segmentation.
  2. pathtrainvalnames を含むデータセットYAMLを作成します。masks_dir は省略してください
  3. names に「background」エントリを追加しないでください。マルチクラスデータセットの場合、ローダーが自動的に追加します。シングルクラスデータセットの場合、トレーニングは1クラスのままです。宣言されたクラスはマスク内で 1 になり、カバーされていないピクセルは 0 になります。
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

FAQ

セマンティックセグメンテーションマスクとインスタンスセグメンテーションラベルの違いは何ですか?

セマンティックセグメンテーションマスクは、密なピクセルマップです。各ピクセルはクラスIDを保持しており、トレーニング画像1枚につき1つのマスク画像が存在します。Ultralytics YOLOにおけるインスタンスセグメンテーションラベルは、ポリゴン座標を含むテキストファイルを使用し、オブジェクトインスタンスごとに1行で記述されます。

トレーニング中に無視されるピクセル値は何ですか?

ピクセル値 255 が無視ラベルとして使用されます。これらのピクセルは損失およびメトリクスの計算からスキップされます。これは、空白領域、ラベルなしピクセル、またはトレーニングラベルセット外のクラスに役立ちます。

マスクファイル名は画像ファイル名と一致する必要がありますか?

はい。各セマンティックマスクは、対応する画像と同じファイルステムである必要があります。データセットローダーは images ディレクトリコンポーネントを masks_dir に置き換え、一致するマスクファイルを検索します。

元のデータセットのラベルIDを直接使用できますか?

はい、それらがすでに names クラスIDと一致している場合です。ソースデータセットが連続していないIDを使用している場合や、無視すべきラベルが含まれている場合は、label_mapping セクションを追加して、ソースのピクセル値をトレーニングIDに変換してください。

インスタンスセグメンテーションデータセットを使用してセマンティックセグメンテーションをトレーニングできますか?

はい。インスタンスセグメンテーションデータセットはUltralytics YOLOポリゴンラベル(画像ごとに1つの .txt ファイルがあり、<class-index> <x1> <y1> <x2> <y2> ... 行)を使用し、同じファイルをセマンティックセグメンテーションに再利用できます。データセットYAMLから masks_dir省略するだけです。ローダーはポリゴンを画像ごとのマスクにオンザフライで変換します。マルチクラスデータセット (N > 1) の場合は、余分な background クラスが追加され、モデルは N + 1 出力チャネルで構築されます。シングルクラスデータセット (N == 1) の場合、トレーニングは1クラスのままです。マスクは宣言されたクラスを 1 として表示し、カバーされていないピクセルを 0 として表示します。

コメント