YOLO Vision 2026:

YOLOE:リアルタイムオープンボキャブラリー検出およびセグメンテーション#

Ultralytics YOLOE (Real-Time Seeing Anything) は、オープンボキャブラリー検出およびインスタンスセグメンテーションモデルです。トレーニング時に固定されたクラスリストの代わりに、推論時にテキストプロンプト、視覚的な例、または組み込みの4,585名のボキャブラリーとして、必要なカテゴリを受け取ります。Ultralytics YOLO アーキテクチャ(YOLOv8、YOLO11YOLO26)をベースにし、YOLO-WorldにインスパイアされたYOLOEは、クローズドセットのYOLOに近い速度でありながら、最先端のゼロショット精度を実現します。



Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀

クイックスタート#

必要なクラスを指定して実行します。YOLOE-26は、これまでに一度もトレーニングされたことのないカテゴリのバウンディングボックスとインスタンスセグメンテーションマスクを返します。

名前を付けられるものは何でも検出可能
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")

# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])

results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()

最初の set_classes() の呼び出しによりテキストエンコーダーがダウンロードされます。ネットワーク接続のないマシンにデプロイする前に、インストールと要件を確認してください。

プロンプトモードの選択#

YOLOEは3つのプロンプトモードをサポートしており、選択によってロードするチェックポイントとクラスラベルの外観が決まります。推論時に提供できるものに一致する行を選択してください。

YOLOE detecting and segmenting objects from text prompts, visual prompts, and its prompt-free vocabulary

モードチェックポイント提供するデータ結果のクラス名使用する場合
テキストプロンプト*-seg.pt文字列としてのクラス名渡した名前そのものターゲットを言葉で説明できる場合(通常の選択)
ビジュアルプロンプト*-seg.pt参照画像上のサンプルボックス一般的な object0object1 など特定のパーツ、ロゴ、欠陥など、ターゲットを言葉で表現できない場合
プロンプトフリー*-seg-pf.ptなし組み込みの4,585名のボキャブラリーからの名前カタログ作成や探索を行っており、何を検索すべきか事前にわからない場合
2つのよくある注意点
  • ビジュアルプロンプトにはラベルが引き継がれません。 visual_prompts 内のクラスIDはサンプルをグループ化するものであり、モデルはそれらを object0object1 のように報告します。ご自身の名前に手動でマッピングしてください。
  • プロンプトフリーのチェックポイントは set_classes() を拒否します。 *-seg-pf.pt モデルでこれを呼び出すと、AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models. が発生します。独自のクラスが必要な場合は、代わりに *-seg.pt チェックポイントをロードしてください。

インストールと要件#

YOLOEはメインのUltralyticsパッケージに含まれて提供されます:

pip install -U ultralytics

テキストプロンプトには、その上にテキストエンコーダーが必要であり、インストール時ではなく、初回の使用時に取得されます:

  • 最初の set_classes() の呼び出しにより、GitHubから pip を用いて ultralytics/CLIP がインストールされ(トークナイザーを提供)、カレントワーキングディレクトリに TorchScript テキストエンコーダーがダウンロードされます。YOLOE-26は約254 MBの mobileclip2_b.ts を取得し、YOLOE-11およびYOLOE-v8は mobileclip_blt.ts を取得します。実行元のディレクトリから一度ダウンロードを実行するか、ファイルをそこにコピーしてください。そうしないと、再度取得されます。
  • 両方のステップでネットワークアクセスが必要になるため、オフラインまたはエアギャップ環境のマシンにデプロイする前に、プロンプト付きの予測を1回実行してください。
  • ビジュアルプロンプトとプロンプトフリーのチェックポイントには、テキストエンコーダーは一切不要です。

YOLOE-26チェックポイントには ultralytics 8.4.0 以降が必要ですが、YOLOE-11およびYOLOE-v8ファミリーは以前のリリースでも利用可能です。テキストプロンプトによる予測を1回行うことで、チェックポイントのダウンロード、CLIPのインストール、テキストエンコーダー、推論の一連のパスが実行されます:

yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"

