TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

オープンボキャブラリー検出:CLIPのテキスト埋め込みを検出器に組み込む — OWL-ViT、OWLv2、Grounding DINO、YOLO-World、YOLOE

ステータス:ドラフト(2026-10-13)、一部実測。 分類ヘッドの例は、実際のCLIPの重みを使わずに構造だけを模倣したものです(code/12_open_vocab_head.py、ノートPCのCPUで1秒以内)。本記事のモデルは私たちの環境では実行していません(未実測)。論文の数値は原文から条件とともに引用し、ハードウェアはグレードで表記しています。CLIP自体の学習原理については、姉妹シリーズ(自己教師あり・映像・姿勢・スポーツ)で取り上げます。 執筆ルール:実測データを基本とし、測定できなかったものは「未実測」と表記します。

目次

1. 閉じた語彙の壁

第5・6・8回の検出器は 閉じた語彙(Closed-Vocabulary)です。COCOで学習した場合、80種類(人、自動車、テニスラケット…)しか見つけられません。「卓球のラケット」や「卓球台」を見つけさせるには、そのラベルが付いたデータを集めて再学習する必要があります。

構造の観点から見ると理由は単純です。検出器の最後の分類ヘッドは (영역 특징) · Wᵀ という形をしており、Wはクラスごとに1行の 固定行列(80×d)です。クラスを1つ追加するにはWにさらにもう1行必要ですが、その行の値はデータを用いて学習しなければ得られません。

열린 어휘 검출: 고정 분류 머리를 글자 임베딩으로 바꾼다 닫힌 어휘(보통 검출기) 영역 특징 분류 머리 W (80×d) COCO 80종만. 새 종류는 다시 학습 열린 어휘(OWL-ViT · Grounding DINO · YOLO-World · YOLOE) 영역 임베딩 r 글자 인코더(CLIP 계열) 입력: "racket", "ball", "table" … 유사도 r·tᵢ / τ 어휘마다 점수 어휘 = 그때그때 적는 글자 클래스 추가 = 행 하나 추가 어휘를 미리 정하면 글자 임베딩을 한 번만 계산해 가중치로 「구워」 둘 수 있다(YOLO-World·YOLOE).
図:閉じた語彙の検出器における固定分類ヘッドと、テキストエンコーダーが生成した埋め込みでそれを代替するオープンボキャブラリー検出器の比較

2. 鍵:CLIPのテキスト埋め込み

CLIP(2021)は、インターネット上の画像と説明文のペア4億件を用いて、画像エンコーダーとテキストエンコーダーが同じ空間に出力ベクトルを生成するように学習したモデルです。ペアが一致する画像とテキストは近づけ、一致しないものは遠ざける 対照学習を行っています。その結果、「a photo of a racket」のテキストベクトルとラケットの写真の画像ベクトルが近くなります。このテキストベクトルを分類器の重みとして使用すると、ImageNetの学習画像を1枚も使用せずに(ゼロショット)、ImageNet top-1で76.2%を達成しました(ViT-L/14, 336px)。ResNet-50をImageNetで直接学習させた場合と同等レベルです。

CLIPがなぜこのように学習されるのかについては姉妹シリーズで扱い、本記事では このテキストベクトルを検出器にどのように組み込むかだけに焦点を当てます。アイデアは一言で表せます。「 Wの行を学習するのではなく、クラス名をテキストエンコーダーに入力して生成する。

닫힌 어휘:  점수 = r · W[클래스]ᵀ               (W 는 학습한 80×d 행렬)
열린 어휘:  점수 = r · 글자인코더("racket")ᵀ / τ  (어휘는 쓸 때 적는다)

実践してみる:クラス追加 = 行を1つ追加

本物のCLIPの代わりにランダムな2層MLPをテキストエンコーダーの模倣として使用し、80×80の特徴マップ(640px入力、ストライド8に相当)に分類ヘッドを結合しました(実測。数値自体に意味はなく、構造のみを確認します)。

어휘 3개 → 분류 머리 행렬 (3, 256)
「racket」을 더하면 (4, 256) — 다른 가중치는 그대로, 출력 칸마다 로짓이 4개
두 방식 출력 최대 차 0.0e+00, 프레임당 9.09 ms → 2.71 ms

最後の行は、毎フレームの語彙をテキストエンコーダーに入力する方式と、語彙を一度だけエンコードして行列として 焼き込んでおく 方式を比較したものです。結果は完全に同じであり、時間のみが短縮されました。模倣エンコーダーが非常に小さいため差は3倍程度に留まりますが、実際のCLIPのテキストエンコーダーはTransformerであるため、この差はさらに大きくなるはずです(未実測)。これこそが第6節のYOLO-World・YOLOEが狙っている点です。

3. OWL-ViT(2022):ViTトークンごとにボックス1つ

MindererらによるOWL-ViTは、最もシンプルなアプローチを示しました。

  1. CLIPのように対照学習を行ったViT(第7回)を持ち込みます。
  2. 最後にトークンを1つに集約するプーリングを 削除します。 そうすることで、パッチトークンごとにほうぼうに出力が残ります。
  3. トークンごとに軽量な ボックスヘッド(このトークンが担当するオブジェクトのボックス)と 分類ヘッド(トークン埋め込み)を取り付けます。分類ヘッドの重みは クラス名のテキスト埋め込みです。
  4. 検出データ(OpenImages・Objects365・Visual Genomeのうち2つを混合)でファインチューニングします。

