コンテンツへスキップ

YOLO-世界モデル

YOLO-ワールド・モデルは、先進的なリアルタイム・モデルを導入している。 UltralyticsYOLOv8-ベースのアプローチを導入。この技術革新により、説明的なテキストに基づいて画像内のあらゆる物体の検出が可能になります。YOLO-Worldは、競争力のある性能を維持しながら計算量を大幅に削減することで、多くの視覚ベースのアプリケーションのための汎用性の高いツールとして登場しました。

YOLO-ワールド・モデルのアーキテクチャ概要



見るんだ: YOLO カスタムデータセットでのワールドトレーニングワークフロー

概要

YOLO-Worldは、従来のOpen-Vocabulary検出モデルが直面していた課題に取り組んでいます。このモデルは、多くの場合、膨大な計算リソースを必要とする煩雑なTransformerモデルに依存しています。これらのモデルは、事前に定義されたオブジェクトカテゴリに依存しているため、動的なシナリオでの実用性も制限されています。YOLO-Worldは、オープン語彙検出機能を備えたYOLOv8 フレームワークを活性化します。視覚言語モデリングを採用し、膨大なデータセットで事前トレーニングを行うことで、比類のない効率でゼロショット・シナリオの広範なオブジェクトを識別することに優れています。

主な特徴

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

  2. 効率とパフォーマンス: YOLO-Worldは、パフォーマンスを犠牲にすることなく、計算とリソースの要件を削減し、SAM のようなモデルに代わる堅牢なモデルを提供しますが、計算コストはほんのわずかで、リアルタイム・アプリケーションを可能にします。

  3. オフライン語彙による推論: YOLO-Worldは「プロンプト→検出」戦略を導入し、オフライン語彙を採用することで効率をさらに向上させる。このアプローチにより、キャプションやカテゴリを含む、事前に計算されたカスタムプロンプトの使用が可能になり、オフライン語彙埋め込みとしてエンコードされ保存されるため、検出プロセスが効率化される。

  4. Powered byYOLOv8 :に基づいています。 Ultralytics YOLOv8YOLO-Worldは、リアルタイム物体検出の最新の進歩を活用し、比類のない精度とスピードでオープン語彙検出を容易にします。

  5. 優れたベンチマーク YOLOWorldは、標準的なベンチマークにおいて、MDETRやGLIPシリーズを含む既存のオープン語彙検出器をスピードと効率性の点で上回り、NVIDIA V100 GPU 1台でYOLOv8 の優れた能力を実証しています。

  6. 多彩なアプリケーション: YOLO-ワールドの革新的なアプローチは、多くのビジョンタスクに新たな可能性をもたらし、既存の方法に比べて桁違いのスピードアップを実現します。

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

このセクションでは、特定の事前訓練された重み、サポートするタスク、推論検証トレーニングエクスポートなどの様々な動作モードとの互換性と共に利用可能なモデルの詳細を説明します(サポートされるモードは✅、サポートされないモードは❌で示されます)。

モデル・タイプ 事前に訓練されたウェイト 対応タスク 推論 バリデーション トレーニング 輸出
YOLOv8s-世界 yolov8s-World.pt 物体検出
YOLOv8s-ワールドV2 yolov8s-worldv2.pt 物体検出
YOLOv8m-世界 yolov8m-World.pt 物体検出
YOLOv8m-ワールドV2 yolov8m-worldv2.pt 物体検出
YOLOv8l-世界 yolov8l-World.pt 物体検出
YOLOv8l-ワールドV2 yolov8l-worldv2.pt 物体検出
YOLOv8x-世界 yolov8x-World.pt 物体検出
YOLOv8x-ワールドV2 yolov8x-worldv2.pt 物体検出

COCOデータセットでのゼロショット転送

モデル・タイプ マップ マップ50 マップ75
yolov8s-世界 37.4 52.0 40.6
yolov8s-ワールドV2 37.7 52.2 41.0
yolov8m-世界 42.0 57.0 45.6
yolov8m-ワールドV2 43.0 58.4 46.8
yolov8l-世界 45.7 61.3 49.8
yolov8l-ワールドV2 45.8 61.3 49.8
yolov8x-世界 47.0 63.0 51.2
yolov8x-ワールドV2 47.1 62.8 51.4

使用例

YOLO-Worldモデルは、Python アプリケーションに簡単に統合できます。Ultralytics 開発を効率化するために、ユーザーフレンドリーなPython APIとCLI コマンドを提供します。

列車の利用

チップ

の使用を強く推奨する。 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 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

このスニペットは、事前に訓練されたモデルをロードし、画像上で予測を実行するシンプルさを示しています。

バルの使用

データセットに対するモデルの検証は、次のように効率化される:

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-世界モデルを用いた物体追跡は、以下のように効率化される:

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/file.mp4"

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

プロンプトを設定する

YOLO-ワールドプロンプトのクラス名の概要

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

カスタムクラスを設定した後にモデルを保存することもできます。こうすることで、特定のユースケースに特化したバージョンの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をより身近で幅広い実用的アプリケーションに適用できるようにする。

公式結果をゼロから再現(実験)

データセットを準備する

  • 列車データ
データ集合 タイプ サンプル ボックス 注釈ファイル
オブジェクト365v1 検出 609k 9621k objects365_train.json
GQA 接地 621k 3681k final_mixed_train_no_coco.json
Flickr30k 接地 149k 641k final_flickr_separateGT_train.json
  • バルデータ
データ集合 タイプ 注釈ファイル
LVISミニヴァル 検出 minival.txt

ゼロからのトレーニング開始

WorldTrainerFromScratch は、検出データセットと接地データセットの両方でyolo-ワールドモデルを同時にトレーニングできるように高度にカスタマイズされています。詳細はこちらをご覧ください ultralytics.model.yolo.world.train_world.py.

from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
from ultralytics import YOLOWorld

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/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)

引用と謝辞

Tencent AILab Computer Vision Centerの YOLO-Worldを用いたリアルタイムオープンボキャブラリーオブジェクト検出の先駆的研究に感謝する:

@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リポジトリからアクセスできる。我々は、この分野を発展させ、彼らの貴重な洞察をコミュニティと共有しようとする彼らの姿勢に感謝している。



作成 2024-02-14 更新 2024-05-02
著者RizwanMunawar(2),glenn-jocher(3),Burhan-Q(1),Laughing-q(4)

コメント