推論時のテキストエンコーダーのダウンロードを完全にスキップするには、プロンプトを重みに一度埋め込んで再利用します。プロンプト埋め込みの再利用を参照してください。

アーキテクチャの概要#

YOLOE Architecture

YOLOEは、標準的なYOLO構造(特徴抽出用の畳み込みバックボーン、マルチスケール融合用のネック、クラスとボックスを予測するアンカーフリーのデカップルドヘッド)を維持し、プロンプトモードごとに1つずつ、合計3つのモジュールを追加しています:

  • Re-parameterizable Region-Text Alignment (RepRTA) は、小型の補助ネットワークを介してCLIPからのテキスト埋め込みを洗練させます。このネットワークは set_classes() の呼び出しごとに1回実行され、エクスポート時には畳み込まれて消失するため、フレームあたりのコストは発生しません。すべてのフォワードパスで実際に実行されるのは、保存されたプロンプト埋め込みと領域特徴量との比較です。大規模なプロンプトセットを使用する場合のコストについては、制限事項を参照してください。
  • Semantic-Activated Visual Prompt Encoder (SAVPE) は、サンプルボックスからセマンティックおよびアクティベーションの特徴量をエンコードし、それに似たオブジェクトにモデルを適応させます。これは、ロゴや特定のパーツなど、名前を付けにくいターゲットのためのワンショットパスです。
  • Lazy Region-Prompt Contrast (LRPC) は、領域埋め込みを組み込みの4,585名のボキャブラリーと照合するため、プロンプトフリーのチェックポイントは、外部プロンプトやテキストエンコーダーなしでオブジェクトを認識します。

インスタンスセグメンテーションは、YOLOv8-Segと同様に検出ヘッドのマスクブランチから行われ、すべての予測には results[0].masks 上にマスクが付属します。モデルがエクスポートされると、オープンワールドモジュールは標準のYOLOヘッドに再パラメータ化されるため、エクスポートされたファイルは通常の検出/セグメンテーションパスを実行します。

利用可能なモデル#

以下の各チェックポイントはインスタンスセグメンテーションモデルであり、valpredictexporttrackをサポートしています。テキストプロンプトまたはビジュアルプロンプトには *-seg.ptファイルをロードし、プロンプトフリーの推論には *-seg-pf.ptファイルをロードします。これらは互換性がありません。プロンプトモードの選択を参照してください。trainをサポートしているのは *-seg.ptファイルのみです。プロンプトフリーのチェックポイントは、トレーニング済みのテキストプロンプトモデルから生成されます。スクラッチからの公式モデルのトレーニングを参照してください。

LVISにおけるYOLOEのパフォーマンス#

Ultralytics YOLO26の論文に基づく、640ピクセルでのLVIS minivalでのゼロショット結果。

テキストおよびビジュアルプロンプト#

各精度およびパラメータのセルは テキストプロンプト / ビジュアルプロンプト を示し、FLOPsは1回分記載されています。パラメータとFLOPsは、論文が評価している検出構成の値です。精度は論文のNon-E2Eの数値であり、比較対象のすべてのモデルで報告されている唯一のプロトコルです。YOLOE-26のエンドツーエンドヘッドは、テキストプロンプトで最大1.1 AP、ビジュアルプロンプトで最大2.6 AP下回ります。

