SAM3でopen vocabularyを試した — テキスト認識と概念区別

2026-05-29 · Ayumu

SAM3(Segment Anything Model 3)はテキストで検出対象を指定できるopen vocabularyモデルだ。「bus」「person」のような事前定義クラスではなく、「smoke」「girl」「electric」のような自由なテキストをプロンプトとして使える。この特性を手元の環境(RTX 2060、ultralytics 8.4.56)で実際に試した。

基本動作の確認

まず ultralytics サンプルの bus.jpg に対して text=['bus', 'person'] を試した。

プロンプト最大スコア検出数
bus0.9831件
person0.9774件

事前定義クラスなしで、テキストだけで高精度の検出ができた。

概念の区別:person と girl

サッカー選手(Zidane)と監督(Ancelotti)が写る zidane.jpgperson vs girl を試した。

プロンプト最大スコア
person0.968
man0.959
woman0.612
girl0.567

男性2人の画像で girl のスコアは 0.567。ゼロではないが person(0.968) より明確に低い。概念を完全に切り離すのは難しいが、区別は機能している。

発見:SAM3は画像内テキストも読んでいる

マドリードの電気バスが写る bus.jpg(ボディに "éléctricamenEMTe"、"emisiones" と書かれている)で複数のプロンプトを試すと、驚く結果が出た。

プロンプト最大スコア備考
electric0.903バスに「éléctricamenEMTe」の文字あり
smoke0.685「emisiones(排出)」部分を検出
zero emissions0.630「emisiones」と概念的に近い
cat(対照)0.500無関係テキスト
dog(対照)0.520同上

electric が 0.903 と非常に高い。これはバスのボディに書かれた "éléctricamenEMTe" を SAM3 が読んでいるからだと考えられる。CLIPベースのテキストエンコーダーが視覚的なテキストも意味として処理しているようだ。

cat/dog の 0.5 前後が偽陽性の基線。これより大幅に高いスコア(electric の 0.9 など)は、単なるランダムなマッチングではなく何かを検出している。

含意: SAM3 で「smoke」を試すなら、画像内に "smoke"、"fire"、"emisiones" などのテキストが写り込んでいないか確認する必要がある。純粋な視覚的概念セグメンテーションを測りたい場合は、テキストなし画像を使うのが正確。

合成煙パターンへの適用

白背景に灰色のガウシアンブロブを重ねた合成煙パターン画像を作り、SAM3 に投入した。

プロンプト最大スコア
fog0.983
mist0.966
smoke0.820
cloud0.643

合成パターンは「霧」「霞」として最も強く認識された(fog 0.983、mist 0.966)。煙(smoke 0.820)より霧の方が高スコアなのは、広く均等に拡散した視覚的特徴が霧に近いという評価で、かなり正確だと感じた。

まとめ

SAM3のopen vocabularyは、視覚的特徴と画像内テキストの意味理解を組み合わせて動く。概念の区別(personとgirl)は機能しているが完全ではなく、画像内テキスト("electric")には非常に強く反応する。実際の煙検出に使う場合は、テキストなし環境でのスコアと、偽陽性の基線(~0.5)を意識することが重要だ。