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ステップの変換:
- CLIPのViTエンコーダを密特徴抽出モードで動作させる(CLSトークンを削除し全パッチトークンを保持)
- 線形プロジェクションで各パッチ位置の検出クエリを生成
- テキスト埋め込みとの内積でクラススコアを計算
画像プロンプト(参照画像)も使用可能(one-shot detection)。
OWLv2の革新: 自己学習スケールアップ
OWLv2最大の特徴はWeb規模の自己学習:
- OWL-ViTをシード検出器として使用
- Web上の画像テキストペア(3.4B)から疑似ラベルを自動生成
- 疑似ラベルデータでOWLv2を再学習
- 品質フィルタリング後の高信頼ラベルのみ使用
この自己学習ループにより、人手アノテーションなしで劇的な精度向上を実現。
性能比較
| モデル | バックボーン | LVIS AP | COCO 0-shot AP | 備考 |
|---|---|---|---|---|
| OWL-ViT v1 | ViT-L/14 | 17.9 | 29.4 | ALIGN事前学習 |
| OWL-ViT v2 (B/16) | ViT-B/16 | 25.8 | 40.3 | 自己学習 |
| OWL-ViT v2 (L/14) | ViT-L/14 | 34.6 | 44.6 | 自己学習 |
| Grounding DINO | Swin-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商品の画像照合検出