モデルmAP50-95mAPrmAPcmAPfパラメータ
(M)
FLOPs
(B)
YOLOE-26n24.7 / 21.920.5 / 17.624.1 / 22.326.1 / 22.43.9 / 3.16.1
YOLOE-26s30.8 / 28.623.9 / 25.129.6 / 27.833.0 / 29.910.7 / 11.021.9
YOLOE-26m35.4 / 33.931.1 / 33.434.7 / 34.036.9 / 33.821.3 / 25.170.6
YOLOE-26l37.8 / 36.335.1 / 37.637.6 / 36.238.5 / 36.125.5 / 29.389.0
YOLOE-26x40.6 / 38.537.4 / 35.340.9 / 38.841.0 / 38.855.2 / 65.2197.7
YOLOE-11s27.5 / 26.321.4 / 22.526.8 / 27.129.3 / 26.410.7 / 10.922.7
YOLOE-11m33.0 / 31.426.9 / 27.132.5 / 31.934.5 / 31.721.0 / 24.870.4
YOLOE-11l35.2 / 33.729.1 / 28.135.0 / 34.636.5 / 33.826.0 / 29.889.5
YOLOE-v8s27.9 / 26.222.3 / 21.327.8 / 27.729.0 / 25.712.3 / 12.629.8
YOLOE-v8m32.6 / 31.026.9 / 27.031.9 / 31.734.4 / 31.126.4 / 28.480.7
YOLOE-v8l35.9 / 34.233.2 / 33.234.8 / 34.637.3 / 34.143.5 / 47.3167.6

プロンプトフリー#

プロンプトフリーのチェックポイントは、プロンプトを指定することなく、組み込みのボキャブラリーから応答します。各精度セルは、YOLOE-26が評価されている2つのプロトコルである エンドツーエンド / Non-E2E を示しています。YOLO26ページではNon-E2Eの列を引用しています。

モデルmAP50-95mAPrmAPcmAPfパラメータ
(M)
FLOPs
(B)
YOLOE-26n-pf16.6 / 17.715.7 / 15.815.3 / 16.417.9 / 19.22.35.3
YOLOE-26s-pf21.4 / 22.616.2 / 20.220.1 / 20.923.5 / 24.59.020.8
YOLOE-26m-pf25.7 / 26.426.7 / 24.524.0 / 25.026.9 / 27.919.468.4
YOLOE-26l-pf27.2 / 28.026.3 / 25.725.7 / 26.828.7 / 29.523.686.8
YOLOE-26x-pf29.9 / 31.127.5 / 28.929.1 / 30.731.1 / 31.753.1194.4

テキストおよびビジュアルプロンプトの下で、YOLOE-26モデルはmAP50-95のすべての対応するスケールでYOLOE-11およびYOLOE-v8の対応モデルを上回る一方、パラメータとFLOPsの面ではv8を下回っています。同じ分割において、論文はYOLO-Worldv2を24.4 (S)、32.4 (M)、35.5 (L) と報告しており、Transformerベースの検出器であるGLIP-Tを26.0、GDINO-Tを27.4、DetCLIP-Tを34.4と報告しています。それぞれ1億5,500万から2億3,200万のパラメータを持っています。オリジナルのYOLOEの論文では、導入されたv8スケールのモデルに対する2つの結果が追加されています。LVISにおいて、YOLOE-v8sはYOLO-Worldv2-Sを 3.5 AP 上回り、トレーニングコストは3分の1、推論速度は1.4倍となっています。COCOに転移した場合、YOLOE-v8lはクローズドセットのYOLOv8-Lと比較して、4倍近い少ないトレーニング時間0.6ボックスAP および 0.4マスクAP の向上を達成しています。

論文の数値とリリースされたチェックポイントの違い

YOLO26の論文では検出構成を評価しています。リリースされた重みはセグメンテーションチェックポイントであり、マスクブランチ、SAVPE、および上部にテキストプロジェクションが追加されているため、ロードされた yoloe-26l-seg.pt は上記の2,550万および8,900万ではなく、3,540万および142.0 Bを報告します。どちらの場合も、FLOPsの数値には領域とテキストの類似性が含まれていないため、列が移動しなくても、実際のコストはプロンプトセットのサイズとともに増加します。制限事項を参照してください。

使用例#

以下のすべてのYOLOEの例は、Python APIから実行されます。テキストプロンプトによる予測、検証、エクスポート、トラッキング、および通常のトレーニングはCLIからも機能しますが、ファインチューニングのレシピとビジュアルプロンプトでは、引数としてトレーナーまたはプレディクタークラスを渡す必要があり、これはPython APIでのみ受け付けられます。

学習の使用方法#

