MobileSAM軽量画像セグメンテーションモデルのロゴ

Mobile Segment Anything (MobileSAM)

MobileSAMは、モバイルおよびエッジデバイス向けに構築されたコンパクトで効率的な画像セグメンテーションモデルです。MetaのSegment Anything Model (SAM) のパワーを計算リソースが限られた環境にもたらすよう設計されており、MobileSAMは元のSAMパイプラインとの互換性を維持しながら、ほぼ瞬時のセグメンテーションを実現します。リアルタイムアプリケーションや軽量なデプロイメントを開発する場合でも、MobileSAMは前身のモデルと比較して、サイズと速度の要件を大幅に抑えつつ、優れたセグメンテーション結果を提供します。



Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉

MobileSAMは、Grounding-SAMAnyLabelingSegment Anything in 3D など、さまざまなプロジェクトで採用されています。

MobileSAMは、100k枚の画像データセット(元の画像の1%)を使用して、単一のGPU上で1日未満でトレーニングされました。トレーニングコードは将来リリースされる予定です。

利用可能なモデル、サポートされているタスク、および動作モード

以下の表は、利用可能なMobileSAMモデル、その事前学習済みウェイト、サポートされているタスク、および推論検証トレーニングエクスポートといったさまざまな動作モードとの互換性をまとめたものです。サポートされているモードは✅で、サポートされていないモードは❌で示されています。

モデルタイプ事前学習済み重みサポートタスク推論 (Inference)検証学習Export
MobileSAMmobile_sam.ptインスタンスセグメンテーション

MobileSAMとYOLOの比較

以下の比較では、MetaのSAMバリエーション、MobileSAM、およびYOLO26n-segを含むUltralyticsセグメンテーションモデル間の違いを強調しています:

モデルサイズ
(MB)
パラメータ
(M)
速度 (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
YOLOv8 バックボーン を使用したFastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0倍軽量)3.4 (11.4倍少ない)24.8 (945倍高速)
Ultralytics YOLO11n-seg6.2 (12.6倍軽量)2.9 (13.4倍少ない)24.3 (964倍高速)
Ultralytics YOLO26n-seg6.7 (11.7倍軽量)2.7 (14.4倍少ない)25.2 (930倍高速)

この比較は、SAMバリエーションとYOLOセグメンテーションモデル間のモデルサイズと速度における大幅な違いを示しています。SAMモデルは独自の自動セグメンテーション機能を提供しますが、YOLOモデル(特にYOLOv8n-seg、YOLO11n-seg、YOLO26n-seg)はより小型で高速、かつ計算効率に優れています。

SAMの速度はPyTorchで、YOLOの速度はONNX Runtimeで測定しました。テストは2025年版Apple M4 Air(16GB RAM)上で torch==2.10.0ultralytics==8.4.31onnxruntime==1.24.4 を使用して実行されました。これらの結果を再現するには:

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

SAMからMobileSAMへの適応

MobileSAMは、前処理、後処理、すべてのインターフェースを含め、オリジナルの SAM と同じパイプラインを保持しています。これは、ワークフローを最小限の変更でSAMからMobileSAMに移行できることを意味します。

主な違いは画像エンコーダーにあります。MobileSAMは、オリジナルのViT-Hエンコーダー(632Mパラメーター)を、はるかに小型のTiny-ViTエンコーダー(5Mパラメーター)に置き換えています。単一のGPU上で、MobileSAMは約12msで画像を処理します(エンコーダーに8ms、マスクデコーダーに4ms)。

ViTベースの画像エンコーダーの比較

画像エンコーダーオリジナルSAMMobileSAM
パラメーター611M5M
速度推定 (Speed)452ms8ms

プロンプトガイド付きマスクデコーダー

マスクデコーダーオリジナルSAMMobileSAM
パラメーター3.876M3.876M
速度推定 (Speed)4ms4ms

パイプライン全体の比較

パイプライン全体 (Enc+Dec)オリジナルSAMMobileSAM
パラメーター615M9.66M
速度推定 (Speed)456ms12ms

MobileSAMとオリジナルSAMのパフォーマンスは、ポイントプロンプトとボックスプロンプトの両方を使用して以下に示されています。

ポイントをプロンプトとして使用した画像

ボックスをプロンプトとして使用した画像

MobileSAMはFastSAMより約7倍小さく、5倍高速です。詳細については、MobileSAMプロジェクトページをご覧ください。

UltralyticsでのMobileSAMのテスト

オリジナルの SAM と同様に、UltralyticsはMobileSAMをテストするためのシンプルなインターフェースを提供しており、ポイントプロンプトとボックスプロンプトの両方をサポートしています。

モデルのダウンロード

Ultralytics assets からMobileSAMの事前学習済みウェイトをダウンロードしてください。

