YOLOE:リアルタイムのオープンボキャブラリー検出とセグメンテーション#
Ultralytics YOLOE(リアルタイムであらゆる対象を認識)は、オープンボキャブラリー検出およびインスタンスセグメンテーションモデルです。トレーニング時に固定されたクラスリストを使用する代わりに、推論時に必要なカテゴリを、テキストプロンプト、視覚的な例、または4,585個の名前を含む組み込みボキャブラリーとして指定できます。Ultralytics YOLOアーキテクチャ(YOLOv8、YOLO11、YOLO26)を基盤とし、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つのプロンプトモードをサポートしており、選択したモードによって読み込むチェックポイントとクラスラベルの形式が決まります。推論時に用意できるものに合う行を選択してください。

| モード | チェックポイント | 指定するもの | 結果に表示されるクラス名 | 使用する場面 |
|---|---|---|---|---|
| テキストプロンプト | *-seg.pt | 文字列としてのクラス名 | 指定した名前そのもの | 対象を言葉で説明できる場合(通常はこちらを選択します) |
| 視覚的プロンプト | *-seg.pt | 参照画像上の例示ボックス | 汎用的なobject0、object1、… | 対象を言葉で表現できない場合(特定の部品、ロゴ、欠陥など) |
| プロンプト不要 | *-seg-pf.pt | なし | 組み込みの4,585個の名前を含むボキャブラリーからの名前 | 対象のカタログ化や探索を行い、事前に何を探すか分からない場合 |
- 視覚的プロンプトにはラベルが含まれません。
visual_promptsのクラスIDは例をまとめるためのものです。モデルはそれらをobject0、object1などとして報告します。独自の名前への対応付けはご自身で行ってください。 - プロンプト不要のチェックポイントでは
set_classes()を使用できません。*-seg-pf.ptモデルで呼び出すと、AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.Loadが発生します。独自のクラスが必要な場合は、代わりに*-seg.ptチェックポイントを読み込んでください。
インストールと要件#
YOLOEはメインのUltralyticsパッケージに含まれています。
pip install -U ultralyticsこれに加えて、テキストプロンプトにはテキストエンコーダーが必要です。テキストエンコーダーはインストール時ではなく、初回使用時に取得されます。
- 最初の
set_classes()呼び出しでは、GitHubからultralytics/CLIPをpipとともにインストールし(トークナイザーを提供します)、TorchScriptのテキストエンコーダーを現在の作業ディレクトリにダウンロードします。YOLOE-26ではmobileclip2_b.ts(約254 MB)をダウンロードし、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は、特徴抽出用の畳み込みバックボーン、マルチスケール融合用のネック、クラスとボックスを予測するアンカーフリーで分離されたヘッドという標準的なYOLO構造を維持し、プロンプトモードごとに1つずつ、3つのモジュールを追加しています。
- **再パラメーター化可能な領域テキストアライメント(RepRTA)**は、小規模な補助ネットワークを通じてCLIPからのテキスト埋め込みを改善します。このネットワークは
set_classes()呼び出しごとに1回実行され、エクスポート時に折りたたまれるため、フレームごとのコストは発生しません。毎回のフォワードパスで実行されるのは、保存されたプロンプト埋め込みと領域特徴の比較です。大量のプロンプトセットで発生するコストについては、制限事項を参照してください。 - **セマンティック活性化視覚プロンプトエンコーダー(SAVPE)**は、例示ボックスからセマンティック特徴と活性化特徴をエンコードし、それに似たオブジェクトを対象としてモデルを条件付けします。これは、ロゴや特定の部品など、名前を付けにくい対象に使用するワンショット経路です。
- **遅延領域プロンプトコントラスト(LRPC)**は、領域埋め込みと組み込みの4,585個の名前を含むボキャブラリーを照合します。そのため、プロンプト不要のチェックポイントは、外部プロンプトもテキストエンコーダーも使わずにオブジェクトを認識できます。
インスタンスセグメンテーションは、YOLOv8-Segと同様に検出ヘッドのマスクブランチから生成され、results[0].masks上のすべての予測にマスクが付随します。モデルをエクスポートすると、オープンワールドモジュールが標準的なYOLOヘッドに再パラメーター化され、エクスポートされたファイルは通常の検出・セグメンテーション経路で実行されます。
利用可能なモデル#
以下のすべてのチェックポイントはインスタンスセグメンテーションモデルであり、val、predict、export、trackをサポートしています。テキストまたは視覚的プロンプトには*-seg.ptファイルを、プロンプト不要の推論には*-seg-pf.ptファイルを読み込みます。これらは互換性がありません。詳細はプロンプトモードの選択を参照してください。trainをサポートするのは*-seg.ptファイルのみです。プロンプト不要のチェックポイントは、トレーニング済みのテキストプロンプトモデルから生成されます。詳細は公式モデルをゼロからトレーニングを参照してください。
| モデル | テキスト/視覚的プロンプト | プロンプト不要 |
|---|---|---|
| YOLOE-26n | yoloe-26n-seg.pt | yoloe-26n-seg-pf.pt |
| YOLOE-26s | yoloe-26s-seg.pt | yoloe-26s-seg-pf.pt |
| YOLOE-26m | yoloe-26m-seg.pt | yoloe-26m-seg-pf.pt |
| YOLOE-26l | yoloe-26l-seg.pt | yoloe-26l-seg-pf.pt |
| YOLOE-26x | yoloe-26x-seg.pt | yoloe-26x-seg-pf.pt |
| YOLOE-11s | yoloe-11s-seg.pt | yoloe-11s-seg-pf.pt |
| YOLOE-11m | yoloe-11m-seg.pt | yoloe-11m-seg-pf.pt |
| YOLOE-11l | yoloe-11l-seg.pt | yoloe-11l-seg-pf.pt |
| YOLOE-v8s | yoloe-v8s-seg.pt | yoloe-v8s-seg-pf.pt |
| YOLOE-v8m | yoloe-v8m-seg.pt | yoloe-v8m-seg-pf.pt |
| YOLOE-v8l | yoloe-v8l-seg.pt | yoloe-v8l-seg-pf.pt |
LVISにおけるYOLOEの性能#
Ultralytics YOLO26論文に基づく、640ピクセルでのLVIS minivalにおけるゼロショット結果です。
テキストおよび視覚的プロンプト#
各精度セルとパラメーターセルはテキストプロンプト/視覚的プロンプトの順で示され、FLOPsは1回だけ記載されています。パラメーター数とFLOPsは、論文で評価された検出構成の値です。精度は論文のNon-E2Eの値です。比較対象のすべてのモデルについて報告されているプロトコルはこれだけです。YOLOE-26のエンドツーエンドヘッドは、テキストプロンプトで最大1.1 AP、視覚的プロンプトで最大2.6 APしか下回りません。
| モデル | mAP50-95 | mAPr | mAPc | mAPf | パラメーター数 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n | 24.7 / 21.9 | 20.5 / 17.6 | 24.1 / 22.3 | 26.1 / 22.4 | 3.9 / 3.1 | 6.1 |
| YOLOE-26s | 30.8 / 28.6 | 23.9 / 25.1 | 29.6 / 27.8 | 33.0 / 29.9 | 10.7 / 11.0 | 21.9 |
| YOLOE-26m | 35.4 / 33.9 | 31.1 / 33.4 | 34.7 / 34.0 | 36.9 / 33.8 | 21.3 / 25.1 | 70.6 |
| YOLOE-26l | 37.8 / 36.3 | 35.1 / 37.6 | 37.6 / 36.2 | 38.5 / 36.1 | 25.5 / 29.3 | 89.0 |
| YOLOE-26x | 40.6 / 38.5 | 37.4 / 35.3 | 40.9 / 38.8 | 41.0 / 38.8 | 55.2 / 65.2 | 197.7 |
| YOLOE-11s | 27.5 / 26.3 | 21.4 / 22.5 | 26.8 / 27.1 | 29.3 / 26.4 | 10.7 / 10.9 | 22.7 |
| YOLOE-11m | 33.0 / 31.4 | 26.9 / 27.1 | 32.5 / 31.9 | 34.5 / 31.7 | 21.0 / 24.8 | 70.4 |
| YOLOE-11l | 35.2 / 33.7 | 29.1 / 28.1 | 35.0 / 34.6 | 36.5 / 33.8 | 26.0 / 29.8 | 89.5 |
| YOLOE-v8s | 27.9 / 26.2 | 22.3 / 21.3 | 27.8 / 27.7 | 29.0 / 25.7 | 12.3 / 12.6 | 29.8 |
| YOLOE-v8m | 32.6 / 31.0 | 26.9 / 27.0 | 31.9 / 31.7 | 34.4 / 31.1 | 26.4 / 28.4 | 80.7 |
| YOLOE-v8l | 35.9 / 34.2 | 33.2 / 33.2 | 34.8 / 34.6 | 37.3 / 34.1 | 43.5 / 47.3 | 167.6 |
プロンプト不要#
プロンプト不要のチェックポイントは、プロンプトを指定せず、組み込みボキャブラリーに基づいて回答します。各精度セルはエンドツーエンド/Non-E2Eの順で示されます。これは論文がYOLOE-26について評価する2つのプロトコルです。YOLO26のページではNon-E2E列が引用されています。
| モデル | mAP50-95 | mAPr | mAPc | mAPf | パラメーター数 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n-pf | 16.6 / 17.7 | 15.7 / 15.8 | 15.3 / 16.4 | 17.9 / 19.2 | 2.3 | 5.3 |
| YOLOE-26s-pf | 21.4 / 22.6 | 16.2 / 20.2 | 20.1 / 20.9 | 23.5 / 24.5 | 9.0 | 20.8 |
| YOLOE-26m-pf | 25.7 / 26.4 | 26.7 / 24.5 | 24.0 / 25.0 | 26.9 / 27.9 | 19.4 | 68.4 |
| YOLOE-26l-pf | 27.2 / 28.0 | 26.3 / 25.7 | 25.7 / 26.8 | 28.7 / 29.5 | 23.6 | 86.8 |
| YOLOE-26x-pf | 29.9 / 31.1 | 27.5 / 28.9 | 29.1 / 30.7 | 31.1 / 31.7 | 53.1 | 194.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で、それぞれ155~232 Mのパラメーターを持ちます。初代YOLOE論文では、導入したv8スケールモデルについてさらに2つの結果を示しています。LVISでは、YOLOE-v8sはトレーニングコストが3分の1、推論速度が1.4倍でありながら、YOLO-Worldv2-Sを3.5 AP上回ります。COCOに転用すると、YOLOE-v8lはクローズドセットYOLOv8-Lを約4倍短いトレーニング時間で、0.6 box APおよび0.4 mask AP上回ります。
YOLO26論文では検出構成を評価しています。リリース済みの重みはセグメンテーションチェックポイントであり、マスクブランチ、SAVPE、テキスト射影が追加されているため、読み込んだyoloe-26l-seg.ptは、上記の25.5 Mおよび89.0 Bではなく、35.4 Mおよび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の使用方法#
テキストプロンプトの呼び出しは、Quick Startに示されているものです。残り2つのモードでは、それぞれ追加の引数が必要です。
ビジュアルプロンプトでは、対象を説明する代わりに、モデルに例を示します。visual_prompts は、例のボックスの配列である bboxes と、クラス ID の配列である cls を受け取ります。各ボックスに1つの ID を対応させます。ID はラベルではなく一時的なグループ分けであり、0から始まる連番にする必要があります。結果は、任意に選んだ名前ではなく、object0、object1、…として返されます。
例のボックスは、予測対象の画像上に配置できます。
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 として渡す別の参照画像上に配置することもできます。この場合、bboxes と 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]]), "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 themsource が動画またはストリームの場合、最初のフレームが自動的に refer_image になります。そのため、渡したプロンプトはそのフレームに適用され、動画の残りの部分にも引き継がれます。別のフレームを選択するには、refer_image を明示的に渡します。
source と refer_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レベル深くネストします。ソース画像ごとに bboxes 配列を1つと cls 配列を1つ用意し、ソースと同じ順序にします。
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() を呼び出したり、visual_prompts=... を predict() に渡したりすると失敗します。検出クラスを変更するには、元の .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-free エンドツーエンドヘッドを継承し、従来の3スケール(s/m/l)に対して5スケール(n/s/m/l/x)をカバーします。また、Performanceでは対応するすべてのスケールで上回っています。
- Transformer ベースのオープンボキャブラリ検出器との比較。 GLIP と OWL-ViT は、推論時にビジョン言語 Transformer を実行します。YOLOE はプロンプトを一度エンコードし、その後、畳み込みヘッド内で領域特徴量と比較します。
最も近い代替手段はいずれもテキストプロンプトを受け取りますが、マスクを返すのは YOLOE と SAM 3 のみです。また、3つは異なる問いに答えます。
| YOLOE | SAM 3 | YOLO-World | |
|---|---|---|---|
| 用途 | 名前を指定したクラスのリアルタイム検出とセグメンテーション | 概念セグメンテーションとプロンプト可能なトラッキング | リアルタイムのオープンボキャブラリ検出 |
| マスク | *-seg.pt チェックポイントで対応 | はい | いいえ、ボックスのみ |
| ビジュアルプロンプト | はい(SAVPE) | はい | いいえ |
| プロンプトなしモード | はい、4,585個の名前の語彙 | いいえ | いいえ |
| 選択するタイミング | スループットが必要で、クラス名を指定できる場合 | 最高水準の概念セグメンテーションが必要で、計算コストを許容できる場合 | すでに使用している場合 — 以下の移行に関する注記を参照してください |
YOLO-World から移行する場合 API の形状は同じです。YOLOWorld を YOLOE に置き換え、*-seg.pt チェックポイントを読み込み、set_classes() の呼び出しはそのまま維持します。マスクとビジュアルプロンプトを利用できるようになります。クラスが固定されることに関するエクスポートの注記は、どちらにも適用されます。
ユースケースとアプリケーション#
オープンボキャブラリ検出では、クラスごとに再学習する手順が不要になります。これは、対象リストが事前に決まっていない場合に特に重要です。
- オープンワールド検出 — 学習時に誰も列挙していなかったオブジェクトに遭遇するロボティクスやセキュリティシステム。
- 例からのワンショット検出 — ビジュアルプロンプトにより、単一の参照ボックスから特定の部品、ロゴ、欠陥を検出できます。産業検査に役立ちます。
- ロングテールのカタログ化 — 組み込みの4,585個の名前の語彙は、生物多様性モニタリングや小売在庫の調査に十分な広さを備えています。
- データセットのブートストラップ — 人によるレビューの前に、画像へボックスとマスクの事前ラベルを付け、その結果を使って高速なクローズドセットモデルを学習します。
- 任意の対象のセグメンテーション — リリース済みの
*-seg.ptチェックポイントはすべての予測にマスクを返すため、医用画像や衛星画像解析で、2つ目のモデルなしにピクセル単位で正確な出力を得られます。
よくあるパターンとして、2つのモードを組み合わせます。まずプロンプトなしで一度実行して存在するものを発見し、次に重要なカテゴリについてテキストプロンプトへ切り替えます。
制限事項#
YOLOE は、推論時にクラスを変更できる機能と引き換えに精度を犠牲にします。導入を決める前に知っておくべき影響は次のとおりです。
- ゼロショット精度は、自分のクラスで学習したモデルを大幅に下回ります。 プロンプト対応チェックポイントの LVIS minival における mAP は、およそ22~40の範囲です。自分のデータで学習したクローズドセット YOLO は、これらのクラスでそれを上回ります。YOLOE は、学習できないクラスをカバーするために使用し、学習の代替にはしないでください。
- 希少カテゴリが弱点です。 Performanceの mAPr 列は、LVIS の希少クラスに対する精度のみを示しています。テキストプロンプトでは、すべての行で common 列および frequent 列を下回ります。対象が珍しい場合は、全体の mAP ではなくこの値を確認してください。
- プロンプトは関係ではなく外観を記述します。 検出は領域特徴量とプロンプト埋め込みを比較して機能するため、状態、文脈、比較に依存する「損傷した」「最も左の」「運ばれているもの」といったプロンプトには、照合できる信頼性の高い手がかりがありません。一般的なカテゴリ名に近い表現を使用してください。
- 大規模なプロンプトセットはレイテンシを増加させます。 プロンプト埋め込みは一度計算されますが、フォワードパスのたびに領域特徴量と比較されます。
yoloe-26s-seg.ptを使用して CPU で測定した場合、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で予測を行います。デフォルトでは、同じクラス内だけでなく異なるクラス間でもスコアの低い重複バウンディングボックスを抑制するため、1つのオブジェクトが複数のカテゴリに一致する場合の重複を防ぎます。nms=Falseを指定すると、YOLOE-26はIoU抑制を適用しません。非依存モードでは、1つのアンカーが複数のクラスラベルを出力する代わりに、アンカーごとに最も適切な単一のクラスのみを保持します。上書きするにはagnostic_nms=Falseを渡します。 - バッチ処理。 バッチ推論は直接実行でき、同じ呼び出し内で画像ごとに異なるビジュアルプロンプトを指定できます。
公式モデルをゼロから学習する#
ほとんどの読者には必要ありません。Objects365、GQA、Flickr30k の公開オープンボキャブラリチェックポイントを再現するもので、8× RTX 4090 上で約140万件の学習サンプルを使用します。独自データでのファインチューニングとは無関係であり、独自データでのファインチューニングについては、上記の学習の使用方法で説明しています。
YOLOETrainer を継承するすべてのトレーナーは、デフォルトの YOLOESegTrainer と以下のゼロから学習するすべてのトレーナーを含め、compile=True を拒否します。compile=False(デフォルト)を渡してください。上記で使用した2つのファインチューニングトレーナー、YOLOEPESegTrainer と YOLOEPETrainer には、この制限はありません。
学習にはセグメントアノテーションが必要です。以下の処理済みファイルをダウンロードするか、公式チームが提供するスクリプトで独自に生成してください。このスクリプトは SAM 2.1によって動作します。検証には LVIS minivalを使用します。
| データセット | 型 | サンプル | ボックス | 処理済みセグメントアノテーション |
|---|---|---|---|---|
| Objects365v1 | 検出 | 609k | 9621k | objects365_train_segm.json |
| GQA | グラウンディング | 621k | 3681k | final_mixed_train_no_coco_segm.json |
| Flickr30k | グラウンディング | 149k | 641k | final_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行の変更で済みます。YOLOE の比較を参照してください。Ultralytics YOLOE は3つのプロンプトモードに対応しています。テキストプロンプトは、
*-seg.ptチェックポイント上で文字列として指定するクラス名で、通常はこちらを使用します。ビジュアルプロンプトは、言葉で表現しにくい対象に対して、参照画像上に配置した1つ以上の例のボックスです。プロンプトなし推論では、何も指定せず、組み込みの4,585個の名前の語彙から回答する別の*-seg-pf.ptチェックポイントを使用します。テキストプロンプトとビジュアルプロンプトは同じチェックポイントを共有します。プロンプトなし用は別のファイルであり、set_classes()を拒否します。詳しい比較については、プロンプトモードの選択を参照してください。まず
yoloe-26s-seg.ptから始めてください。YOLOE-26 ファミリーは、対応するすべてのスケールで YOLOE-11 と YOLOE-v8 を上回ります。また、sスケールは、LVIS minival で mAP が30を超える最小のスケールです。レイテンシより希少カテゴリの精度を重視する場合は、m、l、またはxに上げてください。比較するのは Performance の mAPr 列です。エッジデプロイの場合にのみnに下げてください。独自のクラス名ではなく組み込み語彙を使用する場合は、同じスケールの*-seg-pf.ptファイルを読み込んでください。object0やobject1のようなラベルは、予測がビジュアルプロンプトから得られたことを示します。これにより、例のボックスはユーザー指定の名前を引き継ぐのではなく、一時的な番号付きクラスにグループ化されます。visual_prompts["cls"]に渡すクラス ID は、そのグループ化にのみ使用されます。モデルは、割り当てた ID の順序でobject0、object1などとして報告するため、結果上で独自のラベルに対応付けてください。出力に独自の名前を表示する場合は、代わりにテキストプロンプトを使用してください。プロンプトなしのチェックポイント(
*-seg-pf.pt)は、独自の組み込み語彙を通じてクラスを解決し、AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.を含む外部プロンプトを拒否します。独自のクラスリストが必要な場合は、*-seg.ptチェックポイントを読み込んでください。プロンプトモードの選択を参照してください。最初のテキストプロンプトを実行すると、Ultralytics YOLOE は GitHub から ultralytics/CLIP を
pipでインストールし、TorchScript テキストエンコーダーを現在の作業ディレクトリにダウンロードします。YOLOE-26 の場合は約 254 MB です。モデルファミリーごとの正確なアセットについては、インストールと要件を参照してください。ビジュアルプロンプトとプロンプトなしのチェックポイントには、どちらも必要ありません。ターゲットマシンでのダウンロードを避けるには、プロンプトを一度設定してsave_prompt_embeddings()で保存するか、クラスをあらかじめ設定した状態でモデルをエクスポートしてください。いいえ。YOLOE はエクスポート時にプロンプトで指定したクラスを重みに組み込むため、読み込んだエクスポートモデルは
set_classes()とvisual_prompts=の両方を拒否します。新しいプロンプトを設定し、元の.ptチェックポイントから再エクスポートしてください。エクスポートしたファイルは標準的な YOLO モデルとして動作し、YOLO()とYOLOE()のどちらでも読み込めます。