リリースされた任意の *-seg.pt チェックポイントをご自身のYOLOデータセットでファインチューニングします。これは基本的に標準的なYOLOトレーニング手順に従いますが、違いはどのトレーナーを渡すかという点です。YOLOEPESegTrainer はクラス名をヘッドに統合し、そこからファインチューニングを行います。これは独自のラベルを使用する場合に望ましい動作であり、デフォルトのトレーナーはクラス名に対してトレーニングを行いません。



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-26s-seg.pt")

results = model.train(
    data="coco128-seg.yaml",
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: the fine-tuning trainer, not the default
)
代わりに検出モデルをトレーニングする場合

リリースされているチェックポイントはすべてセグメンテーションモデルです。検出器をトレーニングするには、対応するYAMLからモデルをビルドし、同じスケールのセグメンテーションの重みをロードし、検出トレーナーに置き換えます。他の変更は必要ありません。

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer

model = YOLOE("yoloe-26s.yaml").load("yoloe-26s-seg.pt")

results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)

Predictの使用方法#

テキストプロンプトの呼び出しは、クイックスタートに示されているものです。残りの2つのモードには、それぞれ追加の引数が必要です:

ビジュアルプロンプトは、ターゲットを説明する代わりに、モデルにサンプルを提示します。visual_prompts は、サンプルボックスの bboxes 配列と、ボックスごとに1つずつのクラスIDの cls 配列を受け取ります。IDはラベルではなく一時的なグループ化であり、0から順に並べる必要があります。結果は、選択した名前ではなく、object0object1 などの形式で返されます。

サンプルボックスは、予測対象の画像上に配置できます:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

# One example box per target, each with its own class ID
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # person, glasses
    "cls": np.array([0, 1]),
}

results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

または、refer_image として渡された別の参照画像上に配置することもできます。その場合、bboxescls はターゲットではなく、その参照内のオブジェクトを記述します:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])}  # person

results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image
    refer_image="ultralytics/assets/bus.jpg",  # Where the example boxes live
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # And the export keeps them
注意

source がビデオまたはストリームの場合、最初のフレームが自動的に refer_image になるため、渡されたプロンプトはそのフレームに適用され、ビデオの残りの部分に引き継がれます。別のフレームを選択するには、refer_image を明示的に渡してください。

sourcerefer_image の両方が torch テンソルを直接受け入れます。これは、画像が既存のパイプラインからすでに提供されている場合に便利です。テンソル自身のピクセル座標でボックスを指定してください:

import numpy as np
import torch

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-11l-seg.pt")

img_tensor = torch.rand(1, 3, 480, 480)  # (1, 3, H, W) float tensor in [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}

results = model.predict(
    img_tensor,
    refer_image=img_tensor,
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
    imgsz=640,
)

複数の画像を一度に予測するには、プロンプトを1レベル深くネストします。ソース画像ごとに、ソースと同じ順序で、1つの bboxes 配列と1つの cls 配列を ソース画像ごと に指定します。

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {
    "bboxes": [
        np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # bus.jpg: person, glasses
        np.array([[150, 200, 1150, 700]]),  # zidane.jpg: person
    ],
    "cls": [np.array([0, 1]), np.array([0])],
}

results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Valの使用方法#

検証は、セグメンテーションデータセット上の他のモデルと同様に実行されます:

from ultralytics import YOLOE

model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for other sizes

metrics = model.val(data="coco128-seg.yaml")

同じ呼び出しの2つのバリエーションで、他のプロンプトモードをカバーできます:

  • ビジュアルプロンプトmodel.val(data="coco128-seg.yaml", load_vp=True) はデータセット自体からカテゴリごとにビジュアル埋め込みを抽出します。まったく同じカテゴリを含む必要がある別のデータセットから埋め込みを取得するには、refer_data="coco.yaml" を追加します。
  • プロンプトフリー*-seg-pf.pt チェックポイントをロードし、single_cls=True を渡します。

エクスポートの使用#

プロンプト埋め込みは一度保存しておき、ONNX、OpenVINO、TensorRT、CoreML、LiteRT、RKNN などの静的エクスポートを生成する際に再利用できます。NPZ プロファイルはエクスポート前に元の PyTorch モデルによってロードされます。追加のランタイム入力ではなく、エクスポートされたモデルに NPZ ファイルは必要ありません。

