[論文メモ] Simple Open-Vocabulary Object Detection with Vision Transformers
ECCV2022
検出するオブジェクトの指定に自然言語を使ったend-to-endなobject detectionモデルの提案
既存のobject detectionの多くはスケーリングできず、検出可能なオブジェクトが固定されているクローズドボキャブラリーの問題がある。
近年ではCLIPのようなimageとtextの関係を学習できるモデルも発展してzero shotタスクに応用されてきている。
このようなimage-textモデルを使ってzero shotのオープンボキャブラリーなobject detectionが実現できないか?というお気持ち。
オープンボキャブラリーな検出モデル、 OWL-ViTを提案(Vision Transformer for Open-World Localization)。
手法
まず大量の画像とテキストペアで学習したimage-textモデルを作成する。CLIPと同じ感じ。
画像のエンコーダとしてVision Transformer(ViT)を、テキストのエンコーダとしても似たようなアーキテクチャを採用する。
テキストエンコーダはCLIPと同じくEOSトークンを代表のトークンとして利用。
画像エンコーダはCLIPと異なり、各パッチから生成された最終的なトークンをmultihead attention pooling(MAP)で集約しprojectionしたものを代表のトークンとする。
学習はCLIPと同じくペア同士を近づけ、ペア出ないもの同士は遠ざけるcontrastive learning。
次にdetectorの学習。
上記で作ったimage-textモデルを使ってオープンボキャブラリーなobject detectionモデルを構築する。
まずは画像エンコーダ側の処理。
画像エンコーダの出力からMAPを取り除きクラス分類とBounding Box(BBox)のためのヘッドを追加する。
MAPを取り除いたのでパッチ(トークン)の数だけ出力が得られることに注意。
クラス分類のヘッドは各トークンをテキストエンコーダの次元に変換する。
BBoxのヘッドは各トークンにおけるオブジェクトの位置情報(x,y,w,h)を出力。
次にテキストエンコーダ側の処理
まず検出したいオブジェクトをカテゴリ名や説明文で指定し、それをテキストエンコーダで埋め込んだものをクエリとする。
これらのクエリと各トークンのクラス予測の類似度から、各トークンのクラス確率を計算する。
BBoxは対応するトークンのものを利用する。
学習はDERTのbipartite matching lossをロングテール・オープンボキャブラリーに対適応させたものを利用。
巨大なデータセットではラベル付けの問題で各オブジェクトに複数ラベルがついている事がある。
そこでsoftmax cross entropyではなくfocal sigmoid cross entropyを採用。
また各画像がすべてのカテゴリについてにラベルがあるわけでは無く、positive(存在する)とnegative(存在しない)の両方が提供されている。
学習時はこの2つを利用しつつ、データ中の頻度に比例してランダムにカテゴリを抽出し疑似的なnegativeラベルを追加しnegativeラベルが1枚の画像に最低50のnegativeラベルが含まれるようにする。
実験・結果
画像エンコーダとしてはViTはスタンダードなものを利用。
テキストエンコーダは基本的に12層、512次元の中間特徴、2048のMLP、8ヘッドのものを利用。
image-textモデルは3.6Bの画像テキストペアで事前学習。
detectionの学習は2M程度の画像。
その他の細かい設定は論文参照。
zero-shotの結果。提案手法はOWL-ViT
one-shotの結果。
必ずしもテキストをクエリにする必要はなく、画像を埋め込んで、それをクエリとすればone-, few-shotが実現できる。
CLIP部分(Image-Level)の精度とobject detectionへtransfer後の精度の関係。
object detectionでよい結果を出したモデルはImage-Levelでも良い結果だが、逆は必ずしもそうではない。