Skip to content

名前を入力して物体をラベル付けする方法

開放語彙検出では、アノテーターが語句を入力するとすべての該当箇所がボックスで返ってきます。Grounding DINO の仕組み、ライセンスが許すこと、そしてこの手法が破綻する場面。

開放語彙検出とは、アノテーターが語句を入力すると、そのクラスがどの訓練データにも入っていなくても、画像内の該当箇所がすべてボックスで返ってくることです。 既製の検出器がカバーしないクラスについて検出データセットを立ち上げる、もっとも速い方法です。

仕組み

Grounding DINO は画像とキャプションを受け取り、900 個の候補ボックスをそのキャプションの各語に対して採点します。「cat . bus . stop sign」を与えれば、語句ごとの信頼度つきでボックスが返ります。

これは固定クラスの検出器とは異なる仕組みであり、プロンプトの書き方を変えます。

  • ラベルより語句。 「traffic cone」はモデルがキャプションで見てきた語句ですが、cone_orange_road は違います。
  • 文脈が効く。 混雑した街路では「person riding a bicycle」のほうが「person」より正確に位置を特定できます。
  • そっけない表現は不利。 モデルは自然言語で訓練されているので、自然言語で書いてください。

ライセンスが重要

テキストプロンプトによるラベル付けには SAM 3 とその非商用条項が必要だと広く思われています。そうではありません。Grounding DINO は Apache-2.0 です。

これはデータセットを作った後ではなく、作る前に確認すべきことです。ラベル付けに使うモデルのライセンスが非商用で、データセットがそうでないなら、後から気づくと高くつく問題を抱えることになります。Potato のモデルズーは各モデルのライセンスを明示し、非商用のものは --accept-licence なしにダウンロードを拒否します。

設定

yaml
annotation_schemes:
  - annotation_type: image_annotation
    name: objects
    description: "Find and label the objects."
    source_field: image
    tools: [bbox, polygon, sam]
    labels: [cat, bus, stop sign]
 
    text_prompt:
      phrases: [cat, bus, stop sign]
      box_threshold: 0.3
      text_threshold: 0.25
      segment: false

二つの閾値は別の仕事をしており、別々に調整すべきです。

  • box_threshold はそもそもボックスを提示するかどうかを決めます。アノテーターが誤検出に溺れているなら上げてください。
  • text_threshold は提示されたボックスをどの語句がラベル付けするかを決めます。ボックスが間違ったラベルの下に現れているなら上げてください。

segment: true を設定すると、受け入れられた各ボックスが SAM デコーダーに渡され、マスクになります。

量子化は実質的な選択である

これを自分で配備するなら、既定のエクスポートをそのまま受け入れないでください。686 MB のフル精度 Grounding DINO エクスポートとの比較です。

エクスポートフル精度に対するボックス IoUサイズ
q4f160.972151 MB
int80.874201 MB

q4f16 は形状を大幅に多く保ち、しかも小さいのです。慣例だからという理由で int8 を採ると、より大きなファイルにより悪いモデルを載せて配ることになります。

破綻する場面

  • 細粒度のクラス。 「ゴールデンレトリバー」対「ラブラドール」は手に負えません。犬をボックスで囲うだけです。
  • 分野固有の語彙。 医療、産業、科学の用語は訓練用キャプションに含まれていないのが普通です。
  • 数え上げ。 インスタンスを見つけはしますが、混雑した場面ですべてのインスタンスを確実に見つけるわけではありません。
  • 否定と関係。 「テーブルの上にないカップ」は答えられる問い合わせではありません。

こうした場合でも提案は出発点として有用ですが、自分で描くことを見込んでおいてください。

提案はアノテーションではない

最後まで両者を分けておいてください。アノテーターが受け入れたボックスは正解データであり、受け入れなかったボックスはモデルに関する証拠です。両者を混ぜると、後者が存在する唯一の意味が失われます。

その受け入れが本当にレビューなのかを知りたいなら、それは精度の問題ではなく所要時間の問題です。

参考文献