Ultralytics YOLO27:

Ultralytics YOLO を使用したセマンティックセグメンテーション#

Semantic segmentation examples

セマンティックセグメンテーションは、画像内のすべてのピクセルにクラスラベルを割り当て、シーン全体をカバーする密なクラスマップを生成します。個々のオブジェクトを分離するインスタンスセグメンテーションとは異なり、セマンティックセグメンテーションでは、異なるオブジェクトがいくつ存在するかにかかわらず、同じクラスのすべてのピクセルをまとめて扱います。



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-sem1024 × 204878.34.4 ± 0.01.623.8
YOLO26s-sem1024 × 204880.88.4 ± 0.06.591.0
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3305.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.8388.2
YOLO26x-sem1024 × 204883.648.9 ± 0.240.1866.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で再現できます。
  • ParamsFLOPsの値は、ConvレイヤーとBatchNormレイヤーを統合するmodel.fuse()後の融合モデルの値です。事前学習済みチェックポイントは完全な学習アーキテクチャを保持しているため、より大きい値になる場合があります。

ADE20Kデータセットで事前学習されたYOLO26セマンティックセグメンテーションモデルを以下に示します。

モデルは、初回使用時に最新のUltralytics リリースから自動的にダウンロードされます。

モデルサイズ
(ピクセル)
mIoUval速度
RTX3090 PyTorch
(ms)
パラメーター数
(M)
FLOPs
(B)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.5
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.5
YOLO26m-sem-ade20k64047.44.7 ± 0.314.459.6
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.2
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.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チェックポイントに置き換えて再現できます。
  • ParamsFLOPsの値は、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では、画像と対応するマスクディレクトリへのパスを指定する必要があります。形式の詳細については、セマンティックセグメンテーションデータセットガイドを参照してください。サポートされているデータセットには、CityscapesADE20Kがあります。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 count

Predictページで、predict モードの詳細をすべて確認できます。

結果の出力#

YOLOセマンティックセグメンテーションは、画像ごとに1つのResultsオブジェクトを返します。各結果には、オブジェクトマスクのリストではなく、画像全体に対する1つの密なクラスマップが格納されます。同じ予測クラスのピクセルは、別々のオブジェクトに属している場合でも、同じクラスIDを共有します。

属性形状説明
result.semantic_maskSemanticMask(H,W)密なクラスマップです。
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)クラスIDです。dtypeはクラス数によって選択されます。
result.masks--インスタンスマスクはありません。
result.boxes--インスタンスのボックス/信頼度はありません。
result.masks.xy--デフォルトのポリゴンはありません。

すべてのタスクにおけるタスク固有の Results フィールドについては、タスク別の予測結果セクションを参照してください。

マスク境界の品質

セマンティックセグメンテーションでは、密なクラスマップを予測し、そのマップを可視化および下流処理のために画像の形状へリサイズします。そのため、レーンマーカー、コートライン、ポール、ワイヤーなどの非常に細い構造は、推論が元画像の解像度よりはるかに小さいimgszで実行されると、階段状に見えることがあります。境界がギザギザに見える場合は、まずネイティブのPyTorch .ptモデルを、10241280、または元画像サイズに実用上最も近い値など、より大きなimgszで再テストしてください。予測されたクラスマップに存在しなかった細部は低解像度入力では復元できないため、.ptの出力が許容可能であることを確認してから、エクスポートしたモデルを使用してください。

インスタンスセグメンテーションとセマンティックセグメンテーションの比較#

項目インスタンスセグメンテーション(task="segment"セマンティックセグメンテーション(task="semantic"
予測の目的検出された各オブジェクトを個別にセグメント化しますすべてのピクセルに1つのクラスIDを割り当てます
出力フィールドresult.masksresult.semantic_mask
主要データresult.masks.dataresult.semantic_mask.data
形状(N,H,W)(H,W)
ピクセル値バイナリマスク値:0または1クラスID:012、...
Dtypetorch.uint8torch.uint8
torch.int16
torch.int32
同じクラスのオブジェクト個別のインスタンスとして保持されます同じクラス領域に統合されます
ポリゴンresult.masks.xyresult.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-
TorchScripttorchscriptyolo26n-sem.torchscriptimgszquantizedynamicnmsbatchdevice
ONNXonnxyolo26n-sem.onnximgszquantizedynamicsimplifyopsetnmsbatchdatafractiondevice
OpenVINOopenvinoyolo26n-sem_openvino_model/imgszquantizedynamicnmsbatchdatafractiondevice
TensorRTengineyolo26n-sem.engineimgszquantizedynamicsimplifyopsetworkspacenmsbatchdatafractiondevice
CoreMLcoremlyolo26n-sem.mlpackageimgszdynamicquantizenmsbatchdevice
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgszkerasquantizeopsetnmsbatchdatafractiondevice
TF GraphDefpbyolo26n-sem.pbimgszopsetbatchdevice
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgszquantizeopsetdatafractiondevice
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgszbatchdevice
MNNmnnyolo26n-sem.mnnimgszbatchdynamicquantizesimplifyopsetnmsdevice
NCNNncnnyolo26n-sem_ncnn_model/imgszquantizebatchdevice
IMX500imxyolo26n-sem_imx_model/imgszquantizedatafractionnmsdevice
RKNNrknnyolo26n-sem_rknn_model/imgszbatchnamequantizesimplifyopsetdatafractiondevice
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgszbatchdevice
Axeleraaxelerayolo26n-sem_axelera_model/imgszbatchquantizedatafractiondevice
DEEPXdeepxyolo26n-sem_deepx_model/imgszquantizesimplifyopsetdataoptimizedevice
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgszbatchnamequantizesimplifyopsetdatafractiondevice
LiteRTlitertyolo26n-sem.tfliteimgszquantizebatchdatafractiondevice
Hailohailoyolo26n-sem_hailo_model/imgsznamequantizedatafractionsimplifyconfiou
Huawei Ascendascendyolo26n-sem_ascend_model/imgszbatchnamequantizeopsetsimplifynms
Apple Core AIcoreaiyolo26n-sem.aimodelimgszbatchquantize

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ページを参照してください。

コメント