エクスポートされたモデルは静的です

set_classes()(またはビジュアルプロンプトの場合は refer_image)で設定されたクラスは、エクスポートされた重みに埋め込まれます。エクスポートされると、モデルは新しいプロンプトを受け入れることができなくなります。ロードされたエクスポートに対して set_classes() を呼び出すか、predict()visual_prompts=... を渡すと失敗します。検出されるクラスを変更するには、新しいプロンプトを設定して、元の .pt チェックポイントから再エクスポートしてください。エクスポートされたファイルは標準のYOLOモデルのように動作し、YOLOE() の代わりに YOLO() を使用してロードすることもできます。

プロンプト埋め込みの再利用
from ultralytics import YOLOE

model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")

# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")

同じプロンプトプロファイルを使用して、一致する YOLOE アーキテクチャから構築された検出専用モデルを設定することもできます。これにより、プロンプトされたクラスを保持したまま、マスクブランチが削除されます。

from ultralytics import YOLOE

model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)

Trackの使用方法#

プロンプト設定されたクラスはそのままトラッキングに引き継がれるため、トラッカーが一度もトレーニングされていないオブジェクトを追跡できます:

from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])

# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
    print(result.boxes.id)

YOLOEの比較#

YOLOEは、クローズドセット検出器と重量級のオープンボキャブラリーモデルの中間に位置します。適切な選択であるかどうかは、3つの比較によって決定されます:

  • クローズドセットのYOLOとの比較。 プロンプトが設定されると、YOLOEは通常の検出/セグメンテーションパスを通じて予測を行い、他のモデルと同様にエクスポートします。追加される機能は、再トレーニングを行わずに推論時にクラスリストを変更できる点であり、コストとなるのは、独自のクラスでトレーニングされたモデルのゼロショット精度を大きく下回る点です。
  • 以前のYOLOEファミリーとの比較。 YOLOE-26はYOLO26のNMSフリーのエンドツーエンドヘッドを継承し、従来の3つのスケール(s/m/l)に対して5つのスケール(n/s/m/l/x)をカバーし、パフォーマンスのすべての対応するスケールでリードしています。
  • Transformerベースのオープンボキャブラリー検出器との比較。 GLIPやOWL-ViTは、推論時にビジョン言語Transformerを実行します。YOLOEはプロンプトを一度エンコードし、畳み込みヘッド内で領域特徴量とそれらを比較します。

最も近い代替手段はいずれもテキストプロンプトを受け入れますが、マスクを返すのはYOLOEとSAM 3のみであり、3つはそれぞれ異なる質問に答えます:

YOLOESAM 3YOLO-World
用途名前付きクラスのリアルタイム検出とセグメンテーションコンセプトセグメンテーションとプロンプト可能なトラッキングリアルタイムオープンボキャブラリー検出
Masksはい、*-seg.pt チェックポイントを使用しますはいいいえ、バウンディングボックスのみです
ビジュアルプロンプトはい (SAVPE)はいいいえ
プロンプトフリーモードはい、4,585名のボキャブラリーがありますいいえいいえ
次の場合に選択しますスループットが必要で、クラス名を指定できる場合最も精度の高いコンセプトセグメンテーションが必要で、計算リソースを使用できる場合すでに利用している場合 — 以下の移行に関する注意事項を参照してください

YOLO-World からの移行ですか? API の形状は同じです。YOLOWorldYOLOE に置き換え、*-seg.pt チェックポイントをロードし、set_classes() 呼び出しをそのまま維持してください。マスクとビジュアルプロンプトが追加されます。固定クラスに関するエクスポートの注意事項は両方に適用されます。

使用事例とアプリケーション#

