Ultralytics YOLOによるインスタンスセグメンテーション#
インスタンスセグメンテーションは、物体検出をさらに発展させたもので、画像内の個々の物体を識別し、画像の他の部分から分離します。
インスタンスセグメンテーションモデルの出力は、画像内の各物体の輪郭を示すマスクまたは輪郭のセットと、各物体のクラスラベルおよび信頼度スコアです。インスタンスセグメンテーションは、画像内の物体の位置だけでなく、その正確な形状も把握する必要がある場合に役立ちます。
Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
YOLO26 Segmentモデルでは-segサフィックスを使用します。つまり、yolo26n-seg.ptです。また、COCOで事前学習されています。
モデル#
YOLO26の事前学習済みSegmentモデルを以下に示します。Detect、Segment、PoseモデルはCOCOデータセットで事前学習され、SemanticモデルはCityscapesで事前学習され、ClassifyモデルはImageNetデータセットで事前学習されています。
モデルは、初回使用時に最新のUltralytics リリースから自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | mAPbox 50-95(e2e) | mAPmask 50-95(e2e) | 速度 CPU ONNX (ms) | 速度 T4 TensorRT10 (ms) | パラメーター数 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.3 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.5 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.7 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 140.1 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 314.0 |
- **mAPval**の値は、COCO val2017データセットに対する単一モデル・単一スケールの結果です。
yolo val segment data=coco.yaml device=0 nms=Falseで再現できます。 - 速度は、Amazon EC2 P4dインスタンスを使用し、COCO valの画像全体で平均した値です。
yolo val segment data=coco.yaml batch=1 device=0|cpu nms=Falseで再現できます。 - Params および FLOPs の値は、Conv/BatchNorm の畳み込みとバッチ正規化の統合(折りたたみ)および未使用の検出ブランチの削除を行った後の、融合済みモデルの値です。事前学習済みチェックポイントは完全な学習アーキテクチャを維持しているため、より高い数値を示す場合があります。
これらのチェックポイントは、COCOの80クラスをセグメント化します。再学習せずにこのリスト外のカテゴリをセグメント化するには、クラスをテキストプロンプト、視覚的な例、または組み込み語彙として受け取るYOLOEを参照してください。
COCOのバスクおよびマスクの予備的な結果については、未公開のYOLO27プレビューをご覧ください。
トレーニング#
COCO8-segデータセットでYOLO26n-segを、画像サイズ640、100エポックで学習します。使用可能な引数の一覧については、Configurationページを参照してください。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.yaml") # build a new model from YAML
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Trainページでtrainモードの詳細をすべて確認できます。セグメンテーションモデルは、Ultralytics Platformのクラウドトレーニングでも学習できます。
データセット形式#
YOLOセグメンテーションデータセット形式の詳細については、Dataset Guideをご覧ください。既存のCOCO JSONデータセットをYOLO形式に変換するには、COCO to YOLO guideで説明されているように、convert_cocoとuse_segments=Trueを指定して組み込み関数を使用します。また、ポリゴンツールとSAMを活用したスマートアノテーションを使用して、Ultralytics Platform annotationでセグメンテーションマスクを作成することもできます。
検証#
COCO8-segデータセットで、学習済みYOLO26n-segモデルの精度を検証します。modelには学習時のdataと引数がモデル属性として保持されるため、引数は必要ありません。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # a list containing mAP50-95(B) for each category
metrics.box.image_metrics # per-image metrics dictionary for det with precision, recall, F1, TP, FP, and FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # a list containing mAP50-95(M) for each category
metrics.seg.image_metrics # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FN推論#
学習済みのYOLO26n-segモデルを使用して、画像に対する予測を実行します。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.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:
xy = result.masks.xy # mask polygons in pixel coordinates
xyn = result.masks.xyn # normalized mask polygons
masks = result.masks.data # binary masks, shape (N,H,W), dtype torch.uint8Predictページで、predict モードの詳細をすべて確認できます。
結果の出力#
YOLOのインスタンスセグメンテーションは、画像ごとに1つのResultsオブジェクトを返します。各結果には物体レベルの予測が格納され、
検出された各インスタンスには独自のバイナリマスク、クラス、信頼度、ボックスがあります。
| 属性 | 型 | 形状 | 説明 |
|---|---|---|---|
result.masks | Masks | (N) | インスタンスマスクです。 |
result.masks.data | torch.uint8 | (N,H,W) | バイナリマスクで、値は0または1です。 |
result.masks.xy | np.float32 | list[(P,2)] | ピクセルポリゴンです。 |
result.masks.xyn | np.float32 | list[(P,2)] | 正規化されたポリゴンです。 |
result.boxes | Boxes | (N) | インスタンスのボックス、クラス、信頼度です。 |
result.boxes.cls | torch.float32 | (N,) | クラスIDです。名前を取得するにはintにキャストします。 |
すべてのタスクにおけるタスク固有の Results フィールドについては、タスク別の予測結果セクションを参照してください。
セマンティックセグメンテーションとの違い#
インスタンスセグメンテーションは物体レベルのセグメンテーションです。2台の車からは、2つのマスク、2つのボックス、2つの信頼度スコアが生成されます。 セマンティックセグメンテーションはピクセルレベルの分類です。同じ車は、1つの画像サイズのクラスマップ内で同じクラスIDを持つピクセルになり、物体ごとのボックス、信頼度、デフォルトのポリゴンリストはありません。
エクスポート#
YOLO26n-segモデルをONNX、CoreMLなどの別の形式にエクスポートします。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")使用可能なYOLO26-segのエクスポート形式を以下の表に示します。format引数を使用して、任意の形式にエクスポートできます。つまり、format='onnx'またはformat='engine'を指定します。エクスポートしたモデルで直接予測または検証することもできます。つまり、yolo predict model=yolo26n-seg.onnxです。エクスポート完了後に、モデルの使用例が表示されます。
CoreMLは、静的形状での検出、インスタンスセグメンテーション、およびポーズ推定のために、埋め込みNMS(nms=True)をサポートしています。デフォルトのエクスポート(nms=None)では、NMSの処理はコンシューマー側に任されます。
| 形式 | format 引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n-seg.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-seg.torchscript | ✅ | imgsz、quantize、dynamic、nms、batch、device |
| ONNX | onnx | yolo26n-seg.onnx | ✅ | imgsz、quantize、dynamic、simplify、opset、nms、batch、data、fraction、device |
| OpenVINO | openvino | yolo26n-seg_openvino_model/ | ✅ | imgsz、quantize、dynamic、nms、batch、data、fraction、device |
| TensorRT | engine | yolo26n-seg.engine | ✅ | imgsz、quantize、dynamic、simplify、opset、workspace、nms、batch、data、fraction、device |
| CoreML | coreml | yolo26n-seg.mlpackage | ✅ | imgsz、dynamic、quantize、nms、batch、device |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz、keras、quantize、opset、nms、batch、data、fraction、device |
| TF GraphDef | pb | yolo26n-seg.pb | ❌ | imgsz、opset、batch、device |
| TF Edge TPU | edgetpu | yolo26n-seg_edgetpu.tflite | ✅ | imgsz、quantize、opset、data、fraction、device |
| PaddlePaddle | paddle | yolo26n-seg_paddle_model/ | ✅ | imgsz、batch、device |
| MNN | mnn | yolo26n-seg.mnn | ✅ | imgsz、batch、dynamic、quantize、simplify、opset、nms、device |
| NCNN | ncnn | yolo26n-seg_ncnn_model/ | ✅ | imgsz、quantize、batch、device |
| IMX500 | imx | yolo26n-seg_imx_model/ | ✅ | imgsz、quantize、data、fraction、nms、device |
| RKNN | rknn | yolo26n-seg_rknn_model/ | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| ExecuTorch | executorch | yolo26n-seg_executorch_model/ | ✅ | imgsz、batch、device |
| Axelera | axelera | yolo26n-seg_axelera_model/ | ✅ | imgsz、batch、quantize、data、fraction、device |
| DEEPX | deepx | yolo26n-seg_deepx_model/ | ✅ | imgsz、quantize、simplify、opset、data、optimize、device |
| Qualcomm QNN | qnn | yolo26n-seg_qnn.onnx | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz、quantize、batch、data、fraction、device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz、name、quantize、data、fraction、simplify、conf、iou |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz、batch、name、quantize、opset、simplify、nms |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz、batch、quantize |
nms=None は、外部 NMS の場合は生出力をデフォルトとします。nms=False を設定して利用可能な NMS なしのヘッドを選択します。サポートされていないフォーマットは、ネイティブ出力パスにフォールバックします。上記の nms エントリは、nms=True を使用して NMS を埋め込むことができるフォーマットを特定します。
Exportページで、export の詳細をすべて確認できます。
FAQ#
カスタムデータセットでYOLO26セグメンテーションモデルをトレーニングするには、まずYOLOセグメンテーション形式でデータセットを準備する必要があります。組み込みの
convert_cocoユーティリティを使用して、COCO JSONデータセットを変換できます。データセットの準備ができたら、PythonまたはCLIコマンドを使用してモデルをトレーニングできます。例from ultralytics import YOLO # Load a pretrained YOLO26 segment model model = YOLO("yolo26n-seg.pt") # Train the model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)その他に利用可能な引数については、Configurationページを確認してください。
物体検出は、物体の周囲にバウンディングボックスを描画して、画像内の物体を識別および位置特定します。一方、インスタンスセグメンテーションはバウンディングボックスを識別するだけでなく、各物体の正確な形状も輪郭化します。YOLO26のインスタンスセグメンテーションモデルは、検出した各物体の輪郭を示すマスクまたは輪郭を生成します。これは、医用画像処理や自動運転など、物体の正確な形状の把握が重要なタスクで特に役立ちます。
Ultralytics YOLO26は、高い精度とリアルタイム性能で知られる最先端モデルであり、インスタンスセグメンテーションタスクに適しています。YOLO26 SegmentモデルはCOCOデータセットで事前学習されているため、さまざまな物体に対して堅牢な性能を発揮します。さらに、YOLOは学習、検証、予測、エクスポートの機能をシームレスに統合してサポートしており、研究と産業の両方の用途で高い汎用性を備えています。
事前学習済みのYOLOセグメンテーションモデルの読み込みと検証は簡単です。PythonとCLIの両方を使用して実行する方法を以下に示します。
例from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Validate the model metrics = model.val() print("Mean Average Precision for boxes:", metrics.box.map) print("Mean Average Precision for masks:", metrics.seg.map)これらの手順により、モデル性能の評価に不可欠な平均適合率 (mAP)などの検証指標を取得できます。
YOLOセグメンテーションモデルのONNX形式へのエクスポートは簡単で、PythonまたはCLIコマンドを使用して実行できます。
例from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Export the model to ONNX format model.export(format="onnx")さまざまな形式へのエクスポートの詳細については、Exportページを参照してください。