SAM(Segment Anything)徹底解説:ゼロショットで“何でも”セグメント!?突如現れた次世代汎用画像AI

こんにちは、ゆずかきです。
今回は、Segment Anything Model(SAM) について、論文を参考にしたブログ記事を書いていきます。
SAM (Segment Anything) の論文原文をもとに可能な限り丁寧・網羅的に解説したつもりです。
想定する読者として、画像解析に携わる技術者を対象に据えています。

それでは、スタートします。


Segment Anything:新時代の汎用画像セグメンテーションを目指して

こんにちは、ゆずかきです。
今回は、Meta AI Researchが提案する大注目のSegment Anything (SA)プロジェクトを徹底解説します。本記事では、以下のポイントを網羅的に取り上げます。

  • Segment Anything の狙いと背景(Promptable Segmentationという新しい考え方)
  • SAM(Segment Anything Model) のアーキテクチャ詳細と学習手法
  • SA-1B という超巨大マスク付きデータセット(1.1Bマスク!)の構築プロセス
  • 実験結果:ゼロショットでさまざまなセグメンテーション系タスクに対応
  • 考察と注意点:Fairness、バイアス問題や限界、今後の展望

論文のタイトルは「Segment Anything」(arXiv:2304.02643)、執筆はMeta AI Researchチーム。論文内で提案された「Promptable Segmentation」という概念が大きな特徴です。
それでは、詳細を見ていきましょう。

論文URL
👇
Segment Anything


§1. Segment Anything プロジェクトの背景・ゴール

大規模言語モデル(LLM)における「プロンプトを与えて、ゼロショットで問題を解かせる」という流れは、すでにNLP界隈で定着しつつあります。それを画像セグメンテーションでも実現しようという試みが、このSegment Anythingプロジェクトです。

1-1. Promptable Segmentationとは?

NLPの世界では、例えば「次に来る単語を当てるタスク」を巨大データで学習した言語モデルを、プロンプト(指示文) で様々なタスクに転用します。
同様の発想で、セグメンテーションにおいても「画像上の任意の位置情報やテキスト情報などを“プロンプト”として受け取り、それに対応するオブジェクトのマスクを返す」モデルを作ろう、というのがPromptable Segmentationです。

  • プロンプトの例
  • ポイント(座標)
  • ボックス(境界矩形)
  • マスクの一部
  • テキスト(「cat」「car wheel」など)

このタスクを通じて得られる強力なセグメンテーションモデルがSAMというわけです。

1-2. Segment Anythingプロジェクトの3要素

論文では、以下の3つがSegment Anythingを構成する重要要素とされています(Fig.1でも示される):

  1. Task: Promptable segmentation
  • 任意のプロンプトを入力とし、有効なマスクを出力する。
  • 実質的に「指示したものを切り抜く」汎用セグメンテーション。
  1. Model: SAM (Segment Anything Model)
  • 大規模な事前学習を経て、「プロンプト → マスク」をリアルタイムに生成できるアーキテクチャ。
  • Ambiguity-aware(曖昧性に対応)できる機構を備える。
  1. Dataset: SA-1B
  • 11M枚の画像 & 1.1Bのマスクからなる大規模データセット。
  • Data engine という半自動アノテーション手法を使い、段階的にSAMを成長させながら1.1Bマスクを獲得。

§2. Promptable Segmentationの詳細:タスクとしての位置づけ

Promptable Segmentation は、一言で言えば「どんなヒント(プロンプト)を与えても、ちゃんとしたマスクを出す」というタスクです。
NLPで言う「少ないプロンプトを使い、未知のタスクでもそれっぽい文章をゼロショットで出す」というイメージに近いです。

2-1. 一般的な応用イメージ

  • ワンクリックでセグメンテーション(ポイントを1つ打つだけで対象物体を取得)
  • テキストからマスク生成(「catの頭を切り抜いて」などの自然文プロンプト)
  • ボックスや他モデルの出力(例:物体検出結果)を入れてマスク取得
  • すでに一部のマスクがある場合に、その続きの部分を推測

2-2. 従来のタスクとの違い

  • マルチタスク型セグメンテーション と異なり、学習時点で決まったタスク(例:インスタンス、パノプティックなど)に縛られない。
  • インタラクティブセグメンテーション と似ているが、Segment Anythingは「ヒト以外からのプロンプト入力(他モジュール)でも動く」点が大きい。
  • ゼロショット転用 を強く意識:学習していない新しいタスクにも、プロンプト次第で対応。

2-3. Ambiguityへの対応

単一点プロンプトは「これは猫の耳を指してるの?それとも猫全体?」という曖昧さがあるため、SAMは複数マスクを一度に返す機構を備え、どれかは有効(valid mask)になるように設計されています。
つまり、「promptしたら1つに限定せず、複数候補を出す」 → Ambiguityに柔軟に対応し、ユーザがその中から正解を選ぶ・あるいは別の追加プロンプトで絞り込む、という流れを想定しています。


§3. Segment Anything Model(SAM)のアーキテクチャ

論文のFig.4に相当する図で、SAMは次の3モジュールからなります。

