YOLO-World モデル

YOLO-World モデルは、オープンボキャブラリー検出タスクのための、高度でリアルタイムな Ultralytics YOLOv8 ベースのアプローチを導入します。この革新により、説明テキストに基づいて画像内のあらゆる物体を検出することが可能になります。計算負荷を大幅に削減しつつ高いパフォーマンスを維持する YOLO-World は、多数の視覚ベースのアプリケーションにとって多目的なツールとなります。



Watch: YOLO World training workflow on custom dataset

YOLO-World モデルアーキテクチャの概要

概要

YOLO-World は、従来のオープンボキャブラリー検出モデルが直面していた課題に取り組みます。それらのモデルは、膨大な計算リソースを必要とする扱いにくい Transformer モデルに依存することが多くありました。また、定義済みの物体カテゴリへの依存も、動的なシナリオでの有用性を制限していました。YOLO-World は、ビジョン-言語モデリングを採用し、広大なデータセットで事前学習を行うことで YOLOv8 フレームワークを強化し、ゼロショットシナリオにおいて比類のない効率で幅広い物体を識別することに秀でています。

主な特徴

  1. リアルタイムソリューション: CNN の計算速度を活用することで、YOLO-World は迅速なオープンボキャブラリー検出ソリューションを提供し、即時の結果を必要とする業界のニーズに応えます。

  2. 効率性とパフォーマンス: YOLO-World は、パフォーマンスを犠牲にすることなく計算リソースの要件を削減します。SAM のようなモデルに対する強力な代替手段でありながら、わずかな計算コストでリアルタイムアプリケーションを実現します。

  3. オフラインボキャブラリーによる推論: YOLO-World は「プロンプトして検出する (prompt-then-detect)」戦略を導入し、オフラインボキャブラリーを利用することでさらなる効率化を図ります。このアプローチでは、キャプションやカテゴリなど、事前に計算されたカスタムプロンプトをエンコードし、オフラインボキャブラリーの埋め込みとして保存することで、検出プロセスを合理化できます。

  4. YOLOv8 による駆動: Ultralytics YOLOv8 をベースに構築された YOLO-World は、リアルタイム物体検出における最新の進歩を活用し、比類のない精度と速度でオープンボキャブラリー検出を実現します。

  5. 卓越したベンチマーク: YOLO-World は、標準的なベンチマークにおいて、単一の NVIDIA V100 GPU 上での YOLOv8 の優れた能力を示し、速度と効率の面で MDETR や GLIP シリーズを含む既存のオープンボキャブラリー検出器を凌駕しています。

  6. 多目的なアプリケーション: YOLO-World の革新的なアプローチは、多数の視覚タスクに対する新たな可能性を切り開き、既存の手法と比較して桁違いの速度向上を実現します。

利用可能なモデル、サポートされているタスク、および動作モード

本セクションでは、利用可能なモデルとその特定の事前学習済み重み、対応するタスク、および 推論検証学習エクスポート といった様々な操作モードとの互換性について詳しく説明します。✅ はサポートされているモード、❌ はサポートされていないモードを示します。

注意

すべての YOLOv8-World 重みは、公式の YOLO-World リポジトリから直接移行されたものであり、その優れた貢献が強調されています。

モデルタイプ事前学習済み重みサポートタスク推論 (Inference)検証学習Export
YOLOv8s-worldyolov8s-world.pt物体検出
YOLOv8s-worldv2yolov8s-worldv2.pt物体検出
YOLOv8m-worldyolov8m-world.pt物体検出
YOLOv8m-worldv2yolov8m-worldv2.pt物体検出
YOLOv8l-worldyolov8l-world.pt物体検出
YOLOv8l-worldv2yolov8l-worldv2.pt物体検出
YOLOv8x-worldyolov8x-world.pt物体検出
YOLOv8x-worldv2yolov8x-worldv2.pt物体検出

COCO データセットにおけるゼロショット転移

性能
モデルタイプmAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

使用例

YOLO-World モデルは Python アプリケーションに簡単に統合できます。Ultralytics は開発を効率化するために使いやすい Python APICLI コマンド を提供しています。



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

学習の使用法

ヒント

カスタム学習には yolov8-worldv2 モデルの使用を強く推奨します。これは確定的な学習をサポートし、ONNX や TensorRT などの他のフォーマットへのエクスポートも容易だからです。

物体検出は、以下に示すように train メソッドを使用して簡単に行えます。

PyTorch の事前学習済み *.pt モデルや設定 *.yaml ファイルを YOLOWorld() クラスに渡すことで、Python でモデルインスタンスを作成できます。

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 YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")

予測の使用方法

物体検出は、以下に示すように 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()

このコードスニペットは、事前学習済みモデルを読み込み、画像に対して予測を実行する単純さを示しています。

検証の使用方法

データセットに対するモデルの検証は、以下のように合理化されています。

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")

トラッキングの使用方法

ビデオ/画像に対する 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")
注意

Ultralytics が提供する YOLO-World モデルには、オフラインボキャブラリーの一部として COCO データセットのカテゴリが事前設定されており、即時の適用に向けて効率が高められています。この統合により、YOLOv8-World モデルは、追加の設定やカスタマイズを必要とせずに、COCO データセットで定義された 80 の標準カテゴリを直接認識および予測できます。

