Ultralytics YOLO を使用したセマンティックセグメンテーション#
セマンティックセグメンテーションは、画像内のすべてのピクセルにクラスラベルを割り当て、シーン全体をカバーする密なクラスマップを生成します。個々のオブジェクトを分離するインスタンスセグメンテーションとは異なり、セマンティックセグメンテーションでは、異なるオブジェクトがいくつ存在するかにかかわらず、同じクラスのすべてのピクセルをまとめて扱います。
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
セマンティックセグメンテーションモデルの出力は、高さ×幅の単一のクラスマップです。各ピクセル値は、予測されたクラスIDに対応します。そのため、セマンティックセグメンテーションは、自動運転、医用画像、土地被覆マッピングなどのシーン解析タスクに適しています。
セマンティックセグメンテーションには、task=semanticまたはyolo semantic CLIタスクを使用します。YOLO26セマンティックセグメンテーションモデルのファイルには-semサフィックスが使用されます。例:yolo26n-sem.pt。
モデル#
Cityscapesデータセットで事前学習されたYOLO26セマンティックセグメンテーションモデルを以下に示します。
モデルは、初回使用時に最新のUltralytics リリースから自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | mIoUval | 速度 RTX3090 PyTorch (ms) | パラメーター数 (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 23.8 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 91.0 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 305.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.8 | 388.2 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.1 | 866.9 |
- **mIoUval**の値は、Cityscapes検証セットにおける、単一モデル・単一スケールでの値です。
yolo semantic val data=cityscapes.yaml device=0 imgsz=2048で再現できます。 - 速度の指標は、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.5 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.5 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.4 | 59.6 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.2 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.4 |
- **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チェックポイントに置き換えて再現できます。 - 速度の指標は、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()後の融合モデルの値です。事前学習済みチェックポイントは完全な学習アーキテクチャを保持しているため、より大きい値になる場合があります。
CityscapesのmIoUの予備結果については、未公開のYOLO27プレビューをご覧ください。
トレーニング#
Cityscapes8データセットで、YOLO26n-semを画像サイズ1024、100エポック学習します。使用可能な引数の一覧については、設定ページを参照してください。
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モードの詳細については、学習ページを参照してください。セマンティックセグメンテーションモデルは、Ultralytics Platformのクラウド学習でも学習できます。
データセット形式#
セマンティックセグメンテーションデータセットでは、通常PNG形式の単一チャンネルのマスク画像を使用し、各ピクセル値がクラスIDを表します。値が255のピクセルは「ignore」として扱われ、損失計算から除外されます。データセットYAMLでは、画像と対応するマスクディレクトリへのパスを指定する必要があります。形式の詳細については、セマンティックセグメンテーションデータセットガイドを参照してください。サポートされているデータセットには、CityscapesとADE20Kがあります。Ultralytics Platformのアノテーションを使用して、セマンティックデータセットを管理およびラベル付けできます。
検証#
学習済みYOLO26n-semモデルの精度を、セマンティックセグメンテーションデータセット上で検証します。検証で意図したデータセット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 フィールドについては、タスク別の予測結果セクションを参照してください。
セマンティックセグメンテーションでは、密なクラスマップを予測し、そのマップを可視化および下流処理のために画像の形状へリサイズします。そのため、レーンマーカー、コートライン、ポール、ワイヤーなどの非常に細い構造は、推論が元画像の解像度よりはるかに小さいimgszで実行されると、階段状に見えることがあります。境界がギザギザに見える場合は、まずネイティブのPyTorch .ptモデルを、1024、1280、または元画像サイズに実用上最も近い値など、より大きなimgszで再テストしてください。予測されたクラスマップに存在しなかった細部は低解像度入力では復元できないため、.ptの出力が許容可能であることを確認してから、エクスポートしたモデルを使用してください。
インスタンスセグメンテーションとセマンティックセグメンテーションの比較#
| 項目 | インスタンスセグメンテーション(task="segment") | セマンティックセグメンテーション(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 |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz、batch、quantize |
nms=None は、外部 NMS の場合は生出力をデフォルトとします。nms=False を設定して利用可能な NMS なしのヘッドを選択します。サポートされていないフォーマットは、ネイティブ出力パスにフォールバックします。上記の nms エントリは、nms=True を使用して NMS を埋め込むことができるフォーマットを特定します。
Exportページで、export の詳細をすべて確認できます。
FAQ#
カスタムデータセットで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)その他に利用可能な引数については、Configurationページを確認してください。
インスタンスセグメンテーションとセマンティックセグメンテーションはどちらもピクセルレベルのタスクですが、重要な違いがあります。
- **セマンティックセグメンテーション**はすべてのピクセルにクラスラベルを割り当てますが、同じクラスに属する個々のオブジェクトは区別しません。たとえば、シーン内のすべての車が同じクラスラベルを共有します。
- **インスタンスセグメンテーション**は個々のオブジェクトをそれぞれ識別し、同じクラスに属している場合でも、各オブジェクトに対して個別のマスクを生成します。
セマンティックセグメンテーションは、自動運転や土地被覆マッピングなどのシーン理解タスクに適しています。一方、個々のオブジェクトのカウントや追跡が重要な場合は、インスタンスセグメンテーションが適しています。
はい。データセットでUltralytics YOLOポリゴンラベル(画像ごとに
.txtを1つ)を使用している場合は、データセット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マスクアノテーションを提供するカスタムデータセットも使用できます。
評価に使用するデータセット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)これらの手順により、平均交差オーバーユニオン(mIoU)やピクセル精度など、セマンティックセグメンテーションの性能評価に標準的に使用される検証メトリクスを取得できます。
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")さまざまな形式へのエクスポートの詳細については、Exportページを参照してください。