YOLO-Worldモデル#
YOLO-Worldモデルは、オープンボキャブラリー検出タスク向けに、高度なリアルタイムUltralytics YOLOv8ベースのアプローチを導入します。この技術により、説明テキストに基づいて画像内のあらゆるオブジェクトを検出できます。競争力のある性能を維持しながら計算要件を大幅に抑え、YOLO-Worldは幅広いビジョンベースの用途に対応する汎用ツールとなっています。
視聴: カスタムデータセットでの YOLO World トレーニングワークフロー

概要#
YOLO-Worldは、膨大な計算リソースを必要とする扱いにくいTransformerモデルに依存することが多い、従来のオープンボキャブラリー検出モデルが抱える課題に対処します。また、こうしたモデルは事前定義されたオブジェクトカテゴリに依存するため、変化の激しいシナリオでは用途が制限されます。YOLO-Worldは、ビジョン-言語モデリングを採用し、広範なデータセットで事前学習を行うことでYOLOv8フレームワークにオープンボキャブラリー検出機能を加え、ゼロショットシナリオで幅広いオブジェクトを優れた効率で識別します。
インスタンスマスク、ビジュアルプロンプト、またはプロンプト不要のモードも必要なオープンボキャブラリー用途には、同じset_classes() APIを維持するYOLOEをご覧ください。
主な機能#
-
リアルタイムソリューション: CNNの計算速度を活用するYOLO-Worldは、迅速な結果を必要とする業界に向けて、高速なオープンボキャブラリー検出ソリューションを提供します。
-
効率と性能: YOLO-Worldは性能を損なうことなく計算要件とリソース要件を大幅に削減し、SAMなどのモデルに代わる堅牢な選択肢を、わずかな計算コストで提供することでリアルタイム用途を可能にします。
-
オフラインボキャブラリーによる推論: YOLO-Worldは「プロンプトしてから検出する」戦略を導入し、オフラインボキャブラリーを使用して効率をさらに高めます。この方式では、キャプションやカテゴリなど、事前に計算されたカスタムプロンプトをエンコードしてオフラインボキャブラリーの埋め込みとして保存し、検出プロセスを効率化できます。
-
YOLOv8を基盤とする設計: Ultralytics YOLOv8を基盤とするYOLO-Worldは、リアルタイム物体検出の最新技術を活用し、比類のない精度と速度でオープンボキャブラリー検出を実現します。
-
ベンチマークで優れた性能: YOLO-Worldは、標準ベンチマークにおける速度と効率の面で、MDETRやGLIPシリーズを含む既存のオープンボキャブラリー検出器を上回り、単一のNVIDIA V100 GPUでYOLOv8が優れた性能を発揮することを示しています。
-
多様な用途: YOLO-Worldの革新的なアプローチは、さまざまなビジョンタスクに新たな可能性をもたらし、既存手法を桁違いに上回る速度向上を実現します。
利用可能なモデル、サポート対象タスク、動作モード#
このセクションでは、各モデルの事前学習済み重み、対応タスク、および推論、検証、トレーニング、エクスポートなど、さまざまな動作モードとの互換性を詳しく説明します。対応モードは✅、非対応モードは❌で示します。
YOLOv8-Worldの重みはすべて、公式のYOLO-Worldリポジトリから直接移行されており、同リポジトリの優れた貢献を反映しています。
| モデルタイプ | 事前学習済み重み | サポートされるタスク | トレーニング | 検証 | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | 物体検出 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | 物体検出 | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | 物体検出 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | 物体検出 | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | 物体検出 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | 物体検出 | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | 物体検出 | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | 物体検出 | ✅ | ✅ | ✅ | ✅ |
COCOデータセットでのゼロショット転移#
| モデルタイプ | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
使用例#
YOLO-Worldモデルは、Pythonアプリケーションに簡単に統合できます。Ultralyticsは、開発を効率化する使いやすいPython APIとCLIコマンドを提供しています。
視聴: Ultralytics での YOLO-World モデルの使用例 | オープンボキャブラリー、プロンプト不要など 🚀
トレーニングの使用方法#
決定論的なトレーニングに対応し、ONNXやTensorRTなどの形式へのエクスポートも容易なため、カスタムトレーニングにはyolov8-worldv2を強くおすすめします。
以下に示すように、trainメソッドを使えば物体検出を簡単に実行できます。
PyTorchの事前学習済み*.ptモデルと構成*.yamlファイルをYOLOWorld()クラスに渡すことで、Pythonでモデルインスタンスを作成できます。
from ultralytics import YOLOWorld
# 事前学習済みのYOLOv8s-worldv2モデルを読み込む
model = YOLOWorld("yolov8s-worldv2.pt")
# COCO8サンプルデータセットでモデルを100エポック学習する
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# 'bus.jpg'画像に対してYOLO-Worldモデルで推論を実行する
results = model("path/to/bus.jpg")予測の使用方法#
以下に示すように、predictメソッドを使えば物体検出を簡単に実行できます。
from ultralytics import YOLOWorld
# YOLO-Worldモデルを初期化する
model = YOLOWorld("yolov8s-world.pt") # または、サイズの異なるyolov8m/l-world.ptを選択する
# 指定した画像に対してYOLOv8s-worldモデルで推論を実行する
results = model.predict("path/to/image.jpg")
# 結果を表示する
results[0].show()このコード例では、事前学習済みモデルの読み込みと画像に対する予測の実行が簡単であることを示しています。
検証の使用方法#
データセットでのモデル検証は、次の手順で簡単に実行できます。
from ultralytics import YOLO
# YOLO-Worldモデルを作成する
model = YOLO("yolov8s-world.pt") # または、サイズの異なるyolov8m/l-world.ptを選択する
# サンプルデータセットCOCO8でモデル検証を実施する
metrics = model.val(data="coco8.yaml")トラッキングの使用方法#
動画や画像に対するYOLO-Worldモデルでの物体追跡は、次の手順で簡単に実行できます。
from ultralytics import YOLO
# YOLO-Worldモデルを作成する
model = YOLO("yolov8s-world.pt") # または、サイズの異なるyolov8m/l-world.ptを選択する
# 動画に対してYOLO-Worldモデルで追跡を実行する
results = model.track(source="path/to/video.mp4")Ultralyticsが提供するYOLO-Worldモデルには、オフライン語彙の一部としてCOCOデータセットのカテゴリがあらかじめ設定されており、すぐに適用できるため効率的です。この統合により、YOLOv8-Worldモデルは追加の設定やカスタマイズを必要とせず、COCOデータセットで定義された80個の標準カテゴリを直接認識して予測できます。
プロンプトを設定する#

