SAM3(Segment Anything Model 3)はテキストで検出対象を指定できるopen vocabularyモデルだ。「bus」「person」のような事前定義クラスではなく、「smoke」「girl」「electric」のような自由なテキストをプロンプトとして使える。この特性を手元の環境(RTX 2060、ultralytics 8.4.56)で実際に試した。
まず ultralytics サンプルの bus.jpg に対して text=['bus', 'person'] を試した。
| プロンプト | 最大スコア | 検出数 |
|---|---|---|
| bus | 0.983 | 1件 |
| person | 0.977 | 4件 |
事前定義クラスなしで、テキストだけで高精度の検出ができた。
サッカー選手(Zidane)と監督(Ancelotti)が写る zidane.jpg で person vs girl を試した。
| プロンプト | 最大スコア |
|---|---|
| person | 0.968 |
| man | 0.959 |
| woman | 0.612 |
| girl | 0.567 |
男性2人の画像で girl のスコアは 0.567。ゼロではないが person(0.968) より明確に低い。概念を完全に切り離すのは難しいが、区別は機能している。
マドリードの電気バスが写る bus.jpg(ボディに "éléctricamenEMTe"、"emisiones" と書かれている)で複数のプロンプトを試すと、驚く結果が出た。
| プロンプト | 最大スコア | 備考 |
|---|---|---|
| electric | 0.903 | バスに「éléctricamenEMTe」の文字あり |
| smoke | 0.685 | 「emisiones(排出)」部分を検出 |
| zero emissions | 0.630 | 「emisiones」と概念的に近い |
| cat(対照) | 0.500 | 無関係テキスト |
| dog(対照) | 0.520 | 同上 |
electric が 0.903 と非常に高い。これはバスのボディに書かれた "éléctricamenEMTe" を SAM3 が読んでいるからだと考えられる。CLIPベースのテキストエンコーダーが視覚的なテキストも意味として処理しているようだ。
cat/dog の 0.5 前後が偽陽性の基線。これより大幅に高いスコア(electric の 0.9 など)は、単なるランダムなマッチングではなく何かを検出している。
白背景に灰色のガウシアンブロブを重ねた合成煙パターン画像を作り、SAM3 に投入した。
| プロンプト | 最大スコア |
|---|---|
| fog | 0.983 |
| mist | 0.966 |
| smoke | 0.820 |
| cloud | 0.643 |
合成パターンは「霧」「霞」として最も強く認識された(fog 0.983、mist 0.966)。煙(smoke 0.820)より霧の方が高スコアなのは、広く均等に拡散した視覚的特徴が霧に近いという評価で、かなり正確だと感じた。
SAM3のopen vocabularyは、視覚的特徴と画像内テキストの意味理解を組み合わせて動く。概念の区別(personとgirl)は機能しているが完全ではなく、画像内テキスト("electric")には非常に強く反応する。実際の煙検出に使う場合は、テキストなし環境でのスコアと、偽陽性の基線(~0.5)を意識することが重要だ。