3-1. Image Encoder

  • MAE (Masked Autoencoder)で事前学習したViT(Vision Transformer)をベース。
  • 入力画像を一度処理し、(C, H/16, W/16) 次元の高次元埋め込みを出力。
  • たとえばViT-H/16なら(××, 64, 64)みたいにdownscaleされる。
  • 画像1枚に対しては「1回だけ」計算すればよい設計 → 後続のプロンプトを何度与えても再利用できる。
  • 重いが、使い回しできるので実時間処理に耐えられる。

3-2. Prompt Encoder

  • 入力が複数種類(ポイント、ボックス、マスク、テキストなど)
  • ポイント:座標を埋め込み + “foreground” or “background”の区別
  • ボックス:上下左右コーナーを別々の埋め込み
  • マスク:画素レベルで画像埋め込みと重ね合わせる形
  • テキスト:CLIP [82]のText Encoderを利用(まだ試験的とのこと)

3-3. Mask Decoder

  • Image Encoderで得た埋め込み + Prompt Encoderの出力を結合し、軽量なTransformerデコーダでマスクを得る。
  • 2層のデコーダブロックを通した後、出力トークンから最終マスクを計算。
  • Ambiguity-aware:1つのプロンプトから3つのマスクを一度に計算し、最適な1つ(IoUが高いもの等)を返せるように。
  • 時間計測:画像埋め込みが既にある場合、Prompt Encoder & Mask Decoderは50ms程度でマスクが出せるため、リアルタイム性に優れる。

3-4. 学習方法

  • Focal Loss + Dice Loss の線形結合を採用し、マスクを直接スーパーバイズ(IoU予測ヘッド用にMSE損失も加える)。
  • インタラクティブセグメンテーションのように、最初に点やボックスを与え、その誤差領域にフォア/バックグラウンド点を追加する形でマルチステップ学習。
  • これにより、「途中のマスクを次の入力として再利用する」動きをシミュレートして学習する。

§4. Data Engine:1.1Bマスクをどう作ったのか

画像セグメンテーションで大規模学習をする場合、自然に集まるテキストのようにはいきません。そこでMeta AIは、「モデルを作りながらマスクをどんどん自動生成し、再学習し、さらにマスクを増やす」 というデータ収集ループ(data engine)を回しました。

4-1. 3段階のアノテーション・フロー

  1. Assisted-manual stage
  • はじめは少数の既存セグメンテーションデータで学習したSAMを使い、マスクをインタラクティブに作成。
  • 人間のアノテータが手動で点を打ち、それを修正、…を繰り返し高品質マスクを作る。
  • ここで得られたマスクを使って再学習すると、モデルが向上 → より高速にマスクが取得可能に。
  1. Semi-automatic stage
  • 得意な(自信のある)部分をモデルが自動でマスク化し、人間は残りのマスクや修正が必要な部分のみ手動。
  • さらに多様なマスクを取得。
  1. Fully automatic stage
  • すでにモデルが高性能になった段階で、全画像に対して完全自動のマスク生成を行う。
  • グリッド状に点を打ちまくり、Ambiguity-aware出力(複数マスク)を信頼度などで絞る → 大量のマスク自動生成。

4-2. SA-1B (Segment Anything 1-Billion) Dataset

  • 11M枚の画像 & 1.1Bのマスク
  • ほぼ自動生成されたマスク(99%以上がFully automatic stageの産物)
  • maskの品質は?
  • サンプリングした5万程度のマスクをプロのアノテータが修正してIoUを比較したところ、約94%がIoU>90%と非常に高精度。
  • 内部評価や追加実験により、モデル学習用としても十分有用な品質だと検証された。
  • 解像度:平均で約3300×4950pxという高解像度画像を扱い、配布版は最小辺1500pxにダウンサンプリング。
  • 分布:COCOなどに比べて中心バイアスが少ない(被写体が中央に固まりにくい)。また、マスクの数・多様性ともに既存データセットを大きく上回る。
  • Geo-diversity:地域や所得層の分布を評価すると、欧州・アジア・中所得国の比率が高め。とはいえアフリカなどは未だ少ない。

§5. Responsible AI (RAI)観点

セグメンテーションは顔認識など個人情報保護に直結する可能性もあるため、論文でも公平性やプライバシーの話が言及されています。

  • 人の顔や車のナンバープレートは、Blur(ぼかし) を実施
  • 分析結果として、アジア・欧州・中所得国 の割合が大きいデータセットになっている(COCOなどと比べると欧米偏重ではない)
  • SkintoneやAge, Gender表現 を含むデータでSAMをテスト → 大きな性能偏差は出なかったが、衣服セグメンテーションでは少しバイアスが見られた
  • ユーザは使う前に追加のフェアネス分析をした方がよい、と論文は述べている

§6. 実験結果:Zero-Shot Transferの威力

論文後半では、特定のデータセットで追加学習なし(=ゼロショット)で、SAMをさまざまなタスクに使う実験が載っています。

