セマンティックセグメンテーションデータセットの概要
セマンティックセグメンテーションは、画像内のすべてのピクセルに1つのクラスラベルを割り当てます。インスタンスセグメンテーションとは異なり、セマンティックセグメンテーションは同じクラスの個々のオブジェクトを分離しません。トレーニングターゲットは、各ピクセルがクラスIDを保持する密なクラスマップです。
このガイドでは、Ultralytics YOLOセマンティックセグメンテーションモデルで使用されるデータセット形式を説明し、トレーニングと検証に使用可能な組み込みのデータセット構成をリストアップします。
サポートされているデータセット形式
2つのラベル形式がサポートされています。データセットローダーは、データセットのYAMLで masks_dir キーが定義されているかどうかに基づいてパスを選択します。
PNGマスク形式
セマンティックセグメンテーションデータセットは、サンプルごとに1つの画像ファイルと1つのマスクファイルを使用します。マスクは通常PNG形式のシングルチャネル画像であり、各ピクセル値は対応する画像ピクセルのクラスインデックスとなります。
- ピクセル値
0、1、2... は、データセットの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 > 1innames): an extrabackgroundclass is appended after your declared classes for pixels not covered by any polygon. The model is built withN + 1output channels and the last channel is background. - Single-class (
N == 1innames): still trained as 1 class. The mask is binary, with your declared class shown as1and pixels not covered by any polygon as0. No extra background class is added tonames. - 拡張パディング(例:ランダムクロップ)によって追加されたピクセルには、無視ラベルとして
255が使用されます。
データがすでにインスタンスポリゴンとしてラベル付けされており、同じファイルからセマンティックセグメンテーションモデルを作成したい場合は、このパスを使用してください。
データセットYAML形式
セマンティックセグメンテーションデータセットはYAMLファイルで構成されます。主なフィールドは以下の通りです:
| キー | 説明 |
|---|---|
path | データセットのルートディレクトリ。 |
train | path からの相対的なトレーニング画像パス、または絶対パス。 |
val | 検証画像のパス(path からの相対パス、または絶対パス)。 |
test | オプションのテスト画像パス。 |
masks_dir | セマンティックマスクに使用されるディレクトリ名。YOLOポリゴンラベル形式に切り替えるには、このキーを省略してください。 |
names | クラスIDとクラス名のマッピング。 |
label_mapping | ソースデータセットIDからトレーニングIDまたは ignore_label へのオプションのマッピング。 |
# 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マスク
images/trainやimages/valのような分割フォルダの下に画像を保存します。- 対応するマスクフォルダ(
masks/trainやmasks/valなど)の下に、画像ごとに1つのシングルチャネルマスクを保存します。 - マスクのピクセル値がクラスIDであることを確認してください。無視されるべきピクセルには
255を使用してください。 path、train、val、masks_dir、namesを含むデータセットYAMLを作成します。- マスク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 — ポリゴンラベル
- Lay out images and
.txtpolygon files exactly as for instance segmentation. path、train、val、namesを含むデータセットYAMLを作成します。masks_dirは省略してください。namesに「background」エントリを追加しないでください。マルチクラスデータセットの場合、ローダーが自動的に追加します。シングルクラスデータセットの場合、トレーニングは1クラスのままです。宣言されたクラスはマスク内で1になり、カバーされていないピクセルは0になります。
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carFAQ
セマンティックセグメンテーションマスクとインスタンスセグメンテーションラベルの違いは何ですか?
セマンティックセグメンテーションマスクは、密なピクセルマップです。各ピクセルはクラス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 として表示します。