セマンティックセグメンテーションデータセットの概要#
セマンティックセグメンテーションでは、画像内のすべてのピクセルにクラスラベルを割り当てます。インスタンスセグメンテーションとは異なり、セマンティックセグメンテーションでは、同じクラスに属する個々のオブジェクトを区別しません。トレーニング対象は、各ピクセルにクラスIDを格納する高密度なクラスマップです。
このガイドでは、Ultralytics YOLOのセマンティックセグメンテーションモデルで使用するデータセット形式を説明し、トレーニングと検証に利用できる組み込みのデータセット設定を紹介します。
サポートされているデータセット形式#
2種類のラベル形式に対応しています。データセットYAMLでmasks_dirキーが定義されている場合、またはデータセットのルートにある画像と同じ場所にmasks/フォルダーが存在する場合、データセットローダーはPNGマスクを選択します。それ以外の場合は、YOLOポリゴンラベルにフォールバックします。
PNGマスク形式#
セマンティックセグメンテーションデータセットでは、サンプルごとに画像ファイルとマスクファイルを1つずつ使用します。マスクは通常PNG形式のシングルチャンネル画像で、各ピクセル値が対応する画像ピクセルのクラスインデックスを表します。
- ピクセル値
0、1、2、...は、データセットのnamesマッピングに含まれるクラスIDを表します。 - ピクセル値
255は無視ラベルとして扱われ、損失とメトリクスの計算から除外されます。 - マスクファイルには、対応する画像ファイルと同じベース名を使用してください。たとえば、
frankfurt_000000_000294.pngのようにします。 - マスクファイルはデフォルトで
.pngとして解決されます。ファイルが見つからない場合は、他の対応画像拡張子も使用できます。非可逆圧縮(例:.jpg)ではクラスIDのピクセル値が損なわれるため、.pngや.tiffなどの可逆形式を使用してください。
デフォルトのレイアウトでは、画像とマスクを並列のフォルダーに配置します。データセットYAMLのmasks_dirの値でimagesパスの構成要素を置き換え、マスクを検索します。
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/たとえば、masks_dir: masksの場合、images/train/aachen_000000_000019.pngにある画像にはmasks/train/aachen_000000_000019.pngにあるマスクが対応します。
YOLOポリゴンラベル形式#
データセットにすでにUltralytics YOLOポリゴンラベル(画像ごとに.txtが1つあり、<class-index> <x1> <y1> <x2> <y2> ...の行を含む)がある場合、PNGマスクに変換せずに、そのラベルから直接セマンティックセグメンテーションをトレーニングできます。行単位のレイアウトについては、インスタンスセグメンテーションのデータセット形式を参照してください。
この方法は、データセットYAMLでmasks_dirが省略され、かつデータセットのルートにある画像と同じ場所にmasks/フォルダーが存在しない場合に自動選択されます。残っているmasks/フォルダーを削除または名前変更してください。そうしないと、ローダーはPNGマスクモードにフォールバックし、代わりにそのフォルダー内のマスクを検索します。動作は次のとおりです。
- ポリゴンは読み込み時に画像ごとのセマンティックマスクに変換され、重複領域では小さいオブジェクトが大きいオブジェクトより優先されるよう、面積順に並べ替えられます。
- マルチクラス(
names内のN > 1): 宣言済みクラスの後ろにbackgroundクラスが追加され、どのポリゴンにも覆われていないピクセルに割り当てられます。モデルはN + 1個の出力チャンネルで構築され、最後のチャンネルが背景になります。 - シングルクラス(
names内のN == 1): 引き続き1クラスとしてトレーニングされます。マスクはバイナリで、宣言したクラスを1、どのポリゴンにも覆われていないピクセルを0として表します。namesには背景クラスが追加されません。 - ランダムクロップなどのデータ拡張によるパディングで追加されたピクセルも、無視ラベル
255を使用します。
データにすでにインスタンスポリゴンのラベルが付いており、同じファイルからセマンティックセグメンテーションモデルを作成する場合に、この方法を使用してください。
データセットのYAML形式#
セマンティックセグメンテーションデータセットはYAMLファイルで設定します。主なフィールドは次のとおりです。
| キー | 説明 |
|---|---|
path | データセットのルートディレクトリ。 |
train | pathを基準としたトレーニング画像のパス、または絶対パス。 |
val | pathを基準とした検証画像のパス、または絶対パス。 |
test | 省略可能なテスト画像のパス。 |
masks_dir | セマンティックマスクに使用するディレクトリ名。このキーを省略し(データセットのルートにmasks/フォルダーがない場合)、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
# 事前学習済みのセマンティックセグメンテーションモデルを読み込む
model = YOLO("yolo26n-sem.pt")
# Cityscapes8セマンティックセグメンテーションデータセットで学習する
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)サポート対象のデータセット#
Ultralyticsは、これらのデータセット用のセマンティックセグメンテーションデータセットYAMLファイルを提供しています。事前学習済みモデルのベンチマーク表全体については、セマンティックセグメンテーションタスクのページをご覧ください。
- Cityscapes:トレーニング用クラスを19種類含む、都市の道路シーン向けセマンティックセグメンテーションデータセットです。
- Cityscapes8:迅速なテストとCIチェック向けの、Cityscapesの8画像サブセットです。
- ADE20K:150種類のセマンティッククラスを含む、シーン解析用データセットです。
独自のデータセットを追加する#
オプションA — PNGマスク#
- 画像を
images/trainやimages/valなどの分割フォルダーに保存します。 - 画像ごとに1つの単一チャンネルマスクを、対応するマスクフォルダー(
masks/trainやmasks/valなど)に保存します。 - マスクのピクセル値がクラス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 — ポリゴンラベル#
- インスタンスセグメンテーションの場合とまったく同じように、画像と
.txtのポリゴンファイルを配置します。 path、train、val、namesを含むデータセットYAMLを作成し、masks_dirは省略します。- データセットのルートにある画像の隣に
masks/フォルダーが存在しないことを確認してください。このフォルダーがあるだけで、YAMLにmasks_dirがなくても、ローダーはPNGマスクモードに切り替わります。 namesに「background」エントリを追加しないでください。マルチクラスデータセットでは、ローダーが自動的に1つ追加します。シングルクラスデータセットでは学習時のクラス数は1のままで、宣言したクラスはマスク内で1になり、未被覆のピクセルは0になります。
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics Platformは、セマンティックタスク向けのポリゴンアノテーションツールに加えて、SAMを活用したSmartアノテーションを提供します。ブラウザー上で直接アノテーションを行い、作成したポリゴンラベル付きデータセットをエクスポートまたは学習に使用できるため、この構成を手作業で設定する必要はありません。
よくある質問#
セマンティックセグメンテーションのマスクは、ピクセル単位の密なマップです。各ピクセルにはクラスIDが格納され、学習画像ごとにマスク画像が1枚あります。Ultralytics YOLOのインスタンスセグメンテーションラベルは、ポリゴン座標を記載したテキストファイルを使用し、オブジェクトインスタンスごとに1行を割り当てます。
無視ラベルにはピクセル値
255を使用します。これらのピクセルは損失とメトリクスの計算時にスキップされるため、void領域、未ラベルのピクセル、学習ラベルセットに含まれないクラスに役立ちます。はい。各セマンティックマスクのファイル名(拡張子を除く部分)は、対応する画像と同じにしてください。データセットローダーは
imagesディレクトリの要素をmasks_dirに置き換えて、対応するマスクファイルを検索します。.pngのマスクが見つからない場合は、ほかにサポートされている画像拡張子(.jpg、.tiffなど)も順に検索します。ただし、このフォールバックでは可逆形式であることを確認しないため、可逆形式のみを推奨します。すでに
namesのクラスIDと一致していれば使用できます。ソースデータセットで連続していないIDが使われている場合や、無視するラベルが含まれている場合は、ソースのピクセル値を学習IDに変換するためのlabel_mappingセクションを追加してください。はい。インスタンスセグメンテーションのデータセットでは、Ultralytics YOLOのポリゴンラベル(画像ごとに
.txtが1つあり、<class-index> <x1> <y1> <x2> <y2> ...行を含む)を使用します。同じファイルをセマンティックセグメンテーションにも再利用できます。データセットYAMLからmasks_dirを省略し、データセットのルートにある画像の隣にmasks/フォルダーが存在しないことを確認してください。このフォルダーがあるだけで、masks_dirが設定されていなくてもPNGマスクモードが有効になります。ローダーはポリゴンを画像ごとのマスクにオンザフライで変換します。マルチクラスデータセット(N > 1)では、追加のbackgroundクラスが追加され、モデルはN + 1個の出力チャンネルで構築されます。シングルクラスデータセット(N == 1)では学習時のクラス数は1のままで、マスク上では宣言したクラスが1、未被覆のピクセルが0として示されます。Ultralyticsには、Cityscapes(都市シーンの19クラス)、パイプラインテスト向けの軽量なCityscapes8サブセット、ADE20K(シーン解析の150クラス)用の、そのまま使えるデータセットYAMLファイルが含まれています。各ページには、クラス一覧、ダウンロード手順、検証済みの学習例が記載されています。