オープンボキャブラリー検出により、クラスごとの再トレーニングのステップが不要になります。これは、ターゲットリストが事前に分からない場合に最も重要となります:

  • オープンワールド検出 — トレーニング時に誰も列挙していなかったオブジェクトに遭遇するロボティクスセキュリティシステム
  • 1つのサンプルからのワンショット検出 — 単一の参照ボックスから特定のパーツ、ロゴ、または欠陥をビジュアルプロンプトで抽出し、産業用検査で役立ちます。
  • ロングテールカタログ作成 — 組み込まれた 4,585 名のボキャブラリーは、生物多様性モニタリング小売在庫の調査に十分な広さを持っています。
  • データセットのブートストラップ — 人間によるレビューの前に、ボックスとマスクで画像に事前ラベリングを行い、その結果をもとに高速なクローズドセットモデルをトレーニングします。
  • 任意のターゲットのセグメンテーション — リリースされた *-seg.pt チェックポイントはすべての予測にマスクを返すため、2つ目のモデルを使用することなく、医療用画像処理衛星解析でピクセル単位の正確な出力を得ることができます。

一般的なパターンでは、2つのモードを組み合わせます。プロンプトフリーを一度実行して何が存在するかを検出し、その後、重要なカテゴリに対してテキストプロンプトに切り替えます。

制限事項#

YOLOE は、推論時にクラスを変更する機能と引き換えに精度をトレードオフします。コミットする前に知っておくべき結果は次のとおりです:

  • ゼロショット精度は、クラスでトレーニングされたモデルよりもはるかに低くなります。 プロンプト付きチェックポイントは、LVIS minival においておおむね 22〜40 mAP の範囲に収まります。独自のデータでトレーニングされたクローズドセットの YOLO は、それらのクラスにおいてその精度を上回ります。トレーニングの代わりとしてではなく、トレーニングできないクラスをカバーするために YOLOE を使用してください。
  • レアなカテゴリが弱点です。 Performance の mAPr 列は、LVIS のレアなクラスの精度を具体的にレポートしており、テキストプロンプトの下では、すべての行でコモンクラスやフリーエントクラスの列を下回ります。ターゲットが珍しい場合は、ヘッドラインの mAP ではなくこちらを確認してください。
  • プロンプトは外見を記述し、関係性を記述するものではありません。 検出は領域の特徴とプロンプトの埋め込みを比較することで機能するため、状態、文脈、または比較に依存するプロンプト(「損傷した」、「一番左の」、「運ばれているもの」など)には、一致させるための信頼できるハンドルがありません。日常的なカテゴリ名に近い表現を好んで使用してください。
  • 大きなプロンプトセットはレイテンシをコストにします。 プロンプトの埋め込みは一度だけ計算されますが、すべてのフォワードパスで領域の特徴と比較されます。CPU 上で yoloe-26s-seg.pt を用いて測定した場合、フォワードパスは 80 クラスから 1,203 クラスへの移行で約 19% 増加し、完全な 4,585 名のボキャブラリーでは約 89% 増加します。領域とテキストの類似性はカウントされないため、報告される FLOPs はまったく変動せず、プロファイルでは警告されません。
  • クラス名は、プロンプトするまでプレースホルダーです。 新しくロードされた *-seg.pt チェックポイントは、数値名("0""1" など)を持つ nc=80 を報告するため、ラベルを読み取る前に set_classes() を呼び出してください。プロンプトフリーのチェックポイントには、すでに設定された完全なボキャブラリーが同梱されています。

デプロイに関する注意事項#

  • ハードウェア。 推論には 4〜8 GB の VRAM を搭載した NVIDIA GPU が必要です。n および s のスケールは、Jetson などのエッジ GPU、または解像度を下げた CPU 上で動作します。ファインチューニングには単一の GPU が必要です。
  • NMS はデフォルトでクラス非依存です。 YOLOE は agnostic_nms=True で予測を行います。YOLOE-11 および YOLOE-v8 では、これは同じクラス内だけでなく、異なるクラスにわたるスコアの低い重複ボックスを抑制するため、1つのオブジェクトが複数のカテゴリに一致する場合の重複を防ぎます。エンドツーエンドの YOLOE-26 モデルは IoU 抑制を一切適用しません。そこでは、非依存モードは、1つのアンカーに複数のクラスラベルを発行させる代わりに、アンカーごとに単一の最適なクラスのみを維持します。上書きするには agnostic_nms=False を渡してください。
  • バッチ処理。 バッチ推論は直接機能し、ビジュアルプロンプトは同じ呼び出し内の画像ごとに異なることができます。