プロンプトの設定

YOLO-World プロンプトクラス名の概要

YOLO-World フレームワークでは、カスタムプロンプトを通じてクラスを動的に指定できるため、ユーザーは再学習なしでモデルを特定のニーズに合わせて調整できます。この機能は、元の学習データには含まれていなかった新しいドメインや特定のタスクにモデルを適応させる場合に特に役立ちます。カスタムプロンプトを設定することで、ユーザーは本質的にモデルの焦点を関心のある物体に向けることができ、検出結果の関連性と精度を向上させることができます。

例えば、アプリケーションで「人」と「バス」の物体のみを検出する必要がある場合は、以下のようにこれらのクラスを直接指定できます。

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()
背景クラス

一部のユーザーは、背景クラスとして空の文字列 "" を追加すると、特定のシナリオで検出パフォーマンスが向上することを見出しています。この動作はシナリオに依存するようであり、正確なメカニズムは完全には解明されていません。

model.set_classes(["person", "bus", ""])

カスタムクラスを設定した後にモデルを保存することもできます。これを行うことで、特定のユースケースに特化した YOLO-World モデルのバージョンを作成できます。このプロセスにより、カスタムクラス定義がモデルファイルに直接埋め込まれ、さらなる調整なしで指定したクラスでモデルを使用できるようになります。カスタム YOLO-World モデルを保存およびロードするには、以下の手順に従ってください。

まず 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 をより利用しやすく、より広範な実用的なアプリケーションに適用可能にします。

公式の結果をゼロから再現する(実験的)

データセットの準備

  • 学習データ
データセットタイプサンプルBoxesアノテーションファイル
Objects365v1検出609k9621kobjects365_train.json
GQAグラウンディング621k3681kfinal_mixed_train_no_coco.json
Flickr30kグラウンディング149k641kfinal_flickr_separateGT_train.json
  • 検証データ
データセットタイプアノテーションファイル
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

# Option 1: Use Python dictionary
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"]),
)

# Option 2: Use YAML file (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,  # or data="yolo_world_data.yaml" if using YAML file
    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リポジトリからアクセスできます。分野の発展に尽力し、貴重な知見をコミュニティと共有してくださったことに感謝いたします。

FAQ

YOLO-Worldモデルとは何か、そしてどのように機能するのか?

YOLO-Worldモデルは、Ultralytics YOLOv8フレームワークに基づいた高度なリアルタイム物体検出アプローチです。このモデルは、説明文に基づいて画像内の物体を特定するオープンボキャブラリー検出タスクに優れています。ビジョン・言語モデリングを使用し、大規模データセットで事前トレーニングを行うことで、YOLO-Worldは計算負荷を大幅に削減しつつ高い効率とパフォーマンスを実現しており、多様な産業におけるリアルタイムアプリケーションに最適です。

YOLO-Worldはカスタムプロンプトによる推論をどのように処理するのか?

YOLO-Worldは、オフライン語彙を利用して効率を高める「プロンプトしてから検出する(prompt-then-detect)」戦略をサポートしています。キャプションや特定の物体カテゴリなどのカスタムプロンプトは、事前にエンコードされ、オフライン語彙の埋め込み(embeddings)として保存されます。このアプローチにより、再トレーニングの必要なしに検出プロセスが効率化されます。以下の例のように、モデル内でこれらのプロンプトを動的に設定することで、特定の検出タスクに合わせてカスタマイズできます。

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()

なぜ従来のオープンボキャブラリー検出モデルではなくYOLO-Worldを選択すべきなのか?

YOLO-Worldには、従来のオープンボキャブラリー検出モデルと比較していくつかの利点があります:

  • リアルタイム性能: CNNの計算速度を活用し、迅速で効率的な検出を提供します。
  • 効率性と低いリソース要件: YOLO-Worldは、計算およびリソースの要求を大幅に削減しながら、高いパフォーマンスを維持します。
  • カスタマイズ可能なプロンプト: このモデルは動的なプロンプト設定をサポートしており、ユーザーは再トレーニングを行うことなく、独自の検出クラスを指定できます。
  • ベンチマークの卓越性: 標準的なベンチマークにおいて、速度と効率の両面で、MDETRやGLIPといった他のオープンボキャブラリー検出器を上回ります。

自分のデータセットでYOLO-Worldモデルをトレーニングするにはどうすればよいか?

YOLO-Worldモデルの自身のデータセットでのトレーニングは、提供されているPython APIまたはCLIコマンドを通じて簡単に行えます。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モデルを提供しています:

モデルタイプ事前学習済み重みサポートタスク推論 (Inference)検証学習Export
YOLOv8s-worldyolov8s-world.pt物体検出
YOLOv8s-worldv2yolov8s-worldv2.pt物体検出
YOLOv8m-worldyolov8m-world.pt物体検出
YOLOv8m-worldv2yolov8m-worldv2.pt物体検出
YOLOv8l-worldyolov8l-world.pt物体検出
YOLOv8l-worldv2yolov8l-worldv2.pt物体検出
YOLOv8x-worldyolov8x-world.pt物体検出
YOLOv8x-worldv2yolov8x-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)

コメント