YOLOE: リアルタイムで何でも認識#
はじめに#

YOLOE (Real-Time Seeing Anything) は、ゼロショットのプロンプト対応 YOLO モデルにおける新しい進歩であり、オープンボキャブラリーの検出とセグメンテーション向けに設計されています。固定カテゴリに限定されていた従来の YOLO モデルとは異なり、YOLOE はテキスト、画像、または内部ボキャブラリーのプロンプトを使用し、あらゆるオブジェクトクラスのリアルタイム検出を可能にします。YOLOv10 を基盤とし、YOLO-World からインスピレーションを得た YOLOE は、速度と精度の低下を最小限に抑えながら、最先端のゼロショット性能を実現します。
Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀
従来の YOLO モデルと比較して、YOLOE は効率性と精度を大幅に向上させています。LVIS において、YOLO-Worldv2 よりも +3.5 AP 向上しつつ、トレーニングリソースの使用量はわずか 3 分の 1 であり、1.4倍高速な推論速度を達成しています。COCO でファインチューニングされた YOLOE-v8-large は、わずか 4倍少ないトレーニング時間で YOLOv8-L を 0.1 mAP 上回ります。これは、YOLOE の卓越した精度、効率、および汎用性のバランスを示しています。以下のセクションでは、YOLOE のアーキテクチャ、ベンチマークの比較、および Ultralytics フレームワークとの統合について説明します。
アーキテクチャの概要#
YOLOEは、標準的なYOLO構造を保持しています。特徴抽出用の畳み込みバックボーン(CSP-Darknetなど)、マルチスケール融合用のネック(PAN-FPNなど)、そしてオブジェクト性、クラス、ボックスを個別に予測するアンカーフリーかつデカップルされた検出ヘッド(YOLOv8/YOLO11と同様)です。YOLOEは、オープンボキャブラリー検出を可能にする3つの新しいモジュールを導入しています。
-
再パラメータ化可能領域テキストアライメント (RepRTA): 小さな補助ネットワークを介してテキスト埋め込み(CLIP などから)を改良することで、テキストプロンプトによる検出をサポートします。推論時には、このネットワークがメインモデルに統合されるため、オーバーヘッドはゼロになります。したがって、YOLOE は実行時のペナルティなしで、任意のテキストラベル付きオブジェクト(未見の「traffic light」など)を検出します。
-
セマンティック活性化ビジュアルプロンプトエンコーダー (SAVPE): 軽量な埋め込みブランチを通じてビジュアルプロンプトによる検出を実現します。参照画像が与えられると、SAVPEはセマンティックおよび活性化特徴をエンコードし、モデルが視覚的に類似したオブジェクトを検出するように条件付けを行います。これはロゴや特定の部品に役立つワンショット検出機能です。
-
レイジー領域プロンプトコントラスト (LRPC): プロンプトフリーモードにおいて、YOLOEは大規模なボキャブラリー(LVISおよびObjects365の1200以上のカテゴリー)でトレーニングされた内部埋め込みを使用してオープンセット認識を実行します。外部プロンプトやエンコーダーなしで、YOLOEは埋め込み類似度ルックアップを通じてオブジェクトを識別し、推論時に大規模なラベル空間を効率的に処理します。
さらに、YOLOEは検出ヘッドをマスク予測ブランチで拡張することで(YOLACTやYOLOv8-Segと同様)、最小限のオーバーヘッドでリアルタイムのインスタンスセグメンテーションを統合しています。
重要なことに、YOLOE のオープンワールドモジュールは、通常のクローズドセット YOLO として使用する場合、推論コストを発生させません。トレーニング後、YOLOE のパラメータを標準の YOLO ヘッドに再パラメータ化できるため、FLOP と速度は同一に保たれます(YOLO11 と完全に一致するなど)。
利用可能なモデル、サポートされているタスク、および動作モード#
このセクションでは、利用可能なモデルとそれぞれの事前トレーニング済み重み、サポートするタスク、および推論、検証、トレーニング、エクスポートなどのさまざまな操作モードとの互換性について詳しく説明します。サポートされているモードは ✅、サポートされていないモードは ❌ で示されます。
テキスト/ビジュアルプロンプトモデル#
| モデルタイプ | 事前学習済みウェイト | サポートされるタスク | トレーニング | バリデーション | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| YOLOE-11S | yoloe-11s-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11M | yoloe-11m-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11L | yoloe-11l-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8S | yoloe-v8s-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8M | yoloe-v8m-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8L | yoloe-v8l-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26N | yoloe-26n-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26S | yoloe-26s-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26M | yoloe-26m-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26L | yoloe-26l-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26X | yoloe-26x-seg.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
プロンプトフリーモデル#
| モデルタイプ | 事前学習済みウェイト | サポートされるタスク | トレーニング | バリデーション | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| YOLOE-11S-PF | yoloe-11s-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11M-PF | yoloe-11m-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11L-PF | yoloe-11l-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8S-PF | yoloe-v8s-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8M-PF | yoloe-v8m-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8L-PF | yoloe-v8l-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26N-PF | yoloe-26n-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26S-PF | yoloe-26s-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26M-PF | yoloe-26m-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26L-PF | yoloe-26l-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26X-PF | yoloe-26x-seg-pf.pt | Instance Segmentation | ✅ | ✅ | ✅ | ✅ |
| モデル | サイズ (ピクセル) | プロンプトタイプ | mAPminival 50-95(e2e) | mAPminival 50-95 | mAPr | mAPc | mAPf | パラメータ (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|---|
| YOLOE-26n-seg | 640 | テキスト/ビジュアル | 23.7 / 20.9 | 24.7 / 21.9 | 20.5 / 17.6 | 24.1 / 22.3 | 26.1 / 22.4 | 4.8 | 6.0 |
| YOLOE-26s-seg | 640 | テキスト/ビジュアル | 29.9 / 27.1 | 30.8 / 28.6 | 23.9 / 25.1 | 29.6 / 27.8 | 33.0 / 29.9 | 13.1 | 21.7 |
| YOLOE-26m-seg | 640 | テキスト/ビジュアル | 35.4 / 31.3 | 35.4 / 33.9 | 31.1 / 33.4 | 34.7 / 34.0 | 36.9 / 33.8 | 27.9 | 70.1 |
| YOLOE-26l-seg | 640 | テキスト/ビジュアル | 36.8 / 33.7 | 37.8 / 36.3 | 35.1 / 37.6 | 37.6 / 36.2 | 38.5 / 36.1 | 32.3 | 88.3 |
| YOLOE-26x-seg | 640 | テキスト/ビジュアル | 39.5 / 36.2 | 40.6 / 38.5 | 37.4 / 35.3 | 40.9 / 38.8 | 41.0 / 38.8 | 69.9 | 196.7 |
使用例#
YOLOE モデルは、Python アプリケーションに簡単に統合できます。Ultralytics は、開発を効率化するために使いやすい Python API と CLI コマンドを提供しています。
学習の使用方法#
カスタムデータセットでのファインチューニング#
検出およびインスタンスセグメンテーションの両方のタスクに向けて、カスタムの YOLO データセット上で任意の事前トレーニング済み YOLOE モデルをファインチューニングできます。
Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
インスタンスセグメンテーション
YOLOE の事前学習済みチェックポイントのファインチューニングは、基本的に標準的な YOLO トレーニング手順に従います。主な違いは、model.train() に対する trainer パラメータとして YOLOEPESegTrainer を明示的に渡すことです:
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer
model = YOLOE("yoloe-26s-seg.pt")
# Fine-tune on your segmentation dataset
results = model.train(
data="coco128-seg.yaml", # Segmentation dataset
epochs=80,
patience=10,
trainer=YOLOEPESegTrainer, # <- Important: use segmentation trainer
)オブジェクト検出
すべての事前学習済み YOLOE モデルは、デフォルトでインスタンスセグメンテーションを実行します。これらの事前学習済みチェックポイントを使用して検出モデルをトレーニングするには、YAML 設定を使用して検出モデルをゼロから初期化し、同じスケールの事前学習済みセグメンテーションチェックポイントを読み込みます。検出モデルをトレーニングするため、YOLOEPESegTrainer の代わりに YOLOEPETrainer を使用することに注意してください:
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer
# Initialize a detection model from a config
model = YOLOE("yoloe-26s.yaml")
# Load weights from a pretrained segmentation checkpoint (same scale)
model.load("yoloe-26s-seg.pt")
# Fine-tune on your detection dataset
results = model.train(
data="coco128.yaml", # Detection dataset
epochs=80,
patience=10,
trainer=YOLOEPETrainer, # <- Important: use detection trainer
)Predictの使用方法#
YOLOE は、テキストベースおよび視覚的なプロンプトの両方をサポートしています。プロンプトの使用は簡単で、以下に示すように predict メソッドに渡すだけです。
テキストプロンプトを使用すると、テキストによる説明を通じて検出したいクラスを指定できます。次のコードは、YOLOEを使用して画像内の人物とバスを検出する方法を示しています。
from ultralytics import YOLOE
# Initialize a YOLOE model
model = YOLOE("yoloe-26l-seg.pt") # or yoloe-26s/m-seg.pt for different sizes
# Set text prompt to detect person and bus. You only need to do this once after you load the model.
model.set_classes(["person", "bus"])
# Run detection on the given image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Valの使用方法#
データセットに対するモデルの検証は、次のように効率化されています:
from ultralytics import YOLOE
# Create a YOLOE model
model = YOLOE("yoloe-26l-seg.pt") # or yoloe-26s/m-seg.pt for different sizes
# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml")エクスポートの使用#
エクスポートプロセスは他のYOLOモデルと同様ですが、テキストプロンプトとビジュアルプロンプトを処理するための柔軟性が追加されています。
set_classes()(または視覚的プロンプトの場合は refer_image)で設定されたクラスは、エクスポートされた重みに焼き込まれます。エクスポートされると、モデルは新しいプロンプトを受け入れることができなくなります。読み込まれたエクスポートに対して set_classes() を呼び出すか、predict() に visual_prompts=... を渡すと失敗します。検出されるクラスを変更するには、新しいプロンプトを設定して元の .pt チェックポイントから再エクスポートします。エクスポートされたファイルは標準の YOLO 検出器のように動作し、YOLOE() の代わりに YOLO() で読み込むこともできます。
プロンプト埋め込みは一度保存しておき、ONNX、OpenVINO、TensorRT、CoreML、LiteRT、RKNN などの静的エクスポートを生成する際に再利用できます。NPZ プロファイルはエクスポート前に元の PyTorch モデルによってロードされます。追加のランタイム入力ではなく、エクスポートされたモデルに NPZ ファイルは必要ありません。
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)from ultralytics import YOLOE
# Select yoloe-26s/m-seg.pt for different sizes
model = YOLOE("yoloe-26l-seg.pt")
# Configure the set_classes() before exporting the model
model.set_classes(["person", "bus"])
export_model = model.export(format="onnx")
model = YOLOE(export_model)
# Run detection on the given image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()公式モデルのトレーニング#
データセットの準備#
公式の YOLOE モデルのトレーニングには、トレーニングデータ用のセグメントアノテーションが必要です。ここでは、SAM2.1 models を活用してデータセットをセグメントアノテーションに変換する、公式チームによって提供されたスクリプトを示します。または、公式チームが提供する以下のテーブルにある提供された Processed Segment Annotations を直接ダウンロードすることもできます。
- 学習データ
| データセット | タイプ | サンプル | ボックス | Raw Detection Annotations | Processed Segment Annotations |
|---|---|---|---|---|---|
| Objects365v1 | 検出 | 609k | 9621k | objects365_train.json | objects365_train_segm.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json | final_mixed_train_no_coco_segm.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json | final_flickr_separateGT_train_segm.json |
- 検証データ
| データセット | タイプ | アノテーションファイル |
|---|---|---|
| LVIS minival | 検出 | minival.txt |
ゼロからのトレーニングを開始する#
Visual Prompt モデルは、十分にトレーニングされた Text Prompt モデルに基づいてファインチューニングされます。
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch
# Option 1: Use Python dictionary
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"]},
}
# Option 2: Use YAML file (yoloe_data.yaml)
# 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 data="yoloe_data.yaml" if using YAML file
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",
)YOLOEのパフォーマンス比較#
YOLOE は、速度やモデルサイズを損なうことなく、COCO や LVIS などの標準ベンチマークでクローズドセット YOLO モデルの精度に匹敵するか、それを上回ります。以下の表では、YOLOE-L(YOLO11 ベース)および YOLOE26-L(YOLO26 ベース)と、対応するクローズドセットモデルを比較しています。
| モデル | COCO mAP50-95 | LVIS mAP50-95 | 推論速度 (T4) | パラメータ | GFLOPs (640px) |
|---|---|---|---|---|---|
| YOLOv8-L (クローズドセット) | 52.9% | - | 9.06 ms (110 FPS) | 43.7 M | 165.2 B |
| YOLO11-L (クローズドセット) | 53.5% | - | 6.2 ms (161 FPS) | 26.2 M | 86.9 B |
| YOLOE-L (オープンボキャブラリー) | 52.6% | 35.2% | 6.2 ms (161 FPS) | 26.2 M | 86.9 B† |
| YOLOE26-L (オープンボキャブラリー) | - | 36.8% | 6.2 ms (161 FPS) | 32.3 M | 88.3 B† |
† YOLOE-LはYOLO11-Lのアーキテクチャを共有し、YOLOE26-LはYOLO26-Lのアーキテクチャを共有しているため、推論速度とGFLOPsは同等です。
YOLOE26-Lは、T4 GPU上で640×640の画像を6.2 ms (161 FPS)で処理し、32.3Mのパラメータと88.3BのFLOPsで36.8%のLVIS mAPを達成します。これは、同じ推論速度を維持しながら、YOLOE-Lの35.2%のLVIS mAPから向上したものです。重要な点として、YOLOEのオープンボキャブラリーモジュールには推論コストがかからないため、**「ただ飯はない(no free lunch trade-off)」**設計が実証されています。
ゼロショットタスクにおいて、YOLOE26は以前のオープンボキャブラリー検出器を大幅に上回ります。LVISでは、YOLOE26-Sは29.9% mAPを達成し、YOLO-World-Sを**+11.4 AP上回ります。一方、YOLOE26-Lは36.8% mAPを達成し、YOLO-World-Lを+10.0 AP上回ります。YOLOE26はT4 GPU上で161 FPS**の効率的な推論を維持しており、リアルタイムのオープンボキャブラリーアプリケーションに最適です。
ベンチマーク条件: YOLOEの結果は、Objects365、GoldG、LVISで事前学習し、その後COCOでファインチューニングまたは評価されたモデルに基づいています。YOLOv8に対するYOLOEのわずかなmAPの優位性は、広範な事前学習によるものです。このオープンボキャブラリートレーニングがない場合、YOLOEは同サイズのYOLOモデルと同等であり、パフォーマンスを犠牲にすることなくSOTAの精度とオープンワールドの柔軟性を実現していることが証明されています。
過去のモデルとの比較#
YOLOEは、従来のYOLOモデルやオープンボキャブラリー検出器と比較して、注目すべき進歩をもたらしています:
-
YOLOE と YOLOv5 の比較: YOLOv5 は優れた速度と精度のバランスを提供しましたが、新しいクラスの再トレーニングが必要であり、アンカーベースのヘッドを使用していました。対照的に、YOLOE はアンカーフリーであり、新しいクラスを動的に検出します。YOLOv8 の改善を基盤とする YOLOE は、YOLOv5 よりも高い精度(COCO で YOLOv5 の ~50% mAP に対し 52.6%)を達成し、YOLOv5 とは異なりインスタンスセグメンテーションを統合しています。
-
YOLOE と YOLOv8 の比較: YOLOE は YOLOv8 の再設計されたアーキテクチャを拡張し、同様または優れた精度(YOLOv8-L の ~44M パラメータで 52.9% mAP に対し、~26M パラメータで 52.6% mAP)を達成しています。より強力な事前トレーニングにより、トレーニング時間が大幅に短縮されます。重要な進歩は YOLOE のオープンワールド機能であり、YOLOv8 のクローズドセット設計とは異なり、プロンプトを介して未見のオブジェクト(「bird scooter」や「peace symbol」など)を検出します。
-
YOLOE と YOLO11 の比較: YOLO11 は、効率性の向上とパラメータ数の削減(~22% の削減)により、YOLOv8 を改善しています。YOLOE はこれらの利点を直接継承し、YOLO11 の推論速度とパラメータ数(~26M パラメータ)に一致させながら、オープンボキャブラリー検出とセグメンテーションを追加しています。クローズドセットのシナリオでは、YOLOE は YOLO11 と同等ですが、速度を損なうことなく未見のクラスを検出する適応性が追加されている点が重要です。
-
YOLOE26 と YOLOE (YOLO11ベース) の比較: YOLOE26 は YOLO26 のアーキテクチャを基盤としており、より高速な推論のために NMS なしのエンドツーエンド設計を継承しています。LVIS において、YOLOE26-L は 36.8% mAP を達成し、YOLOE-L の 35.2% mAP から向上しています。YOLOE26 は、YOLOE の 3 つのスケール(S/M/L)と比較して 5 つすべてのモデルスケール(N/S/M/L/X)を提供し、さまざまなデプロイシナリオにより多くの柔軟性を提供します。
-
YOLOE26 と従来のオープンボキャブラリー検出器の比較: 従来のオープンボキャブラリーモデル(GLIP、OWL-ViT、YOLO-World)は、ビジョン・言語トランスフォーマーに大きく依存しており、推論の遅延につながっていました。LVIS において、YOLOE26-S は 29.9% mAP(YOLO-World-S より +11.4 AP)、YOLOE26-L は 36.8% mAP(YOLO-World-L より +10.0 AP)を達成し、T4 GPU で 161 FPS のリアルタイム推論を維持しています。トランスフォーマーベースのアプローチ(GLIP など)と比較して、YOLOE26 は桁違いに高速な推論を提供し、オープンセット検出における精度と効率のギャップを効果的に埋めます。
要約すると、YOLOEとYOLOE26はYOLOの定評ある速度と効率を維持し、前身モデルの精度を上回り、セグメンテーションを統合し、強力なオープンワールド検出を導入しています。YOLOE26はYOLO26のNMSフリーのエンドツーエンド推論でアーキテクチャをさらに進化させており、リアルタイムのオープンボキャブラリーアプリケーションに最適です。
使用事例とアプリケーション#
YOLOEのオープンボキャブラリー検出とセグメンテーションは、従来の固定クラスモデルを超えた多様なアプリケーションを可能にします:
-
オープンワールド物体検出: ロボットがプロンプトを使用して以前に見慣れないオブジェクトを認識するロボティクスや、再トレーニングなしで新しい脅威(危険物など)に素早く適応するセキュリティシステムなどの動的なシナリオに最適です。
-
少数ショットおよび 1 ショット検出: 視覚的プロンプト(SAVPE)を使用することで、YOLOE は単一の参照画像から新しいオブジェクトを素早く学習します。産業用検査(部品や欠陥の即時特定)や、最小限のセットアップで視覚的検索を可能にするカスタムサーベイランスに最適です。
-
大語彙およびロングテール認識: 1000以上のクラスのボキャブラリーを備えた YOLOE は、生物多様性モニタリング(希少種の検出)、美術館のコレクション、小売在庫、E コマンスなどのタスクに優れており、クラスごとの大規模なトレーニングなしで多数のクラスを確実に識別します。
-
インタラクティブな検出とセグメンテーション: YOLOEは、自然な入力(テキストまたはビジュアルプロンプト)によって駆動される、検索可能なビデオ/画像検索、拡張現実(AR)、直感的な画像編集などのリアルタイムのインタラクティブアプリケーションをサポートします。ユーザーはセグメンテーションマスクを使用して、オブジェクトを正確に分離、識別、または編集できます。
-
自動データラベリングとブートストラップ: YOLOEは、初期のバウンディングボックスとセグメンテーションのアノテーションを提供することで、迅速なデータセット作成を促進し、人間のラベリング作業を大幅に削減します。特に大規模メディアコレクションの分析において価値があり、存在するオブジェクトを自動識別して、特殊なモデルをより高速に構築するのに役立ちます。
-
あらゆるオブジェクトのセグメンテーション: プロンプトを介してセグメンテーション機能を任意のオブジェクトに拡張します。特に医療画像処理、顕微鏡検査、衛星画像分析において有益であり、特殊な事前トレーニング済みモデルなしで構造を自動的に識別して正確にセグメント化します。SAM などのモデルとは異なり、YOLOE はオブジェクトを同時に認識して自動的にセグメント化するため、コンテンツ作成やシーン理解などのタスクに役立ちます。
これらすべてのユースケースにおいて、YOLOE の核心的な利点は汎用性であり、動的なシナリオ全体で検出、認識、セグメンテーションを行うための統合モデルを提供します。その効率性により、リソースが制限されたデバイスでもリアルタイムのパフォーマンスが保証され、ロボット工学、自動運転、防衛などに最適です。
ニーズに応じてYOLOEのモードを選択してください:
- クローズドセットモード: 固定クラスのタスク用(最高速度と精度)。
- プロンプトモード: テキストまたはビジュアルプロンプトで新しいオブジェクトを迅速に追加。
- プロンプトフリーオープンセットモード: 多くのカテゴリにわたる汎用検出(カタログ作成や探索に最適)。
多くの場合、モードを組み合わせる(プロンプトフリーの探索の後にターゲットを絞ったプロンプトを行うなど)ことで、YOLOEの可能性を最大限に引き出すことができます。
トレーニングと推論#
YOLOE は、他の YOLO モデル(YOLOv8、YOLO-World)と同様に、Ultralytics Python API および CLI とシームレスに統合されます。迅速に開始する方法は次のとおりです。
from ultralytics import YOLO
# Load pretrained YOLOE model and train on custom data
model = YOLO("yoloe-26s-seg.pt")
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)
# Run inference using text prompts ("person", "bus")
model.set_classes(["person", "bus"])
results = model.predict(source="test_images/street.jpg")
results[0].save() # save annotated outputここで、YOLOE はデフォルトで標準の検出器として動作しますが、クラス(set_classes)を指定することで、プロンプトベースの検出に簡単に切り替えます。結果には、バウンディングボックス、マスク、およびラベルが含まれます。
その他のサポートされているタスク#
- 検証:
model.val()またはyolo valを使用して、精度を簡単に評価します。 - エクスポート: YOLOE モデル(
model.export())を ONNX、TensorRT などにエクスポートし、デプロイを容易にします。 - トラッキング: YOLOE は統合時にオブジェクトトラッキング(
yolo track)をサポートしており、動画内のプロンプトされたクラスを追跡するのに役立ちます。
YOLOE は、推論結果にセグメンテーションマスクを自動的に含め(results[0].masks)、別個のモデルを必要とせずにオブジェクトの抽出や測定などのピクセル単位の正確なタスクを簡素化します。
はじめに#
以下の手順に従って、UltralyticsでYOLOEを素早くセットアップします:
-
インストール: Ultralyticsパッケージをインストールまたは更新します:
pip install -U ultralytics -
YOLOE 重みのダウンロード: 事前トレーニング済みの YOLOE モデル(YOLOE-v8-S/L、YOLOE-11 バリアントなど)は、YOLOE の GitHub リリースから入手できます。Ultralytics YOLO クラスにロードする目的の
.ptファイルをダウンロードするだけです。 -
ハードウェア要件:
- 推論: 推奨される GPU(VRAM 4〜8GB以上の NVIDIA)。小型モデルは、エッジ GPU(Jetson など)または低解像度の CPU で効率的に実行されます。コンパクトなワークステーションでの高性能な推論については、NVIDIA DGX Spark ガイドをご覧ください。
- トレーニング: カスタムデータでのYOLOEのファインチューニングには、通常1つのGPUで十分です。作成者が使用した広範なオープンボキャブラリー事前学習(LVIS/Objects365)には、多大な計算能力(8× RTX 4090 GPU)が必要でした。
-
設定: YOLOE の設定には、標準の Ultralytics YAML ファイルを使用します。通常はデフォルトの設定(
yoloe-26s-seg.yamlなど)で十分ですが、必要に応じてバックボーン、クラス、または画像サイズを変更できます。 -
YOLOEの実行:
-
クイック推論(プロンプトフリー):
yolo predict model=yoloe-26s-seg-pf.pt source="image.jpg" -
プロンプト付き検出(テキストプロンプトの例):
from ultralytics import YOLO model = YOLO("yoloe-26s-seg.pt") model.set_classes(["bowl", "apple"]) results = model.predict("kitchen.jpg") results[0].save()
-
-
統合のヒント:
- クラス名: デフォルトの YOLOE 出力は LVIS カテゴリを使用します。独自のラベルを指定するには
set_classes()を使用します。 - 速度: プロンプトを使用しない限り、YOLOEにオーバーヘッドはありません。テキストプロンプトの影響は最小限であり、ビジュアルプロンプトの影響はわずかに大きくなります。
- NMS 動作: YOLOE は予測中に
agnostic_nms=Trueを自動的に使用し、クラス間で重複するボックスをマージします。これにより、同じオブジェクトが YOLOE の大語彙(1200以上の LVIS クラス)内の複数のカテゴリに一致する場合の重複検出が防止されます。agnostic_nms=Falseを明示的に渡すことで、これをオーバーライドできます。 - バッチ推論: 直接サポートされています(
model.predict([img1, img2]))。画像固有のプロンプトの場合は、画像を個別に実行します。
- クラス名: デフォルトの YOLOE 出力は LVIS カテゴリを使用します。独自のラベルを指定するには
Ultralytics ドキュメントには、さらなるリソースが記載されています。YOLOE を使用すると、使い慣れた YOLO エコシステム内で強力なオープンワールド機能を簡単に探索できます。
プロのヒント: YOLOEのゼロショット精度を最大化するには、ゼロからトレーニングするのではなく、提供されたチェックポイントからファインチューニングしてください。検出精度を向上させるには、一般的なトレーニングラベル(LVISカテゴリを参照)と一致するプロンプト単語を使用してください。
引用と謝辞#
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)#
YOLOEとYOLO-Worldの違いは何ですか?#
YOLOE と YOLO-World はどちらもオープンボキャブラリー検出を可能にしますが、YOLOE にはいくつかの利点があります。YOLOE は、トレーニングリソースを 3 倍削減し、YOLO-Worldv2 よりも 1.4 倍高速に実行しながら、LVIS で +3.5 AP 高い精度を達成しています。また、YOLO-World が主にテキストプロンプトに焦点を当てているのに対し、YOLOE は 3 つのプロンプトモード(テキスト、視覚、内部ボキャブラリー)をサポートしています。さらに、YOLOE にはインスタンスセグメンテーション機能が組み込まれており、追加のオーバーヘッドなしで検出されたオブジェクトのピクセル単位の正確なマスクを提供します。
YOLOEを通常のYOLOモデルとして使用できますか?#
はい、YOLOEはパフォーマンスの低下なしに標準のYOLOモデルとまったく同様に機能します。クローズドセットモード(プロンプトなし)で使用される場合、YOLOEのオープンボキャブラリーモジュールは標準の検出ヘッドに再パラメータ化され、同等のYOLO11モデルと同一の速度と精度を実現します。これにより、YOLOEは非常に汎用性が高く、最大の速度のために従来の検出器として使用し、必要なときにのみオープンボキャブラリーモードに切り替えることができます。
YOLOEではどのような種類のプロンプトを使用できますか?#
YOLOEは3種類のプロンプトをサポートしています:
- テキストプロンプト: 自然言語を使用してオブジェクトクラスを指定します(例:「人」、「信号機」、「電動キックボード」)
- ビジュアルプロンプト: 検出したいオブジェクトの参照画像を提供します
- 内部ボキャブラリー: 外部プロンプトなしでYOLOEの組み込みボキャブラリー(1200以上のカテゴリ)を使用します
この柔軟性により、モデルを再トレーニングすることなくYOLOEをさまざまなシナリオに適応させることができ、検出要件が頻繁に変更される動的な環境で特に役立ちます。
YOLOEはインスタンスセグメンテーションをどのように処理しますか?#
YOLOE は、マスク予測ブランチで検出ヘッドを拡張することにより、インスタンスセグメンテーションをアーキテクチャに直接統合します。このアプローチは YOLOv8-Seg に似ていますが、プロンプトされた任意のオブジェクトクラスに対して機能します。セグメンテーションマスクは推論結果に自動的に含まれ、results[0].masks を介してアクセスできます。この統合されたアプローチにより、個別の検出モデルとセグメンテーションモデルの必要性がなくなり、ピクセル単位の正確なオブジェクト境界を必要とするアプリケーションのワークフローが効率化されます。
YOLOEはカスタムプロンプトを使用した推論をどのように処理しますか?#
YOLO-World と同様に、YOLOE は、オフラインボキャブラリーを利用して効率を向上させる「プロンプトしてから検出する」戦略をサポートしています。キャプションや特定のオブジェクトカテゴリなどのカスタムプロンプトは、事前にエンコードされ、オフラインボキャブラリーの埋め込みとして保存されます。このアプローチにより、再トレーニングを必要とせずに検出プロセスが効率化されます。モデル内でこれらのプロンプトを動的に設定して、特定の検出タスクに合わせて調整できます。
from ultralytics import YOLO
# Initialize a YOLOE model
model = YOLO("yoloe-26s-seg.pt")
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()