Ultralytics YOLO27:

YOLO-Worldモデル#

YOLO-Worldモデルは、高度なリアルタイムUltralytics YOLOv8ベースのオープンボキャブラリー検出アプローチを導入します。この革新により、説明テキストに基づいて画像内のあらゆるオブジェクトを検出できます。競争力のある性能を維持しながら計算負荷を大幅に削減することで、YOLO-Worldは多数のビジョンベースアプリケーションに対応する汎用的なツールとなっています。



Watch: YOLO World training workflow on custom dataset

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

概要#

YOLO-Worldは、従来のオープンボキャブラリー検出モデルが直面していた課題に対処します。従来のモデルは、多くの場合、大規模な計算リソースを必要とする扱いの難しいTransformerモデルに依存しています。また、これらのモデルは事前定義されたオブジェクトカテゴリに依存するため、動的なシナリオでの有用性も制限されます。YOLO-Worldは、ビジョン言語モデリングと大規模なデータセットでの事前学習を用いて、YOLOv8フレームワークにオープンボキャブラリー検出機能を加えます。これにより、ゼロショットシナリオで幅広いオブジェクトを卓越した効率で識別できます。

インスタンスマスク、ビジュアルプロンプト、またはプロンプト不要モードも必要なオープンボキャブラリー処理については、同じset_classes() APIを維持するYOLOEをご覧ください。

主な特徴#

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

  2. 効率と性能: YOLO-Worldは、性能を犠牲にすることなく計算要件とリソース要件を大幅に削減します。SAMなどのモデルに代わる堅牢な選択肢を、わずかな計算コストで提供し、リアルタイムアプリケーションを可能にします。

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

  4. YOLOv8による実現: Ultralytics YOLOv8を基盤として構築されたYOLO-Worldは、リアルタイムオブジェクト検出における最新の進歩を活用し、卓越した精度と速度でオープンボキャブラリー検出を実現します。

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

  6. 多様なアプリケーション: YOLO-Worldの革新的なアプローチは、さまざまなビジョンタスクに新たな可能性をもたらし、既存手法を桁違いに上回る速度向上を実現します。

利用可能なモデル、対応タスク、動作モード#

このセクションでは、利用可能なモデルとそれぞれの事前学習済みウェイト、対応するタスク、さらに推論検証トレーニングエクスポートなどの各種動作モードとの互換性について説明します。対応モードは✅、非対応モードは❌で示します。

注記

すべてのYOLOv8-Worldウェイトは、公式YOLO-Worldリポジトリから直接移行されており、その優れた成果を示しています。

モデルタイプ事前学習済み重みサポートされているタスクトレーニング検証推論エクスポート
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 🚀

トレーニングの使用方法#

ヒント

カスタムトレーニングには、決定論的トレーニングをサポートし、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のプロンプトクラス名の概要

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

一部のユーザーは、背景クラスとして空の文字列""を追加すると、特定のシナリオで検出性能が向上することを確認しています。この動作はシナリオに依存すると考えられ、正確なメカニズムは完全には解明されていません。

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
GQAグラウンディング621k3681kfinal_mixed_train_no_coco.json
Flickr30kグラウンディング149k641kfinal_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は、効率を高めるためにオフラインボキャブラリーを利用する「プロンプト後検出」戦略をサポートしています。キャプションや特定のオブジェクトカテゴリなどのカスタムプロンプトは、あらかじめエンコードされ、オフラインボキャブラリーのEmbeddingとして保存されます。このアプローチにより、再トレーニングなしで検出プロセスを効率化できます。以下に示すように、モデル内でこれらのプロンプトを動的に設定し、特定の検出タスクに合わせて調整できます。

    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などの他のオープンボキャブラリー検出器を上回ります。
  • 提供されている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.pt data=coco8.yaml epochs=100 imgsz=640
  • Ultralyticsは、さまざまなタスクと動作モードをサポートする複数の事前学習済みYOLO-Worldモデルを提供しています。

    モデルタイプ事前学習済み重みサポートされているタスクトレーニング検証推論エクスポート
    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オブジェクト検出
  • 公式結果をゼロから再現するには、データセットを準備し、提供されているコードを使用してトレーニングを開始する必要があります。トレーニング手順では、データディクショナリを作成し、カスタムトレーナーで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)

コメント