AI・機械学習
中級

OWL-ViT / OWLv2(アウルビット / アウルブイツー)

GoogleがCLIPを転用したゼロショット物体検出モデル。OWL-ViT(2022)→OWLv2(2023)と進化し、自己学習で3.4B画像を活用。COCO AP 44.6を達成。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
ゼロショット検出
CLIP
Google
ViT
オープンワールド

OWL-ViT / OWLv2 とは

OWL-ViT(Open-World Localization ViT)は、GoogleがCLIPのビジョン-言語アライメントを物体検出タスクに活用した研究シリーズ。2022年のOWL-ViT(ECCV 2022)から始まり、2023年のOWLv2で大幅性能向上を達成した。

OWL-ViT(v1)の仕組み

CLIPからの転用設計

入力テキスト → CLIPテキストエンコーダ → テキスト埋め込み ┐
                                                            → 類似度スコア → バウンディングボックス
入力画像 → CLIPビジョンエンコーダ(ViT-B/32等)→ パッチ特徴 ┘

3ステップの変換:

  1. CLIPのViTエンコーダを密特徴抽出モードで動作させる(CLSトークンを削除し全パッチトークンを保持)
  2. 線形プロジェクションで各パッチ位置の検出クエリを生成
  3. テキスト埋め込みとの内積でクラススコアを計算

画像プロンプト(参照画像)も使用可能(one-shot detection)。

OWLv2の革新: 自己学習スケールアップ

OWLv2最大の特徴はWeb規模の自己学習:

  1. OWL-ViTをシード検出器として使用
  2. Web上の画像テキストペア(3.4B)から疑似ラベルを自動生成
  3. 疑似ラベルデータでOWLv2を再学習
  4. 品質フィルタリング後の高信頼ラベルのみ使用

この自己学習ループにより、人手アノテーションなしで劇的な精度向上を実現。

性能比較

モデルバックボーンLVIS APCOCO 0-shot AP備考
OWL-ViT v1ViT-L/1417.929.4ALIGN事前学習
OWL-ViT v2 (B/16)ViT-B/1625.840.3自己学習
OWL-ViT v2 (L/14)ViT-L/1434.644.6自己学習
Grounding DINOSwin-L–52.5テキスト融合

HuggingFace での利用

from transformers import Owlv2Processor, Owlv2ForObjectDetection
import torch
from PIL import Image

processor = Owlv2Processor.from_pretrained("google/owlv2-large-patch14-ensemble")
model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-large-patch14-ensemble")

image = Image.open("sample.jpg")

# テキストプロンプトによる検出
texts = [["a photo of a cat", "a photo of a dog", "a photo of a car"]]
inputs = processor(text=texts, images=image, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)

# 後処理
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(
    outputs=outputs,
    threshold=0.2,
    target_sizes=target_sizes
)[0]

for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
    box = [round(x, 2) for x in box.tolist()]
    print(f"Detected {texts[0][label]} with score {score:.3f} at {box}")

画像プロンプト(One-Shot)検出

# 参照画像で検索(テキスト不要)
query_image = Image.open("query_object.jpg")  # 検索したい物体の画像
inputs = processor(images=image, query_images=query_image, return_tensors="pt")
outputs = model.image_guided_detection(**inputs)

活用場面

  • インダストリアル: 未知部品の外観検査(参照画像ベース)
  • コンテンツ検索: テキストクエリによる画像内オブジェクト検索
  • ロボット: オープンワールド環境での物体認識
  • データアノテーション: ゼロショット検出による半自動ラベリング
  • 商品識別: EC商品の画像照合検出
この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/7