YOLO Vision 2026:

YOLO-World モデル#

YOLO-World Model は、オープンボキャブラリー検出タスクに向けた、高度でリアルタイムな Ultralytics YOLOv8 ベースのアプローチを導入します。このイノベーションにより、説明テキストに基づいて画像内のあらゆるオブジェクトを検出できるようになります。計算負荷を大幅に削減しつつ競争力のあるパフォーマンスを維持することで、YOLO-World は、多数のビジョンベースのアプリケーションに向けた多用途ツールとして登場します。



Watch: YOLO World training workflow on custom dataset

YOLO-World Model architecture overview

概要#

YOLO-World は、従来のオープンボキャブラリー検出モデルが直面する課題に対処します。これらは多くの場合、広範な計算リソースを必要とする扱いにくい Transformer モデルに依存しています。これらのモデルが事前定義されたオブジェクトカテゴリに依存していることも、動的なシナリオにおける有用性を制限しています。YOLO-World は、ビジョン言語モデリングを採用し、広範なデータセットでの事前トレーニングを行うことで、YOLOv8 フレームワークにオープンボキャブラリー検出機能を刷新し、比類のない効率性でゼロショットシナリオにおける幅広いオブジェクトの特定に優れています。

インスタンスマスク、ビジュアルプロンプト、またはプロンプトフリーモードを必要とするオープンボキャブラリーの作業については、同じ set_classes() APIを維持しているYOLOEをご参照ください。

主な特徴#

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

  2. 効率と性能: YOLO-World は、性能を犠牲にすることなく計算およびリソース要件を削減します。SAM などのモデルに対する堅牢な代替手段でありながら、計算コストを抑え、リアルタイムアプリケーションを実現します。

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

  4. Powered by YOLOv8: Ultralytics YOLOv8 を基盤とする YOLO-World は、リアルタイムオブジェクト検出における最新の進歩を活用し、比類のない精度と速度でオープンボキャブラリー検出を容易にします。

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

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

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

このセクションでは、利用可能なモデルとそれぞれの事前トレーニング済み重み、サポートするタスク、および推論検証トレーニングエクスポートなどのさまざまな操作モードとの互換性について詳しく説明します。サポートされているモードは ✅、サポートされていないモードは ❌ で示されます。

注意

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

モデルタイプ事前学習済みウェイトサポートされるタスクトレーニングバリデーション推論エクスポート
YOLOv8s-worldyolov8s-world.ptObject Detection
YOLOv8s-worldv2yolov8s-worldv2.ptObject Detection
YOLOv8m-worldyolov8m-world.ptObject Detection
YOLOv8m-worldv2yolov8m-worldv2.ptObject Detection
YOLOv8l-worldyolov8l-world.ptObject Detection
YOLOv8l-worldv2yolov8l-worldv2.ptObject Detection
YOLOv8x-worldyolov8x-world.ptObject Detection
YOLOv8x-worldv2yolov8x-worldv2.ptObject Detection

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 API および CLI コマンドを提供します。



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

学習の使用方法#

ヒント

カスタムトレーニングには、決定論的トレーニングをサポートし、ONNXやTensorRTなどの形式へのエクスポートが容易になるため、yolov8-worldv2 の使用を強くお勧めします。

以下に示すように、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の使用方法#

以下に示すように、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()

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

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

Trackの使用方法#

ビデオや画像に対する 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 prompt class names overview

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 をよりアクセスしやすくし、より幅広い実用的なアプリケーションに応用できるようにします。

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

データセットの準備#

  • 学習データ
データセットタイプサンプルボックスアノテーションファイル
Objects365v1検出609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_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

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

# 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 モデルは、Ultralytics YOLOv8 フレームワークに基づく高度でリアルタイムなオブジェクト検出アプローチです。説明テキストに基づいて画像内のオブジェクトを特定することにより、オープンボキャブラリー検出タスクで優れています。ビジョン言語モデリングと大規模データセットでの事前トレーニングを使用することで、YOLO-World は計算負荷を大幅に削減しながら高い効率性とパフォーマンスを実現し、さまざまな業界のリアルタイムアプリケーションに最適です。

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

    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は、従来のオープンボキャブラリー検出モデルに比べていくつかの利点を提供します。

    • リアルタイムパフォーマンス: CNNの計算速度を活用して、迅速で効率的な検出を提供します。
    • 効率性と低いリソース要件: YOLO-Worldは、計算およびリソースの要求を大幅に削減しながら、高いパフォーマンスを維持します。
    • カスタマイズ可能なプロンプト: モデルは動的なプロンプト設定をサポートしており、ユーザーは再トレーニングなしでカスタム検出クラスを指定できます。
    • 優れたベンチマーク: 標準ベンチマークにおいて、速度と効率の両面でMDETRやGLIPといった他のオープンボキャブラリー検出器を上回ります。
  • 自身のデータセットでの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
  • Ultralyticsは、さまざまなタスクや動作モードをサポートする複数の事前学習済みYOLO-Worldモデルを提供しています。

    モデルタイプ事前学習済みウェイトサポートされるタスクトレーニングバリデーション推論エクスポート
    YOLOv8s-worldyolov8s-world.ptObject Detection
    YOLOv8s-worldv2yolov8s-worldv2.ptObject Detection
    YOLOv8m-worldyolov8m-world.ptObject Detection
    YOLOv8m-worldv2yolov8m-worldv2.ptObject Detection
    YOLOv8l-worldyolov8l-world.ptObject Detection
    YOLOv8l-worldv2yolov8l-worldv2.ptObject Detection
    YOLOv8x-worldyolov8x-world.ptObject Detection
    YOLOv8x-worldv2yolov8x-worldv2.ptObject Detection
  • 公式の結果を最初から再現するには、データセットを準備し、提供されたコードを使用してトレーニングを開始する必要があります。トレーニング手順には、データ辞書の作成と、カスタムトレーナーを使用した 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)

コメント