スクラッチからの公式モデルのトレーニング#

ほとんどの読者にはこれは必要ありません。Objects365、GQA、Flickr30k から公開されているオープンボキャブラリーチェックポイント(8× RTX 4090 で約 140万件のトレーニングサンプル)を再現するものであり、上記のTrain Usageで説明されている独自のデータに対するファインチューニングとは無関係です。

警告

YOLOETrainer を継承するすべてのトレーナーは、デフォルトの YOLOESegTrainer および以下のすべてのスクラッチからのトレーナーを含め、compile=True を拒否します。compile=False(デフォルト)を渡してください。上記で使用された2つのファインチューニングトレーナーである YOLOEPESegTrainer および YOLOEPETrainer にはそのような制限はありません。

トレーニングにはセグメントアノテーションが必要です。以下の処理済みファイルをダウンロードするか、公式チームが提供するスクリプトSAM 2.1 を搭載)を使用して独自に生成してください。検証には LVIS minival が使用されます。

データセットタイプサンプルボックス処理済みセグメントアノテーション
Objects365v1検出609k9621kobjects365_train_segm.json
GQAGrounding621k3681kfinal_mixed_train_no_coco_segm.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train_segm.json

テキストプロンプトモデルが最初にトレーニングされ、他の2つのプロンプトモードはその洗練版です:

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "flickr/full_images/",
                "json_file": "flickr/annotations/final_flickr_separateGT_train_segm.json",
            },
            {
                "img_path": "mixed_grounding/gqa/images",
                "json_file": "mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            },
        ],
    },
    "val": {"yolo_data": ["lvis.yaml"]},
}

model = YOLOE("yoloe-26l-seg.yaml")
model.train(
    data=data,  # or the path to a YAML file holding the same structure
    batch=128,
    epochs=30,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegTrainerFromScratch,
    device="0,1,2,3,4,5,6,7",
)

ビジュアルプロンプトおよびプロンプトフリーのチェックポイントは、そのトレーニング済みのテキストプロンプトモデルから開始し、それぞれ1つのモジュールをアップデートします。YOLOESegVPTrainer はビジュアルプロンプトレシピであり、YOLOEPEFreeTrainer はプロンプトフリーのレシピですが、どちらのクラスもそれ単体では何もフリーズしません。選択的なトレーニングは、その隣に渡す freeze リストから行われます。これは savpe を除くすべてのヘッドの子(またはすべての分類タワー)を指定し、プロンプトフリーの実行にはさらに single_cls=True が必要です。アップストリームの YOLOE リポジトリには、v8 スケールモデル用の完全なレシピが記載されています。

完了したプロンプトフリーの実行は、get_vocab および set_vocab を使用して、推論時にプロンプトなしで名前を報告するチェックポイントに再パラメータ化されます:

from ultralytics import YOLOE

# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt")  # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt")  # text-prompt run, its head is still unfused

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # never overwrite the released checkpoint

引用と謝辞#

YOLOEがあなたの研究やプロジェクトに貢献した場合は、清華大学Ao Wang、Lihao Liu、Hui Chen、Zijia Lin、Jungong Han、およびGuiguang Dingによる元の論文を引用してください:

引用
@misc{wang2025yoloerealtimeseeing,
      title={YOLOE: Real-Time Seeing Anything},
      author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
      year={2025},
      eprint={2503.07465},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2503.07465},
}

詳細な読み物として、オリジナルの YOLOE 論文が arXiv で入手可能です。プロジェクトのソースコードおよびその他のリソースには、GitHub リポジトリからアクセスできます。