YOLO-Worldフレームワークでは、カスタムプロンプトを使ってクラスを動的に指定できるため、ユーザーは再トレーニングなしでモデルを特定のニーズに合わせて調整できます。この機能は、当初のトレーニングデータに含まれていない新しいドメインや特定のタスクにモデルを適応させる際に特に便利です。カスタムプロンプトを設定すると、関心のあるオブジェクトにモデルの注目を向けることができ、検出結果の関連性と精度を高められます。
たとえば、アプリケーションで「person」と「bus」のオブジェクトだけを検出する必要がある場合は、次のようにクラスを直接指定できます。
from ultralytics import YOLO
# YOLO-Worldモデルを初期化する
model = YOLO("yolov8s-world.pt") # または、yolov8m/l-world.ptを選択する
# カスタムクラスを定義する
model.set_classes(["person", "bus"])
# 画像内の指定カテゴリに対して予測を実行する
results = model.predict("path/to/image.jpg")
# 結果を表示する
results[0].show()空文字列""を背景クラスとして追加すると、特定のシナリオで検出性能が向上することがあると報告されています。この挙動はシナリオに依存するようで、正確な仕組みは十分に解明されていません。
model.set_classes(["person", "bus", ""])空文字列は、保存したモデルも含め、独立したクラスとしてmodel.namesに残るため、その検出結果のラベルは空になります。予測時にclasses=[0, 1]を渡すと、実際のクラスだけに絞り込めます。
カスタムクラスを設定した後にモデルを保存することもできます。これにより、特定のユースケースに特化したYOLO-Worldモデルを作成できます。この処理では、カスタムクラスの定義がモデルファイルに直接埋め込まれるため、追加調整なしで指定したクラスを使える状態になります。カスタムYOLO-Worldモデルを保存して読み込むには、次の手順に従ってください。
まず、YOLO-Worldモデルを読み込み、カスタムクラスを設定して保存します。
from ultralytics import YOLO
# YOLO-Worldモデルを初期化する
model = YOLO("yolov8s-world.pt") # または、yolov8m/l-world.ptを選択する
# カスタムクラスを定義する
model.set_classes(["person", "bus"])
# 定義したオフライン語彙を使ってモデルを保存する
model.save("custom_yolov8s.pt")保存後、custom_yolov8s.ptモデルは他の事前学習済みYOLOv8モデルと同様に動作しますが、重要な違いとして、定義したクラスだけを検出するよう最適化されています。このカスタマイズにより、特定のアプリケーションシナリオで検出性能と効率を大幅に向上させることができます。
from ultralytics import YOLO
# カスタムモデルを読み込む
model = YOLO("custom_yolov8s.pt")
# 推論を実行してカスタムクラスを検出する
results = model.predict("path/to/image.jpg")
# 結果を表示する
results[0].show()カスタム語彙を使って保存するメリット#
- 効率性:関連するオブジェクトに絞って検出処理を効率化し、計算負荷を軽減して推論を高速化します。
- 柔軟性:大規模な再トレーニングやデータ収集を行わずに、新しい検出タスクやニッチな検出タスクへモデルを簡単に適応させられます。
- シンプルさ:実行時にカスタムクラスを繰り返し指定する必要がなくなり、埋め込み済みの語彙ですぐにモデルを利用できるため、デプロイが簡単になります。
- 性能:定義済みオブジェクトの認識にモデルの注目とリソースを集中させ、指定クラスの検出精度を高めます。
このアプローチにより、最先端の物体検出モデルを特定のタスク向けに強力にカスタマイズでき、高度なAIをより利用しやすくし、幅広い実用的なアプリケーションに適用できます。
公式結果をゼロから再現する(実験的)#
データセットを準備する#
- トレーニングデータ
| データセット | 種類 | サンプル数 | ボックス | アノテーションファイル |
|---|---|---|---|---|
| Objects365v1 | 検出 | 609k | 9621k | objects365_train.json |
| GQA | グラウンディング | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | グラウンディング | 149k | 641k | final_flickr_separateGT_train.json |
- 検証データ
| データセット | 種類 | アノテーションファイル |
|---|---|---|
| LVIS minival | 検出 | minival.txt |
ゼロからトレーニングを開始する#
WorldTrainerFromScratchは高度にカスタマイズされており、検出データセットとグラウンディングデータセットの両方でyolo-worldモデルを同時にトレーニングできます。詳細については、ultralytics.models.yolo.world.train_world.pyを参照してください。
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# オプション1:Pythonの辞書を使用する
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
# オプション2:YAMLファイル(yolo_world_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 = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # YAMLファイルを使用する場合は、data="yolo_world_data.yaml"を指定します
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)引用と謝辞#
YOLO-Worldを使ったリアルタイムのオープン語彙物体検出における先駆的な取り組みを行ったTencent AILab Computer Vision Centerに、心より感謝いたします。
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}詳しくは、YOLO-Worldの原論文をarXivでご覧いただけます。プロジェクトのソースコードや追加リソースには、GitHubリポジトリからアクセスできます。分野の発展に尽力し、貴重な知見をコミュニティと共有してくださったことに感謝いたします。
よくある質問#
YOLO-Worldモデルは、Ultralytics YOLOv8フレームワークを基盤とする、高度なリアルタイム物体検出手法です。説明文に基づいて画像内のオブジェクトを識別するオープン語彙検出タスクに優れています。視覚と言語のモデリングと大規模データセットでの事前学習を活用することで、計算負荷を大幅に抑えながら高い効率と性能を実現しており、さまざまな業界のリアルタイムアプリケーションに最適です。
YOLO-Worldは、効率を高めるためにオフライン語彙を利用する「プロンプトしてから検出」戦略に対応しています。キャプションや特定のオブジェクトカテゴリなどのカスタムプロンプトは、あらかじめエンコードされ、オフライン語彙の埋め込みとして保存されます。この方法により、再トレーニングを行わずに検出処理を効率化できます。以下に示すように、モデル内でプロンプトを動的に設定して、特定の検出タスクに合わせて調整できます。
from ultralytics import YOLOWorld # YOLO-Worldモデルを初期化する model = YOLOWorld("yolov8s-world.pt") # カスタムクラスを定義する model.set_classes(["person", "bus"]) # 画像に対して予測を実行する results = model.predict("path/to/image.jpg") # 結果を表示する results[0].show()YOLO-Worldには、従来のオープン語彙検出モデルと比べて、次のようなメリットがあります。
- リアルタイム性能: CNNの計算速度を活用して、迅速かつ効率的な検出を実現します。
- 効率性と低いリソース要件: YOLO-Worldは、計算負荷とリソース要件を大幅に抑えながら、高い性能を維持します。
- カスタマイズ可能なプロンプト: 動的なプロンプト設定に対応しており、再トレーニングなしでユーザーがカスタム検出クラスを指定できます。
- ベンチマークでの優位性: 標準ベンチマークで、速度と効率の両面においてMDETRやGLIPなどの他のオープン語彙検出器を上回ります。
提供されているPython APIまたはCLIコマンドを使えば、YOLO-Worldモデルを自分のデータセットで簡単にトレーニングできます。Pythonを使ってトレーニングを開始する方法は次のとおりです。
from ultralytics import YOLOWorld # 事前学習済みのYOLOv8s-worldv2モデルを読み込む model = YOLOWorld("yolov8s-worldv2.pt") # COCO8データセットでモデルを100エポックトレーニングする results = model.train(data="coco8.yaml", epochs=100, imgsz=640)または、CLIを使用します:
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralyticsは、さまざまなタスクと動作モードに対応する複数の事前学習済みYOLO-Worldモデルを提供しています:
モデルタイプ 事前学習済み重み サポートされるタスク トレーニング 検証 推論 エクスポート YOLOv8s-world yolov8s-world.pt 物体検出 ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt 物体検出 ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt 物体検出 ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt 物体検出 ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt 物体検出 ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt 物体検出 ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt 物体検出 ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt 物体検出 ✅ ✅ ✅ ✅ 公式結果をゼロから再現するには、データセットを準備し、提供されているコードを使ってトレーニングを開始する必要があります。トレーニング手順では、データディクショナリを作成し、カスタムトレーナーで
trainメソッドを実行します:from ultralytics import YOLOWorld from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch data = { "train": { "yolo_data": ["Objects365.yaml"], "grounding_data": [ { "img_path": "flickr30k/images", "json_file": "flickr30k/final_flickr_separateGT_train.json", }, { "img_path": "GQA/images", "json_file": "GQA/final_mixed_train_no_coco.json", }, ], }, "val": {"yolo_data": ["lvis.yaml"]}, } model = YOLOWorld("yolov8s-worldv2.yaml") model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)