第8回のDETRのように、1つのトークン(スロット)が1つのオブジェクトを担当し、マッチングにもDETR式の集合ロスを用います。異なる点は、専用のスロットが存在せず 画像パッチトークンがそのままスロットになるという点です。

結果(論文):LVIS v1.0の検証でAP 34.6、 レアクラスのAP 31.2(ViT-L/14, Objects365+VG学習, 840px)。レアクラスの名前は学習から除外されていたため、31.2という数値は初めて見るクラスに対するゼロショットの値です。

テキストの代わりに 例となる画像で問い合わせることも可能です。画像パッチの埋め込みをクエリとして使用すると、「これに似たものを探せ」という意味になります。学習に含まれていなかったCOCOのクラスにおけるワンショット検出のAP50は、従来の最高値26.0から41.8へと向上しました。

4. OWLv2(2023):自らラベルを付けてスケールアップ

検出用のラベルは高価です。MindererらはOWLv2において、 自己学習(self-training)によりこの壁を乗り越えます。

  1. 既存のOWL-ViT(CLIP L/14)を使用して、ウェブ画像データWebLI(画像と代替テキストのペア約100億件)全体に 疑似ボックスラベルを付与します。語彙は画像の代替テキストから抽出された用語です。
  2. この疑似ラベルを用いて新しいモデルを学習します(OWL-ST)。学習例は10億件を超えます。
  3. 検出データでファインチューニングします。

結果(論文):LVISのレアクラスAPが 31.2% → 44.6%(L/14、相対43%向上)、より大規模なG/14では47.2%となりました。規模が拡大したため学習効率も改善されています。上位k個のトークンのみに対してボックスを計算する「物体らしさ」ヘッド、学習時に画素分散が低いパッチを50%破棄する処理、複数画像をモザイク状に結合する手法を組み合わせることで、学習計算量を約半分に、スループットを約2倍に向上させました。

第9回におけるSAMのデータエンジンと同じ考え方です。 モデルがラベルを作成し、そのラベルを使ってより優れたモデルを構築する。 第11回のSAM 3では、PCSの精度をこのOWLv2と比較しています。

5. GLIP·Grounding DINO:テキストと画像を深く融合させる

OWL-ViTは、画像特徴量とテキスト埋め込みを 最後の内積1回でしか交差させません。「左側の選手が持っているラケット」のように文章中の関係性が重要となる場合には不十分です。別のアプローチでは、早い段階から両者を深く融合させます。

深く融合させる代償は速度です。テキストが変更されると画像側の計算もやり直す必要があるため、語彙をあらかじめ焼き込んでおくことができません。

6. YOLO-World·YOLOE:リアルタイム処理に向けて

第6回のYOLOシリーズの速度に、オープンボキャブラリーの機能を組み込もうとする試みです。

YOLO-World(2024):YOLOの特徴ピラミッドにテキスト埋め込みを統合するRepVL-PANと、領域とテキストの対照ロスを採用しています。核心にあるのは**「プロンプトが先、検出はその後」**というアプローチです。ユーザーが語彙を決定すると、一度だけエンコードして ネットワークの重みとして再パラメータ化(re-parameterize)を行い、推論時にはテキストエンコーダーを完全に切り離します。これが第2節の例における「焼き込み」です。

結果(論文の表2):LVIS minivalのゼロショットで 35.4 AP、52.0 FPS。多くの条件が付随する数値です。最大サイズのYOLO-World-L(焼き込み後のパラメータ数4,800万、焼き込み前1億1,000万・17.6 FPS)、Objects365 + GoldG + 疑似ラベルを付与したCC3Mの24万6千枚で学習し、データセンター向けGPU1枚でFP16・TensorRTを使用せずに測定された値です。公式リポジトリは GPL-3.0 であり、商用利用については別途問い合わせるよう案内されています。

YOLOE(2025):3種類のプロンプトを1つのモデルに統合しました。

結果(論文):YOLO-Worldv2-Sと比較して、LVIS minivalで +3.5 AP、学習コストは約1/3、推論速度は1.4倍高速(推論用データセンターGPU、TensorRT)。公式リポジトリは AGPL-3.0 です。

両モデルともUltralyticsパッケージ(AGPL-3.0)にも含まれています。第6回第5節のAGPLの条件がそのまま適用されます。

7. まとめ:どう選ぶか

モデル テキストと画像が交差する場所 語彙の焼き込み 強み ライセンス
OWL-ViT / OWLv2 最後の内積 可能 シンプル、例示画像クエリ、スケール コードはgoogle-research/scenicリポジトリ。ライセンスは本記事では確認できず
Grounding DINO 最初から深く融合 困難 文中の関係性、精度 Apache-2.0
YOLO-World 特徴ピラミッド 焼き込みあり リアルタイム GPL-3.0
YOLOE 分類ヘッド 焼き込みあり リアルタイム、3種類のプロンプト AGPL-3.0
SAM 3(第11回) 検出器クエリ + 存在トークン — マスク・映像まで対応 SAM License

8. 限界と私たちのプロジェクト

この記事でシリーズ第1部を終了します。名前なしで学ぶ自己教師あり学習、CLIP、そして映像・姿勢・スポーツモデルは姉妹シリーズ(自己教師あり・映像・姿勢・スポーツ編フォルダ)へと続きます。

TTの一言。 昔の検出器に「ラケット」を教えるには、ラケットの写真をたくさん集めなければなりませんでした。今では「racket」という1単語だけで十分です。ただし、「table」とだけ言うと食卓を探してきてしまうため、言葉を慎重に選ぶ必要があります。

参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます