コンテンツへスキップ

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 V100GPU 1台でYOLOv8 の優れた能力を実証しています。

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

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

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

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

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

モデル・タイプマップマップ50マップ75
yolov8s-世界37.452.040.6
yolov8s-ワールドV237.752.241.0
yolov8m-世界42.057.045.6
yolov8m-ワールドV243.058.446.8
yolov8l-世界45.761.349.8
yolov8l-ワールドV245.861.349.8
yolov8x-世界47.063.051.2
yolov8x-ワールドV247.162.851.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検出609k9621kobjects365_train.json
GQA接地621k3681kfinal_mixed_train_no_coco.json
Flickr30k接地149k641kfinal_flickr_separateGT_train.json
  • バルデータ
データ集合タイプ注釈ファイル
LVISミニヴァル検出minival.txt

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

WorldTrainerFromScratch は、検出データセットと接地データセットの両方でyolo-ワールドモデルを同時にトレーニングできるように高度にカスタマイズされています。詳細はこちらをご覧ください 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="../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リポジトリからアクセスできる。我々は、この分野を発展させ、彼らの貴重な洞察をコミュニティと共有しようとする彼らの姿勢に感謝している。

よくあるご質問

YOLO-ワールド・モデルとは何か?

YOLO-Worldモデルは、フレームワークに基づいた先進的なリアルタイム物体検出アプローチである。 Ultralytics YOLOv8フレームワークに基づいています。説明的なテキストに基づいて画像内のオブジェクトを識別することで、オープン語彙検出タスクに優れています。視覚言語モデリングと大規模なデータセットでの事前学習を使用することで、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()

従来のオープン語彙検出モデルではなく、YOLO-Worldを選ぶ理由は?

YOLO-Worldは、従来のOpen-Vocabulary検出モデルに比べていくつかの利点がある:

  • リアルタイム性能: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-ワールドモデルを提供します:

モデル・タイプ事前に訓練されたウェイト対応タスク推論バリデーショントレーニング輸出
YOLOv8s-世界yolov8s-World.pt物体検出
YOLOv8s-ワールドV2yolov8s-worldv2.pt物体検出
YOLOv8m-世界yolov8m-World.pt物体検出
YOLOv8m-ワールドV2yolov8m-worldv2.pt物体検出
YOLOv8l-世界yolov8l-World.pt物体検出
YOLOv8l-ワールドV2yolov8l-worldv2.pt物体検出
YOLOv8x-世界yolov8x-World.pt物体検出
YOLOv8x-ワールドV2yolov8x-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": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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)
📅作成 9ヶ月前 ✏️更新しました 1ヶ月前

コメント