セマンティックセグメンテーション

Semantic segmentation examples

セマンティックセグメンテーションは、画像内のすべてのピクセルにクラスラベルを割り当て、シーン全体を網羅する高密度なクラスマップを作成します。個々のオブジェクトを分離するインスタンスセグメンテーションとは異なり、セマンティックセグメンテーションは、いくつの個別のオブジェクトが存在するかに関係なく、同じクラスのすべてのピクセルをグループ化します。

セマンティックセグメンテーションモデルの出力は、各ピクセル値が予測されたクラスIDに対応する単一の高さ×幅のクラスマップです。これにより、セマンティックセグメンテーションは、自動運転、医療画像診断、土地被覆マッピングなどのシーン解析タスクに最適です。

ヒント

Use task=semantic or the yolo semantic CLI task for semantic segmentation. YOLO26 semantic segmentation model files use the -sem suffix, such as yolo26n-sem.pt.

モデル

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

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

モデルサイズ
(ピクセル)
mIoUval速度
RTX3090 PyTorch
(ms)
パラメータ
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.622.7
YOLO26s-sem1024 × 204880.88.4 ± 0.06.588.8
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3304.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.9384.7
YOLO26x-sem1024 × 204883.648.9 ± 0.240.2861.7
  • mIoUval 値は、Cityscapes検証セットにおけるシングルモデル・シングルスケールのものです。
    再生成するには yolo semantic val data=cityscapes.yaml device=0 imgsz=2048 を使用してください。
  • 速度(Speed) メトリクスは、Amazon EC2 P4dインスタンスを使用してCityscapes検証画像で平均化されています。
    再生成するには yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 を使用してください。
  • パラメータ数(Params) および FLOPs の値は、Conv層とBatchNorm層をマージする model.fuse() 後のフューズされたモデルのものです。事前学習済みチェックポイントは完全な学習アーキテクチャを保持しており、より高い数値を示す場合があります。

Train(学習)

Cityscapes8データセットで、画像サイズ1024にてYOLO26n-semを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 モードの詳細については、学習ページを参照してください。

データセット形式

セマンティックセグメンテーションデータセットは、各ピクセル値がクラスIDを表す単一チャネルのマスク画像(通常はPNG)を使用します。値が255のピクセルは「無視」として扱われ、損失計算から除外されます。データセットのYAMLには、画像および対応するマスクディレクトリへのパスを指定する必要があります。形式の詳細については、セマンティックセグメンテーションデータセットガイドを参照してください。サポートされているデータセットには Cityscapes および ADE20K があります。

Val(検証)

学習済み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  # height x width class map (torch.Tensor)

predict モードの詳細については、予測ページを参照してください。

Export(エクスポート)

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.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, batch, device
TF Litetfliteyolo26n-sem.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-sem_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-sem_deepx_model/imgsz, int8, data, optimize, device

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)

利用可能な引数の詳細については、構成ページを確認してください。

インスタンスセグメンテーションとセマンティックセグメンテーションの違いは何ですか?

インスタンスセグメンテーションとセマンティックセグメンテーションは、どちらもピクセルレベルのタスクですが、重要な点で異なります:

  • **セマンティックセグメンテーション**は、すべてのピクセルにクラスラベルを割り当てますが、同じクラス内の個々のオブジェクトを区別しません。例えば、シーン内のすべての車は同じクラスラベルを共有します。
  • **インスタンスセグメンテーション**は、個々のオブジェクトを別々に識別し、同じクラスに属していても、オブジェクトごとに個別のマスクを生成します。

セマンティックセグメンテーションは、自動運転や土地被覆マッピングなどのシーン理解タスクに適しており、インスタンスセグメンテーションは、個々のオブジェクトをカウントまたは追跡することが重要な場合に推奨されます。

インスタンスセグメンテーションのデータを使用してセマンティックセグメンテーションを学習できますか?

Yes. If your dataset uses Ultralytics YOLO polygon labels (one .txt per image), omit masks_dir from the dataset YAML and the loader will convert polygons to per-image semantic masks on the fly. For multi-class datasets (N > 1) an extra background class is appended to names automatically. For single-class datasets (N == 1) training stays at 1 class — your declared class becomes 1 in the mask and uncovered pixels become 0. See the Semantic Segmentation Dataset Guide for details.

セマンティックセグメンテーションではどのようなデータセットがサポートされていますか?

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")

さまざまな形式へのエクスポートの詳細については、エクスポートページを参照してください。

コメント