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でも示される):
- Task: Promptable segmentation
- 任意のプロンプトを入力とし、有効なマスクを出力する。
- 実質的に「指示したものを切り抜く」汎用セグメンテーション。
- Model: SAM (Segment Anything Model)
- 大規模な事前学習を経て、「プロンプト → マスク」をリアルタイムに生成できるアーキテクチャ。
- Ambiguity-aware(曖昧性に対応)できる機構を備える。
- 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段階のアノテーション・フロー
- Assisted-manual stage
- はじめは少数の既存セグメンテーションデータで学習したSAMを使い、マスクをインタラクティブに作成。
- 人間のアノテータが手動で点を打ち、それを修正、…を繰り返し高品質マスクを作る。
- ここで得られたマスクを使って再学習すると、モデルが向上 → より高速にマスクが取得可能に。
- Semi-automatic stage
- 得意な(自信のある)部分をモデルが自動でマスク化し、人間は残りのマスクや修正が必要な部分のみ手動。
- さらに多様なマスクを取得。
- 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 は強力ですが、論文では注意点も列挙されています。
- 完全にパーフェクトではない
- 細かい構造を見逃したり、 disconnected な誤検出が起きたりする。
- インタラクティブセグメンテーション特化手法より、多点入力時の精度は劣る可能性がある。
- ズームインによる高精度化 は現時点で実装されていない
- FocalClickのように複数解像度で段階的に境界を洗練することはしていない。
- バイアス学習
- SAMは多様な画像で学習しているが、特定の領域・人種・物体が偏っている可能性は否定できない。
- 例えば「LVISの穴無しポリゴンマスク」などの特定ルールには適合しにくい。
- テキストプロンプトはまだ試作段階
- 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 を使う時代が来るかもしれません。
最後までお読みいただき、ありがとうございました!
何か新しい発見や研究のヒントになれば嬉しいです。
§参考文献(論文リンク)
- Segment Anything: httpss://arxiv.org/abs/2304.02643
- Github: httpss://github.com/facebookresearch/segment-anything
- 公式Webデモ: httpss://segment-anything.com
ディスカッション
コメント一覧
まだ、コメントがありません