YOLO-Worldモデル
YOLO-Worldモデルは、高度なリアルタイムUltralytics YOLOv8ベースのOpen-Vocabulary Detectionタスク用のアプローチを導入します。このイノベーションにより、記述的なテキストに基づいて画像内の任意のオブジェクトを検出できます。YOLO-Worldは、競合他社に負けないパフォーマンスを維持しながら、計算需要を大幅に削減することで、多数のビジョンベースのアプリケーション向けの汎用性の高いツールとして登場しました。
見る: カスタムデータセットでのYOLO Worldトレーニングワークフロー
概要
YOLO-Worldは、従来のオープンボキャブラリー検出モデルが抱える課題に取り組みます。これらのモデルは、多くの場合、大規模な計算リソースを必要とする扱いにくいTransformerモデルに依存しています。また、事前定義されたオブジェクトカテゴリへの依存は、動的なシナリオでの有用性を制限します。YOLO-Worldは、ビジョン-言語モデリングを採用し、広範なデータセットで事前トレーニングを行うことで、YOLOv8フレームワークをオープンボキャブラリー検出機能で活性化させ、比類のない効率でゼロショットシナリオにおける広範なオブジェクトの識別に優れています。
主な特徴
-
リアルタイムソリューション: 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コマンドを提供します。
学習の使用法
ヒント
使用することを強くお勧めします。 yolov8-worldv2
このモデルは、決定性のある学習をサポートし、onnx/TensorRT などの他の形式へのエクスポートも容易なため、カスタムトレーニングに適しています。
物体検出 は、を使用すると簡単です。 train
メソッドを以下に示します:
例
PyTorch 学習済み *.pt
モデルおよび構成 *.yaml
filesを以下に渡すことができます。 YOLOWorld()
pythonでモデルインスタンスを作成するためのclass:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
予測の使用方法
物体検出は以下を使用すると簡単に行えます: predict
メソッドを以下に示します:
例
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640
このスニペットは、事前トレーニング済みのモデルをロードし、画像に対して予測を実行する簡潔さを示しています。
Val の使用法
データセットに対するモデルの検証は、次のように効率化されています。
例
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640
追跡の使用法
ビデオ/画像上のYOLO-Worldモデルを使用したオブジェクト追跡は、次のように効率化されています。
例
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video.mp4"
注
Ultralyticsが提供するYOLO-Worldモデルには、オフライン語彙の一部としてCOCOデータセットカテゴリが事前に構成されており、即時アプリケーションの効率が向上しています。この統合により、YOLOv8-Worldモデルは、追加のセットアップやカスタマイズを必要とせずに、COCOデータセットで定義された80の標準カテゴリを直接認識して予測できます。
プロンプトを設定
YOLO-Worldフレームワークを使用すると、カスタムプロンプトを通じてクラスを動的に指定できるため、ユーザーは再トレーニングなしで、特定のニーズに合わせてモデルを調整できます。この機能は、モデルを新しいドメインや、元々トレーニングデータの一部ではなかった特定のタスクに適応させる場合に特に役立ちます。カスタムプロンプトを設定することで、ユーザーは基本的にモデルの焦点を関心のあるオブジェクトに向け、検出結果の関連性と精度を高めることができます。
たとえば、アプリケーションが「person」と「bus」オブジェクトの検出のみを必要とする場合は、これらのクラスを直接指定できます。
例
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
カスタムクラスを設定した後、モデルを保存することもできます。これにより、特定のユースケースに特化した YOLO-World モデルのバージョンが作成されます。このプロセスでは、カスタムクラスの定義がモデルファイルに直接埋め込まれるため、モデルは、それ以上の調整なしに、指定されたクラスですぐに使用できるようになります。カスタム YOLOv8 モデルを保存およびロードするには、次の手順に従います。
例
まず、YOLO-Worldモデルをロードし、カスタムクラスを設定して保存します。
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")
保存後、custom_yolov8s.ptモデルは、他の事前トレーニング済みのYOLOv8モデルと同様に動作しますが、重要な違いがあります。それは、定義したクラスのみを検出するように最適化されていることです。このカスタマイズにより、特定のアプリケーションシナリオでの検出パフォーマンスと効率が大幅に向上します。
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()
カスタム語彙で保存することの利点
- 効率性: 関連オブジェクトに焦点を当てることで検出プロセスを効率化し、計算オーバーヘッドを削減して推論を高速化します。
- 柔軟性: 大規模な再トレーニングやデータ収集を必要とせずに、新しいまたはニッチな検出タスクへのモデルの簡単な適応を可能にします。
- シンプルさ: ランタイム時にカスタムクラスを繰り返し指定する必要性を排除することでデプロイメントを簡素化し、モデルを埋め込み語彙ですぐに使用できるようにします。
- パフォーマンス: モデルの注意とリソースを定義されたオブジェクトの認識に集中させることにより、指定されたクラスの検出精度を向上させます。
このアプローチは、特定のタスクに合わせて最先端の物体検出モデルをカスタマイズする強力な手段を提供し、高度なAIをより幅広い実用的なアプリケーションで利用できるようにします。
公式の結果をゼロから再現する(実験的)
データセットの準備
- 学習データ
データセット | 種類 | サンプル | ボックス | アノテーションファイル |
---|---|---|---|---|
Objects365v1 | 検出 | 609k | 9621k | objects365_train.json |
GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Valデータ
データセット | 種類 | アノテーションファイル |
---|---|---|
LVIS minival | 検出 | minival.txt |
スクラッチから学習を開始
注
WorldTrainerFromScratch
は、検出データセットとグラウンディングデータセットの両方でyolo-worldモデルを同時にトレーニングできるように高度にカスタマイズされています。詳細については、以下をご確認ください。 ultralytics.model.yolo.world.train_world.py.
例
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="flickr30k/images",
json_file="flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="GQA/images",
json_file="GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, 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モデルとは何ですか?また、その仕組みについて教えてください。
YOLO-Worldモデルは、Ultralytics YOLOv8フレームワークに基づく高度なリアルタイムオブジェクト検出アプローチです。記述的なテキストに基づいて画像内のオブジェクトを識別することにより、Open-Vocabulary Detectionタスクに優れています。ビジョン-言語モデリングと大規模データセットでの事前トレーニングを使用することにより、YOLO-Worldは計算需要を大幅に削減して高い効率とパフォーマンスを実現し、さまざまな業界のリアルタイムアプリケーションに最適です。
YOLO-Worldは、カスタムプロンプトを使用した推論をどのように処理しますか?
YOLO-Worldは、効率を高めるためにオフライン語彙を利用する「プロンプト・アンド・ディテクト」戦略をサポートしています。キャプションや特定のオブジェクトカテゴリのようなカスタムプロンプトは、事前にエンコードされ、オフライン語彙埋め込みとして保存されます。このアプローチは、再トレーニングを必要とせずに検出プロセスを効率化します。モデル内でこれらのプロンプトを動的に設定して、特定の検出タスクに合わせて調整できます。以下に例を示します。
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.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()
従来のOpen-Vocabulary検出モデルではなく、YOLO-Worldを選ぶべきなのはなぜですか?
YOLO-Worldは、従来のオープンボキャブラリー検出モデルに比べて、いくつかの利点があります。
- リアルタイムパフォーマンス: CNN の計算速度を活用して、迅速で効率的な検出を提供します。
- 効率と低リソース要件: YOLO-Worldは、計算量とリソースの需要を大幅に削減しながら、高いパフォーマンスを維持します。
- カスタマイズ可能なプロンプト: このモデルは動的なプロンプト設定をサポートしており、ユーザーは再トレーニングなしでカスタム検出クラスを指定できます。
- ベンチマークの卓越性: 標準的なベンチマークにおいて、MDETRやGLIPのような他のオープンボキャブラリー検出器よりも速度と効率の両方で優れています。
自分のデータセットで YOLO-World モデルをトレーニングするにはどうすればよいですか?
提供されているPython APIまたはCLIコマンドを使用すると、データセットでYOLO-Worldモデルを簡単に学習できます。Pythonを使用して学習を開始する方法を次に示します。
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
または、CLIを使用:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
利用可能な事前学習済みの YOLO-World モデルと、それらがサポートするタスクは何ですか?
Ultralyticsは、さまざまなタスクと動作モードをサポートする、複数の事前トレーニング済み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 | 物体検出 | ✅ | ✅ | ✅ | ✅ |
YOLO-Worldの公式結果をゼロから再現するにはどうすればよいですか?
公式の結果を最初から再現するには、データセットを準備し、提供されたコードを使用してトレーニングを開始する必要があります。トレーニング手順では、データディクショナリを作成し、以下を実行します。 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)