ポイントプロンプト

from ultralytics import SAM

# Load the model
model = SAM("mobile_sam.pt")

# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

ボックスプロンプト

from ultralytics import SAM

# Load the model
model = SAM("mobile_sam.pt")

# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

MobileSAMSAM は同じAPIを共有しています。詳細な使用方法については、SAMドキュメントを参照してください。

検出モデルを使用したセグメンテーションデータセットの自動構築

Ultralyticsフレームワークを使用してデータセットを自動的にアノテーションするには、以下のように auto_annotate 関数を使用します:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")
引数タイプデフォルト説明
datastr必須アノテーションまたはセグメンテーションの対象となる画像を含むディレクトリへのパス。
det_modelstr'yolo26x.pt'最初のオブジェクト検出のためのYOLO検出モデルのパス。
sam_modelstr'sam_b.pt'セグメンテーションのためのSAMモデルのパス(SAM、SAM2バリアント、およびMobileSAMモデルをサポート)。
devicestr''計算デバイス(例:'cuda:0'、'cpu'、または自動デバイス検出の場合は空文字列)。
conffloat0.25弱い検出をフィルタリングするためのYOLO検出信頼度しきい値。
ioufloat0.45重なり合うボックスをフィルタリングするためのNon-Maximum SuppressionのIoUしきい値。
imgszint640画像のサイズ変更のための入力サイズ(32の倍数である必要があります)。
max_detint300メモリ効率のための画像あたりの最大検出数。
classeslist[int]None検出するクラスインデックスのリスト(例:人&自転車の場合は[0, 1])。
output_dirstrNoneアノテーションの保存ディレクトリ(データパスからの相対でデフォルトは'./labels')。

引用と謝辞

MobileSAMが研究や開発に役立つ場合は、以下の論文を引用することを検討してください:

引用
@article{mobile_sam,
  title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
  author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung Ho and Lee, Seungkyu and Hong, Choong Seon},
  journal={arXiv preprint arXiv:2306.14289},
  year={2023}
}

arXivのMobileSAM論文全文を読む。

FAQ

MobileSAMとは何か、そしてオリジナルのSAMモデルと何が違うのか?

MobileSAMは、モバイルおよびエッジアプリケーション向けに最適化された、軽量で高速な画像セグメンテーションモデルです。オリジナルのSAMと同じパイプラインを維持していますが、巨大なViT-Hエンコーダー(632Mパラメーター)をコンパクトなTiny-ViTエンコーダー(5Mパラメーター)に置き換えています。その結果、MobileSAMはオリジナルSAMよりも約5倍小さく、7倍高速であり、SAMの456msに対し画像1枚あたり約12msで動作します。MobileSAMの実装に関する詳細は、MobileSAM GitHubリポジトリをご覧ください。

Ultralyticsを使用してMobileSAMをテストするにはどうすればよいか?

UltralyticsでのMobileSAMのテストは簡単です。ポイントプロンプトとボックスプロンプトを使用してセグメントを予測できます。たとえば、ポイントプロンプトを使用する場合:

from ultralytics import SAM

# Load the model
model = SAM("mobile_sam.pt")

# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

詳細については、「UltralyticsでのMobileSAMのテスト」セクションを参照してください。

モバイルアプリケーションでMobileSAMを使用すべき理由

MobileSAMは、その軽量な設計と迅速な推論速度により、モバイルおよびエッジアプリケーションに最適です。オリジナルSAMと比較して約5倍小さく7倍高速であるため、計算リソースが限られたデバイスでのリアルタイムセグメンテーションに適しています。その効率性により、モバイルデバイスは大きな遅延なしにリアルタイム画像セグメンテーションを実行できます。さらに、MobileSAMはモバイルパフォーマンスに最適化された推論モードをサポートしています。

MobileSAMはどのようにトレーニングされたのか、またトレーニングコードは利用可能か?

MobileSAMは、100k枚の画像データセット(元の画像の1%)を使用して、単一のGPU上で1日未満でトレーニングされました。トレーニングコードは将来リリースされる予定ですが、現在は MobileSAM GitHubリポジトリから事前学習済みウェイトと実装の詳細にアクセスできます。

MobileSAMの主な使用例は何か?

MobileSAMは、モバイルおよびエッジ環境における高速で効率的な画像セグメンテーションのために設計されています。主な使用例は以下の通りです:

  • モバイルアプリ向けのリアルタイム物体検出とセグメンテーション
  • 計算能力が限られたデバイス上での低遅延画像処理
  • 拡張現実(AR)、分析などを活用したAI駆動型モバイルアプリケーションへの統合

使用例やパフォーマンスの詳細については、「SAMからMobileSAMへの適応」およびMobileSAMアプリケーションに関するUltralyticsブログを参照してください。

コメント