6-1. 単一点プロンプトでのセグメンテーション

  • 23種類の多様なデータセット(車載、医用、アート、ドローン空撮、顕微鏡画像など)で検証
  • ワンクリック(単一点)でマスク生成させ、IoU人手評価を比較
  • 既存の強力なインタラクティブセグメンテーション手法(RITM, FocalClick, SimpleClick等)と比べ、SAMの方が1点目での精度が高いケースが多い
  • ただし、点を増やしていくと専用のインタラクティブ手法に追いつかれる(SAMは多点になると特化手法ほどのIoUは狙っていない)

6-2. Edge Detection

  • 有名なBSDS500データセットで、Sobelフィルタ + SAMのマスク出力 を使い、エッジマップを自動生成
  • 学習していないのに従来のゼロショット手法(Canny等) よりかなり高精度
  • Edge専門手法(HED等)のSOTAには届かないが、それでも非常に興味深い性能

6-3. Object Proposal Generation

  • LVISデータセットで、物体候補を大量に出す(最大1000提案)というタスク
  • SAMはグリッド状に点を打って得たマスク群が、ViTDetのような検出器に劣らぬカバー率(Recall) を示す
  • 特に中~大サイズ、レアクラスに関してはViTDetと同等か上回る一方、小物体では苦戦

6-4. Instance Segmentation

  • 検出器(ViTDet)から出たボックスをSAMの入力にしてマスクを生成 → ゼロショットインスタンスセグ
  • COCOやLVISでマスクAPを測ると、学習済みのViTDetには及ばないものの、ヒトの主観評価ではSAMの方が境界が綺麗と評価されるケースが多い(データセット固有のアノテーションバイアスを学習していないため)。

6-5. Text-to-Mask

  • まだ研究段階だが、CLIPのtext embeddingをプロンプトに流用してマスク化する方法を試験
  • 「a wheel」「a wiper」「beaver tooth grille」などの文を入れると、ある程度マスクを生成可能
  • ただし精度に限界があり、他の追加プロンプト(点)で修正するとよい

§7. Ablation:学習データやモデルサイズの影響

  • Data Engineの各段階:手動や半自動のアノテーションが加わると精度が上がる。
  • 自動マスクのみで学習 しても大差ない → Finalモデルはほぼ自動マスク学習で問題ない。
  • 学習画像の枚数:0.1M vs 1M vs 11Mで比較。1M(全体の1/10)でもそこそこ性能出るが、0.1Mは厳しい。
  • ViT-B, ViT-L, ViT-H とサイズを上げるほどmIoU向上はあるが飽和気味。

§8. 考察・制限事項

Segment Anything は強力ですが、論文では注意点も列挙されています。

  1. 完全にパーフェクトではない
  • 細かい構造を見逃したり、 disconnected な誤検出が起きたりする。
  • インタラクティブセグメンテーション特化手法より、多点入力時の精度は劣る可能性がある。
  1. ズームインによる高精度化 は現時点で実装されていない
  • FocalClickのように複数解像度で段階的に境界を洗練することはしていない。
  1. バイアス学習
  • SAMは多様な画像で学習しているが、特定の領域・人種・物体が偏っている可能性は否定できない。
  • 例えば「LVISの穴無しポリゴンマスク」などの特定ルールには適合しにくい。
  1. テキストプロンプトはまだ試作段階
  • CLIPとの組み合わせで一定の成果は出たが、頑健なテキスト理解は難しい。

§まとめ:画像セグメンテーションのfoundationモデル化

Segment Anything は、以下の点で非常に注目度が高いです。

  • Promptable Segmentationという新しい定式化 → プロンプト次第であらゆるセグメントタスクに対応しやすい
  • SAM画像エンコーダ(ViT-Hなど)+軽量マスクデコーダで、リアルタイムかつ高精度
  • SA-1B:11M画像・1.1Bマスクという前代未聞のデータセット
  • Zero-Shot性能:Edge Detection、Object Proposal、Instance Segmentation、Text-to-Maskなど、広範に応用できる
  • 実際に人間評価でも高品質マスクが確認

ただし、細部の完璧さ特定領域への最適化はまだ十分でない面もあり、今後の拡張に期待が集まります。論文内では「Segment Anythingは画像分野におけるfoundation modelの一形態」と位置付けられ、今後はさらに大規模データやマルチモーダル(テキスト・音声・動画)との連携が進むでしょう。


おわりに:Segment Anythingのインパクト

  • 大量データ & 大規模モデルの時代 にふさわしく、画像セグメンテーションでも「これさえあれば何にでも使える」基盤モデルを目指した挑戦。
  • SAM は公開されており(Apache2.0ライセンス)、誰でも試せる状態。公式デモもあるのでぜひ触ってみると面白いでしょうね。
  • SA-1B データセット(1.1Bマスク)も研究目的向けにリリースされる見込み。
  • 自身の研究・プロダクトで「ちょっとマスクを切り出したい」と思ったら、まずSegment Anything を使う時代が来るかもしれません。

最後までお読みいただき、ありがとうございました!
何か新しい発見や研究のヒントになれば嬉しいです。


§参考文献(論文リンク)


画像解析

Posted by yuzukaki-dialog