セマンティックセグメンテーション#
Semantic segmentationは、画像内のすべてのピクセルにクラスラベルを割り当て、シーン全体をカバーする高密度なクラスマップを生成します。個別のオブジェクトを分離するinstance segmentationとは異なり、セマンティックセグメンテーションは、存在する個別のオブジェクトの数に関係なく、同じクラスのすべてのピクセルをまとめてグループ化します。
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
セマンティックセグメンテーションモデルの出力は、各ピクセルの値が予測されたクラスIDに対応する、単一の高さ×幅のクラスマップです。このため、セマンティックセグメンテーションは、自動運転、医療画像解析、土地被覆マッピングなどのシーン解析タスクに最適です。
セマンティックセグメンテーションには、task=semantic または yolo semantic CLI タスクを使用します。YOLO26 セマンティックセグメンテーションのモデルファイルには、yolo26n-sem.pt などの -sem 接尾辞が使用されます。
モデル#
Cityscapesデータセットで事前学習されたYOLO26セマンティックセグメンテーションモデルを以下に示します。
モデルは、初回使用時に最新の Ultralytics リリースから自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | mIoUval | 速度 RTX3090 PyTorch (ms) | パラメータ (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 22.7 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 88.8 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 304.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.9 | 384.7 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.2 | 861.7 |
- **mIoUval**の値は、Cityscapes検証セットにおける単一モデル・単一スケールのものです。
yolo semantic val data=cityscapes.yaml device=0 imgsz=2048で再現します - Speedのメトリクスは、RTX3090インスタンスを使用してCityscapes検証画像の平均を取ったものです。
yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048で再現します - ParamsおよびFLOPsの値は、ConvレイヤーとBatchNormレイヤーを統合する
model.fuse()実行後のフューズ済みモデルに関するものです。事前学習済みチェックポイントは全トレーニングアーキテクチャを保持しており、より高い数値を表示する場合があります。
ADE20Kデータセットで事前学習されたYOLO26セマンティックセグメンテーションモデルを以下に示します。
モデルは、初回使用時に最新の Ultralytics リリースから自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | mIoUval | 速度 RTX3090 PyTorch (ms) | パラメータ (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.4 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.4 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.3 | 59.5 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.0 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.1 |
- **mIoUval**の値は、ADE20K検証セットにおける単一モデル・単一スケールのものです。
yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640で再現し、yolo26n-sem-ade20k.ptを希望するyolo26*-sem-ade20k.ptチェックポイントに置き換えてください。 - Speedのメトリクスは、RTX3090インスタンスを使用してADE20K検証画像の平均を取ったものです。
yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640で再現し、yolo26n-sem-ade20k.ptを希望するyolo26*-sem-ade20k.ptチェックポイントに置き換えてください。 - ParamsおよびFLOPsの値は、ConvレイヤーとBatchNormレイヤーを統合する
model.fuse()実行後のフューズ済みモデルに関するものです。事前学習済みチェックポイントは全トレーニングアーキテクチャを保持しており、より高い数値を表示する場合があります。
トレーニング#
Cityscapes8データセットでYOLO26n-semを100epochs、画像サイズ1024でトレーニングします。利用可能な引数の完全なリストについては、Configurationページを参照してください。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.yaml") # build a new model from YAML
model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)trainモードの詳細については、Trainページを参照してください。セマンティックセグメンテーションモデルは、Ultralytics Platform cloud trainingを使用してトレーニングすることもできます。
データセット形式#
セマンティックセグメンテーションデータセットは、通常PNG形式の単一チャンネルマスク画像を使用します。ここでは各ピクセル値がクラスIDを表します。値が255のピクセルは「無視(ignore)」として扱われ、損失の計算から除外されます。データセットのYAMLには、画像および対応するマスクディレクトリへのパスを指定する必要があります。フォーマットの詳細については、Semantic Segmentation Dataset Guideを参照してください。サポートされているデータセットには、CityscapesおよびADE20Kが含まれます。Ultralytics Platform annotationを使用して、セマンティックデータセットの管理とラベリングを行うことができます。
検証#
セマンティックセグメンテーションデータセットで、トレーニング済みのYOLO26n-semモデルのaccuracyを検証します。意図したデータセットYAMLが検証で使用されるように、dataを明示的に渡してください。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou # mean Intersection over Union
metrics.pixel_accuracy # overall pixel accuracy予測#
トレーニング済みのYOLO26n-semモデルを使用して画像に対する予測を実行します。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
semantic_mask = result.semantic_mask.data # class map, shape (H,W), integer dtype selected by class countpredict モードの詳細については、Predict ページを参照してください。
結果の出力#
YOLOセマンティックセグメンテーションは、画像ごとに1つのResultsオブジェクトを返します。各結果には、オブジェクトマスクのリストではなく、画像全体に対する1つの高密度クラスマップが格納されます。予測されたクラスが同じであるピクセルは、別々のオブジェクトに属している場合でも、同じクラスIDを共有します。
| 属性 | タイプ | 形状 | 説明 |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | 密なクラスマップ。 |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | クラスID。クラス数に応じてdtypeが選択されます。 |
result.masks | - | - | インスタンスマスクなし。 |
result.boxes | - | - | インスタンスボックス/信頼度なし。 |
result.masks.xy | - | - | デフォルトのポリゴンはありません。 |
すべてのタスクに共通するタスク固有の Results フィールドについては、Predict Results by Task セクションを参照してください。
セマンティックセグメンテーションは高密度なクラスマップを予測し、そのマップを画像の形状にリサイズして可視化や後処理に使用します。そのため、車線、コートのライン、ポール、電線などの非常に細い構造物は、推論時の imgsz が元の画像の解像度よりも大幅に低い場合、階段状に見えることがあります。境界がギザギザに見える場合は、まず元の .pt の PyTorch モデルで、1024、1280、またはソース画像のサイズに最も近い実用的な値など、より大きな imgsz で再テストしてください。予測されたクラスマップに存在しなかった細かいディテールは低解像度の入力では復元できないため、.pt の出力が許容範囲内であることを確認した上で、エクスポートされたモデルを使用してください。
インスタンスセグメンテーションとセマンティックセグメンテーションの比較#
| 側面 | Instance Segmentation (task="segment") | Semantic Segmentation (task="semantic") |
|---|---|---|
| 予測の目的 | 検出された各オブジェクトを個別にセグメント化する | すべてのピクセルに1つのクラスIDを割り当てる |
| 出力フィールド | result.masks | result.semantic_mask |
| メインデータ | result.masks.data | result.semantic_mask.data |
| 形状 | (N,H,W) | (H,W) |
| ピクセル値 | バイナリマスクの値: 0または1 | クラスID: 0、1、2、... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| 同クラスのオブジェクト | 個別のインスタンスとして保持 | 同じクラス領域に統合 |
| ポリゴン | はい、result.masks.xyおよびresult.masks.xynを介して可能です。 | デフォルトではポリゴン出力なし |
| ボックスと信頼度 | はい、result.boxesを介して可能です。 | インスタンスごとのボックスや信頼度スコアなし |
| 一般的な用途 | カウント、トラッキング、クロッピング、オブジェクトレベルの測定 | 詳細なシーンラベリング、走行可能領域、土地被覆、医療領域 |
エクスポート#
YOLO26n-semモデルをONNXやCoreMLなどの異なる形式にエクスポートします。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")利用可能なYOLO26セマンティックセグメンテーションのエクスポートフォーマットを以下の表に示します。format引数(つまりformat='onnx'やformat='engine')を使用して、任意のフォーマットにエクスポートできます。エクスポートされたモデルに対して、直接予測や検証を行うことができます(例: yolo predict model=yolo26n-sem.onnx)。エクスポート完了後、モデルの使用例が表示されます。
| 形式 | format 引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz、quantize、dynamic、simplify、opset、nms、batch、data、fraction、device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz、quantize、dynamic、nms、batch、data、fraction、device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz、quantize、dynamic、simplify、opset、workspace、nms、batch、data、fraction、device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz、keras、quantize、opset、nms、batch、data、fraction、device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz、batch、device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz、batch、dynamic、quantize、simplify、opset、nms、device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz、batch、device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz、name、quantize、data、fraction、simplify、conf、iou |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
詳細な export については、Export ページをご覧ください。
よくある質問 (FAQ)#
カスタムデータセットでYOLO26セマンティックセグメンテーションモデルをトレーニングするにはどうすればよいですか?#
カスタムデータセットでYOLO26セマンティックセグメンテーションモデルをトレーニングするには、各ピクセル値がクラスID(0, 1, 2, ...)を表し、値が255のピクセルがトレーニング中に無視されるPNGマスク画像を用意する必要があります。画像とマスクのディレクトリを指定したデータセットYAMLファイルを作成し、モデルをトレーニングします:
from ultralytics import YOLO
# Load a pretrained YOLO26 semantic segmentation model
model = YOLO("yolo26n-sem.pt")
# Train the model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)利用可能なその他の引数については、設定ページを確認してください。
インスタンスセグメンテーションとセマンティックセグメンテーションの違いは何ですか?#
インスタンスセグメンテーションとセマンティックセグメンテーションは、どちらもピクセルレベルのタスクですが、重要な違いがあります:
- **Semantic segmentation**は、すべてのピクセルにクラスラベルを割り当てますが、同じクラスの個々のオブジェクト同士を区別しません。例えば、シーン内のすべての車は同じクラスラベルを共有します。
- **Instance segmentation**は、個々のオブジェクトを別々に識別し、たとえそれらが同じクラスに属していても、オブジェクトごとに明確なマスクを生成します。
セマンティックセグメンテーションは、自動運転や土地被覆マッピングのようなシーン理解タスクに最適ですが、個々のオブジェクトのカウントやトラッキングが重要な場合にはインスタンスセグメンテーションが推奨されます。
インスタンスセグメンテーションデータを使用してセマンティックセグメンテーションをトレーニングできますか?#
はい。データセットがUltralytics YOLOのポリゴンラベル(画像ごとに1つの.txt)を使用している場合は、データセットYAMLからmasks_dirを除外し、データセットのルートにある画像と並んでmasks/フォルダが存在しないことを確認してください(masks_dirが設定されていなくても、フォルダが存在するだけでPNGマスクモードがトリガーされます)。これにより、ローダーがオンザフライでポリゴンを画像ごとのセマンティックマスクに変換します。マルチクラスデータセット(N > 1)の場合、追加のbackgroundクラスがnamesに自動的に追加されます。シングルクラスデータセット(N == 1)の場合、トレーニングは1クラスのまま維持され、宣言したクラスはマスク内で1になり、カバーされていないピクセルは0になります。詳細はSemantic Segmentation Dataset Guideを参照してください。
セマンティックセグメンテーションでは、どのデータセットがサポートされていますか?#
Ultralytics YOLO26は、いくつかのセマンティックセグメンテーションデータセットに対して組み込みの設定を提供しています:
- Cityscapes: 19のクラスを持つ都市のストリートシーンで、自動運転研究に広く使用されています。
- ADE20K: 150のクラスを持つ大規模なシーン解析データセット。
また、ピクセル値がクラスIDに対応するPNGマスクアノテーションを提供する任意のカスタムデータセットを使用することもできます。
事前学習済みのYOLO26セマンティックセグメンテーションモデルを検証するにはどうすればよいですか?#
評価に使用したデータセットYAMLを使用して、事前学習済みのYOLO26セマンティックセグメンテーションモデルを検証します:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-sem.pt")
# Validate the model
metrics = model.val(data="cityscapes.yaml")
print("Mean IoU:", metrics.miou)
print("Pixel Accuracy:", metrics.pixel_accuracy)これらの手順により、セマンティックセグメンテーションの性能を評価するための標準的な尺度である平均Intersection over Union (mIoU)やピクセル精度などの検証メトリクスを得ることができます。
YOLO26セマンティックセグメンテーションモデルをONNX形式にエクスポートするにはどうすればよいですか?#
PythonまたはCLIコマンドを使用して、YOLO26セマンティックセグメンテーションモデルをONNX形式にエクスポートします:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-sem.pt")
# Export the model to ONNX format
model.export(format="onnx")さまざまな形式へのエクスポートの詳細については、エクスポートページを参照してください。