よくある質問 (FAQ)#

  • Ultralytics YOLOE は、YOLO-World にはない2つの機能を追加します。1つはクラス名の代わりにサンプルボックスを使用するビジュアルプロンプト、もう1つはプロンプトなしで組み込みの 4,585 名のボキャブラリーから回答するプロンプトフリーのチェックポイントです。リリースされた *-seg.pt チェックポイントからのすべての予測には、インスタンスセグメンテーションマスクも含まれます。精度に関して、元の YOLOE 論文では、LVIS において YOLOE-v8s が YOLO-Worldv2-S を 3.5 AP 上回り、トレーニングコストは3分の1、推論速度は 1.4 倍となっています。移行は1行の変更で行えます。How YOLOE Compares を参照してください。

  • Ultralytics YOLOE は3つのプロンプトモードをサポートしています。テキストプロンプト*-seg.pt チェックポイント上の文字列としてのクラス名であり、通常の選択肢です。ビジュアルプロンプトは、言葉で表現するのが難しいターゲットのために、参照画像上の1つ以上のサンプルボックスです。プロンプトフリーの推論では、何も指定せずに組み込みの 4,585 名のボキャブラリーから回答する別の *-seg-pf.pt チェックポイントを使用します。テキストプロンプトとビジュアルプロンプトは同じチェックポイントを共有しますが、プロンプトフリーのものは異なるファイルであり、set_classes() を拒否します。完全な比較については、Choosing a Prompting Mode を参照してください。

  • yoloe-26s-seg.pt から始めてください。YOLOE-26 ファミリーは、すべての一致するスケールで YOLOE-11 および YOLOE-v8 をリードしており、s スケールは LVIS minival で 30 mAP を超える最小のものです。稀なカテゴリの精度がレイテンシよりも重要な場合は、ml、または x に移行してください。Performance の mAPr 列が比較すべき対象です。エッジデプロイの場合のみ n に落としてください。独自のクラス名ではなく組み込みのボキャブラリーが必要な場合は、代わりに同じスケールの *-seg-pf.pt ファイルをロードしてください。

  • object0object1 のようなラベルは、予測がビジュアルプロンプトから得られたことを意味します。これにより、名前を持ち込む代わりに、サンプルボックスが一時的な番号付きクラスにグループ化されます。visual_prompts["cls"] で渡すクラス ID は、そのグループ化のみを行います。モデルは割り当てた ID の順序で object0object1 などのように報告するため、結果で独自のラベルにマッピングし直してください。出力に自分の名前キープしたい場合は、代わりにテキストプロンプトを使用してください。

  • プロンプトフリーのチェックポイント(*-seg-pf.pt)は、独自の組み込みボキャブラリーを通じてクラスを解決し、AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models. による外部プロンプトを拒否します。独自のクラスリストが必要な場合は、*-seg.pt チェックポイントをロードしてください。Choosing a Prompting Mode を参照してください。

  • 最初のテキストプロンプトにより、Ultralytics YOLOE は pip を使用して GitHub から ultralytics/CLIP をインストールし、現在の作業ディレクトリに TorchScript テキストエンコーダーをダウンロードします(YOLOE-26の場合は約 254 MB)。モデルファミリーごとの正確なアセットについては、Installation and Requirements を参照してください。ビジュアルプロンプトとプロンプトフリーのチェックポイントでは、どちらも必要ありません。ターゲットマシンでのダウンロードを回避するには、プロンプトを一度設定して save_prompt_embeddings() で保存するか、クラスがすでに設定された状態でモデルをエクスポートしてください。

  • いいえ — YOLOE はエクスポート時にプロンプトされたクラスを重みに焼き込むため、ロードされたエクスポートは set_classes()visual_prompts= の両方を拒否します。新しいプロンプトを設定した状態で、元の .pt チェックポイントから再エクスポートしてください。エクスポートされたファイルは標準の YOLO モデルのように動作し、YOLO() および YOLOE() でロードできます。

  • リアルタイムのスループットが必要でクラス名を指定できる場合は YOLOE を使用し、コンセプトのセグメンテーション品質が速度よりも重要な場合は SAM 3 を使用してください。どちらもビジュアルの例を受け入れますが、プロンプトフリーモードがあるのは YOLOE のみです。完全な比較は How YOLOE Compares に記載されています。

コメント