ステータス:ドラフト(2026-10-13)、一部実測。 分類ヘッドの例は、実際のCLIPの重みを使わずに構造だけを模倣したものです(
code/12_open_vocab_head.py、ノートPCのCPUで1秒以内)。本記事のモデルは私たちの環境では実行していません(未実測)。論文の数値は原文から条件とともに引用し、ハードウェアはグレードで表記しています。CLIP自体の学習原理については、姉妹シリーズ(自己教師あり・映像・姿勢・スポーツ)で取り上げます。 執筆ルール:実測データを基本とし、測定できなかったものは「未実測」と表記します。
目次
- 1. 閉じた語彙の壁
- 2. 鍵:CLIPのテキスト埋め込み
- 3. OWL-ViT(2022):ViTトークンごとにボックス1つ
- 4. OWLv2(2023):自らラベルを付けてスケールアップ
- 5. GLIP・Grounding DINO:テキストと画像を深く融合させる
- 6. YOLO-World・YOLOE:リアルタイム処理に向けて
- 7. まとめ:どう選ぶか
- 8. 限界と私たちのプロジェクト
- 参考文献
1. 閉じた語彙の壁
第5・6・8回の検出器は 閉じた語彙(Closed-Vocabulary)です。COCOで学習した場合、80種類(人、自動車、テニスラケット…)しか見つけられません。「卓球のラケット」や「卓球台」を見つけさせるには、そのラベルが付いたデータを集めて再学習する必要があります。
構造の観点から見ると理由は単純です。検出器の最後の分類ヘッドは (영역 특징) · Wᵀ という形をしており、Wはクラスごとに1行の 固定行列(80×d)です。クラスを1つ追加するにはWにさらにもう1行必要ですが、その行の値はデータを用いて学習しなければ得られません。
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は、最もシンプルなアプローチを示しました。
- CLIPのように対照学習を行ったViT(第7回)を持ち込みます。
- 最後にトークンを1つに集約するプーリングを 削除します。 そうすることで、パッチトークンごとにほうぼうに出力が残ります。
- トークンごとに軽量な ボックスヘッド(このトークンが担当するオブジェクトのボックス)と 分類ヘッド(トークン埋め込み)を取り付けます。分類ヘッドの重みは クラス名のテキスト埋め込みです。
- 検出データ(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)によりこの壁を乗り越えます。
- 既存のOWL-ViT(CLIP L/14)を使用して、ウェブ画像データWebLI(画像と代替テキストのペア約100億件)全体に 疑似ボックスラベルを付与します。語彙は画像の代替テキストから抽出された用語です。
- この疑似ラベルを用いて新しいモデルを学習します(OWL-ST)。学習例は10億件を超えます。
- 検出データでファインチューニングします。
結果(論文):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回でしか交差させません。「左側の選手が持っているラケット」のように文章中の関係性が重要となる場合には不十分です。別のアプローチでは、早い段階から両者を深く融合させます。
- GLIP(2022):検出を フレーズグランディング(phrase grounding、文中のフレーズに一致する領域を特定すること)として再定義しました。人間がアノテーションしたグランディングデータ300万件+ウェブの画像・テキスト2,400万件で事前学習を行い、GLIP-LはCOCOの画像を見ることなくCOCO検証で49.8 AP、LVISで26.9 APを達成しました。
- Grounding DINO(2024):第8回のDINO検出器にテキストを深く融合させました。特徴量エンハンサー(画像の自己アテンション + テキスト→画像・画像→テキストのクロスアテンション)、 テキストで選択するクエリ(テキストとよく一致する画像上の位置からクエリを開始)、および2つのモダリティを統合して処理するデコーダーを備えています。Swin-L版(Objects365・OpenImages・GoldGで学習)は、COCOのゼロショットで 52.5 AP、ファインチューニングを行うとtest-devで63.0 APとなりました。多様な分野のデータセットをまとめたODinWのゼロショット平均26.1 APも報告されていますが、この値を達成したモデルの学習データにはCOCOが含まれています。コードのライセンスはApache-2.0です。
深く融合させる代償は速度です。テキストが変更されると画像側の計算もやり直す必要があるため、語彙をあらかじめ焼き込んでおくことができません。
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つのモデルに統合しました。
- RepRTA(テキスト):テキスト埋め込みを洗練させる小さな補助ネットワークを分類ヘッドにパラメータとして組み込み、推論コストをゼロにする
- SAVPE(例となる画像):意味と位置を分けて処理するビジュアルプロンプトエンコーダー
- LRPC(プロンプトなし):大規模な組込語彙から自動選択する
結果(論文):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. 限界と私たちのプロジェクト
- 言葉の曖昧さ。 「table」は食卓であり、「table tennis table」でなければ卓球台になりません。「paddle」はカヌーのオールである可能性もあります。オープンの語彙は、語彙を選ぶこと自体がプロンプト設計です。
- 小さな物体。 これらのモデルは概ね画像全体をパッチ・特徴量ピラミッドとして見るため、直径数ピクセルしかない卓球のボールは依然として困難です。ボールの検出は専用のヒートマップモデル(第3部)が担当します。
- ゼロショットの数字の条件。 「初めて見るクラス」の基準は論文によって異なります(学習から名前だけを抜いたのか、そのデータセットの画像を一切見ていないのか)。ODinWの26.1のように、学習データに評価と重複するデータが含まれている場合もあります。
- TT Scoreでは まだオープン語彙検出器は使用していません。卓球台は人間のタップとSAM 2.1で探し、文字での検出はSAM 3を候補に挙げています(第11部)。人やラケットのように「いくつかの決まったもの」だけが必要な場合は、クローズド語彙モデルの方がより速く正確である場合が多いです。オープン語彙が輝くのは、「何を探すかをユーザーが決める場合」、例えばコーチが「シャトルコックの筒」や「ボールの籠」をその都度探したいときです(未実測、アイデア段階)。
この記事でシリーズ第1部を終了します。名前なしで学ぶ自己教師あり学習、CLIP、そして映像・姿勢・スポーツモデルは姉妹シリーズ(自己教師あり・映像・姿勢・スポーツ編フォルダ)へと続きます。
TTの一言。 昔の検出器に「ラケット」を教えるには、ラケットの写真をたくさん集めなければなりませんでした。今では「racket」という1単語だけで十分です。ただし、「table」とだけ言うと食卓を探してきてしまうため、言葉を慎重に選ぶ必要があります。
参考文献
- Radford, A. et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML 2021. https://arxiv.org/abs/2103.00020
- Minderer, M. et al. (2022). Simple Open-Vocabulary Object Detection with Vision Transformers. ECCV 2022. https://arxiv.org/abs/2205.06230
- Minderer, M., Gritsenko, A., Houlsby, N. (2023). Scaling Open-Vocabulary Object Detection. NeurIPS 2023. https://arxiv.org/abs/2306.09683
- Li, L. H. et al. (2022). Grounded Language-Image Pre-training. CVPR 2022. https://arxiv.org/abs/2112.03857
- Liu, S. et al. (2024). Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection. ECCV 2024. https://arxiv.org/abs/2303.05499
- Cheng, T. et al. (2024). YOLO-World: Real-Time Open-Vocabulary Object Detection. CVPR 2024. https://arxiv.org/abs/2401.17270、リポジトリ https://github.com/AILab-CVC/YOLO-World (GPL-3.0)
- Wang, A. et al. (2025). YOLOE: Real-Time Seeing Anything. ICCV 2025. https://arxiv.org/abs/2503.07465、リポジトリ https://github.com/THU-MIG/yoloe (AGPL-3.0)
- サンプルコードと出力: このフォルダーの
code/12_open_vocab_head.py,code/12_open_vocab_head.out.txt