Ultralytics YOLO27:

Ultralytics YOLOによるインスタンスセグメンテーション#

Ultralytics YOLO instance segmentation examples

インスタンスセグメンテーションは、物体検出をさらに発展させたもので、画像内の個々の物体を識別し、画像の他の部分から分離します。

インスタンスセグメンテーションモデルの出力は、画像内の各物体の輪郭を示すマスクまたは輪郭のセットと、各物体のクラスラベルおよび信頼度スコアです。インスタンスセグメンテーションは、画像内の物体の位置だけでなく、その正確な形状も把握する必要がある場合に役立ちます。



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-seg64039.633.953.3 ± 0.52.1 ± 0.02.79.3
YOLO26s-seg64047.340.0118.4 ± 0.93.3 ± 0.010.434.5
YOLO26m-seg64052.544.1328.2 ± 2.46.7 ± 0.123.6121.7
YOLO26l-seg64054.445.5387.0 ± 3.78.0 ± 0.128.0140.1
YOLO26x-seg64056.547.0787.0 ± 6.816.4 ± 0.162.8314.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_cocouse_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.uint8

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

結果の出力#

YOLOのインスタンスセグメンテーションは、画像ごとに1つのResultsオブジェクトを返します。各結果には物体レベルの予測が格納され、 検出された各インスタンスには独自のバイナリマスク、クラス、信頼度、ボックスがあります。

属性形状説明
result.masksMasks(N)インスタンスマスクです。
result.masks.datatorch.uint8(N,H,W)バイナリマスクで、値は0または1です。
result.masks.xynp.float32list[(P,2)]ピクセルポリゴンです。
result.masks.xynnp.float32list[(P,2)]正規化されたポリゴンです。
result.boxesBoxes(N)インスタンスのボックス、クラス、信頼度です。
result.boxes.clstorch.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-
TorchScripttorchscriptyolo26n-seg.torchscriptimgszquantizedynamicnmsbatchdevice
ONNXonnxyolo26n-seg.onnximgszquantizedynamicsimplifyopsetnmsbatchdatafractiondevice
OpenVINOopenvinoyolo26n-seg_openvino_model/imgszquantizedynamicnmsbatchdatafractiondevice
TensorRTengineyolo26n-seg.engineimgszquantizedynamicsimplifyopsetworkspacenmsbatchdatafractiondevice
CoreMLcoremlyolo26n-seg.mlpackageimgszdynamicquantizenmsbatchdevice
TF SavedModelsaved_modelyolo26n-seg_saved_model/imgszkerasquantizeopsetnmsbatchdatafractiondevice
TF GraphDefpbyolo26n-seg.pbimgszopsetbatchdevice
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tfliteimgszquantizeopsetdatafractiondevice
PaddlePaddlepaddleyolo26n-seg_paddle_model/imgszbatchdevice
MNNmnnyolo26n-seg.mnnimgszbatchdynamicquantizesimplifyopsetnmsdevice
NCNNncnnyolo26n-seg_ncnn_model/imgszquantizebatchdevice
IMX500imxyolo26n-seg_imx_model/imgszquantizedatafractionnmsdevice
RKNNrknnyolo26n-seg_rknn_model/imgszbatchnamequantizesimplifyopsetdatafractiondevice
ExecuTorchexecutorchyolo26n-seg_executorch_model/imgszbatchdevice
Axeleraaxelerayolo26n-seg_axelera_model/imgszbatchquantizedatafractiondevice
DEEPXdeepxyolo26n-seg_deepx_model/imgszquantizesimplifyopsetdataoptimizedevice
Qualcomm QNNqnnyolo26n-seg_qnn.onnximgszbatchnamequantizesimplifyopsetdatafractiondevice
LiteRTlitertyolo26n-seg.tfliteimgszquantizebatchdatafractiondevice
Hailohailoyolo26n-seg_hailo_model/imgsznamequantizedatafractionsimplifyconfiou
Huawei Ascendascendyolo26n-seg_ascend_model/imgszbatchnamequantizeopsetsimplifynms
Apple Core AIcoreaiyolo26n-seg.aimodelimgszbatchquantize

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

コメント