Meet YOLO26: next-gen vision AI.

Link to this sectionYOLO-World モデル#

YOLO-World モデルは、オープンボキャブラリー検出タスク向けの、高度なリアルタイム Ultralytics YOLOv8 ベースのアプローチです。このイノベーションにより、説明的なテキストに基づいて画像内のあらゆるオブジェクトを検出することが可能になります。計算負荷を大幅に抑えつつ競合する性能を維持することで、YOLO-World は視覚ベースの多数のアプリケーションにとって多用途なツールとなります。



Watch: YOLO World training workflow on custom dataset

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

Link to this section概要#

YOLO-World は、従来のオープンボキャブラリー検出モデルが直面する課題に取り組みます。それらのモデルは多くの場合、膨大な計算リソースを必要とする扱いづらい Transformer モデルに依存しています。また、定義済みのオブジェクトカテゴリへの依存は、動的なシナリオにおける有用性を制限します。YOLO-World は、視覚-言語モデリングと広範なデータセットでの事前学習を採用し、ゼロショットシナリオにおいて卓越した効率で幅広いオブジェクトを特定することで、YOLOv8 フレームワークをオープンボキャブラリー検出機能で再活性化します。

Link to this section主な特徴#

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

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

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

  4. YOLOv8 による駆動: Ultralytics YOLOv8 を基盤とする YOLO-World は、リアルタイム物体検出の最新の進歩を活用し、比類のない精度と速度でオープンボキャブラリー検出を促進します。

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

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

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

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

注意

すべての 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オブジェクト検出

Link to this sectionCOCO データセットにおけるゼロショット転移#

性能
モデルタイプ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

Link to this section使用例#

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



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

Link to this section学習の使用方法#

ヒント

カスタム学習には 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")

Link to this sectionPredictの使用方法#

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

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

Link to this sectionValの使用方法#

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

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

Link to this sectionTrackの使用方法#

動画や画像に対する 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 の標準カテゴリを直接認識および予測できます。

Link to this sectionプロンプトの設定#

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

Link to this sectionカスタムボキャブラリーで保存する利点#

  • 効率: 関連するオブジェクトに焦点を合わせることで検出プロセスを合理化し、計算オーバーヘッドを削減して推論を高速化します。
  • 柔軟性: 大規模な再学習やデータ収集を必要とせずに、新しいまたはニッチな検出タスクにモデルを容易に適応させることができます。
  • 単純さ: ランタイムにカスタムクラスを繰り返し指定する必要をなくすことでデプロイを簡素化し、モデルに埋め込まれたボキャブラリーですぐに使用できるようにします。
  • 性能: 定義されたオブジェクトの認識にモデルの注意とリソースを集中させることで、指定されたクラスの検出精度を向上させます。

このアプローチは、最先端の物体検出モデルを特定のタスクに合わせてカスタマイズする強力な手段を提供し、高度な AI をより身近で、幅広い実用的なアプリケーションに適用可能にします。

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

Link to this sectionデータセットの準備#

  • 学習データ
データセットタイプサンプルボックスアノテーションファイル
Objects365v1検出609k9621kobjects365_train.json
GQAグラウンディング621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • 検証データ
データセットタイプアノテーションファイル
LVIS minival検出minival.txt

Link to this sectionスクラッチからのトレーニングを開始#

注意

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

Link to this section引用と謝辞#

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リポジトリからアクセスできます。分野の発展と貴重な知見をコミュニティと共有してくださったことに感謝いたします。

Link to this sectionよくある質問 (FAQ)#

Link to this sectionYOLO-Worldモデルとは何で、どのように機能しますか?#

YOLO-Worldモデルは、Ultralytics YOLOv8フレームワークに基づく高度なリアルタイム物体検出アプローチです。これは、記述テキストに基づいて画像内のオブジェクトを識別するオープンボキャブラリー検出タスクに優れています。ビジョン言語モデリングと大規模データセットでの事前学習を活用することで、YOLO-Worldは高い効率とパフォーマンスを達成し、計算要求を大幅に削減できるため、さまざまな業界のリアルタイムアプリケーションに最適です。

Link to this sectionYOLO-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()

Link to this section従来のオープンボキャブラリー検出モデルではなく、YOLO-Worldを選択する理由はありますか?#

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

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

Link to this section自分のデータセットで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

Link to this section利用可能な事前学習済みYOLO-Worldモデルと、それらがサポートするタスクは何ですか?#

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オブジェクト検出

Link to this sectionYOLO-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)

コメント