
Mobile Segment Anything(MobileSAM)#
MobileSAMは、モバイルデバイスやエッジデバイス向けに特別に設計された、コンパクトで効率的な画像セグメンテーションモデルです。計算リソースが限られた環境にMetaのSegment Anything Model(SAM)の性能をもたらすよう設計されており、元のSAMパイプラインとの互換性を維持しながら、ほぼ瞬時のセグメンテーションを実現します。リアルタイムアプリケーションを開発する場合でも、軽量なデプロイメントを行う場合でも、MobileSAMは従来のモデルのサイズと速度要件を大幅に抑えながら、優れたセグメンテーション結果を提供します。
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
MobileSAMは、Grounding-SAM、AnyLabeling、Segment Anything in 3Dなど、さまざまなプロジェクトで採用されています。
MobileSAMは、10万枚の画像データセット(元の画像の1%)を使用し、1基のGPUで1日未満でトレーニングされました。
利用可能なモデル、対応タスク、動作モード#
以下の表では、利用可能なMobileSAMモデル、その事前学習済みウェイト、対応タスク、およびInference、Validation、Training、Exportなど、さまざまな動作モードとの互換性を示します。対応モードは✅、非対応モードは❌で示しています。
| モデルタイプ | 事前学習済み重み | サポートされているタスク | トレーニング | 検証 | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
MobileSAMとYOLOの比較#
以下の比較では、MetaのSAMバリアント、MobileSAM、ならびにYOLO26n-segを含むUltralyticsのセグメンテーションモデルの違いを示します。
| モデル | サイズ (MB) | パラメーター数 (M) | 速度 (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| YOLOv8のbackboneを使用したFastSAM-s | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1(11.0倍小型化) | 3.4(11.4倍削減) | 24.8(945倍高速化) |
| Ultralytics YOLO11n-seg | 6.2 (12.6倍小型) | 2.9(13.4倍削減) | 24.3 (964倍高速) |
| Ultralytics YOLO26n-seg | 6.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を使用して測定しています。テストは、16GBのRAMを搭載した2025年製Apple M4 Air上で、torch==2.10.0、ultralytics==8.4.31、onnxruntime==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, nms=False) # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)SAMからMobileSAMへの適応#
MobileSAMは、前処理、後処理、すべてのインターフェースを含め、元のSAMと同じパイプラインを維持しています。つまり、ワークフローを最小限の変更でSAMからMobileSAMへ移行できます。
主な違いは画像エンコーダーです。MobileSAMは、元のViT-Hエンコーダー(6億3,700万パラメーター)を、はるかに小型のTiny-ViTエンコーダー(500万パラメーター)に置き換えています。単一のGPU上で、MobileSAMは1枚の画像を約12ms(エンコーダー8ms、マスクデコーダー4ms)で処理します。
ViTベースの画像エンコーダー比較#
| 画像エンコーダー | 元のSAM | MobileSAM |
|---|---|---|
| パラメーター数 | 637M | 5M |
| 速度 | 452ms | 8ms |
プロンプト誘導型マスクデコーダー#
| マスクデコーダー | 元のSAM | MobileSAM |
|---|---|---|
| パラメーター数 | 3.876M | 3.876M |
| 速度 | 4ms | 4ms |
パイプライン全体の比較#
| パイプライン全体(Enc+Dec) | 元のSAM | MobileSAM |
|---|---|---|
| パラメーター数 | 641M | 9.66M |
| 速度 | 456ms | 12ms |
以下では、ポイントプロンプトとボックスプロンプトの両方を使用して、MobileSAMと元のSAMの性能を示します。


MobileSAMはFastSAMより約7倍小型で、約5倍高速です。詳細については、MobileSAMプロジェクトページをご覧ください。
UltralyticsでMobileSAMをテストする#
元のSAMと同様に、UltralyticsではMobileSAMをテストするためのシンプルなインターフェースを提供しており、ポイントプロンプトとボックスプロンプトの両方に対応しています。
モデルのダウンロード#
MobileSAMの事前学習済みウェイトをUltralyticsのアセットからダウンロードします。
ポイントプロンプト#
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 box prompt
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Predict multiple segments based on multiple box prompts
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])MobileSAMとSAMは同じ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")| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
data | str | 必須 | アノテーションまたはセグメンテーションの対象画像を含むディレクトリへのパスです。 |
det_model | str | 'yolo26x.pt' | 初期オブジェクト検出に使用する YOLO 検出モデルのパスです。 |
sam_model | str | 'sam_b.pt' | セグメンテーションに使用する SAM モデルのパスです(SAM、SAM 2、MobileSAM、SAM 3 の重みをサポートします)。 |
device | str | '' | 計算デバイスです(例: 'cuda:0'、'cpu'、または自動デバイス検出の場合は '')。 |
conf | float | 0.25 | 弱い検出結果を除外するための YOLO 検出信頼度しきい値です。 |
iou | float | 0.45 | 重複するボックスを除外するための Non-Maximum Suppression の IoU しきい値です。 |
imgsz | int | 640 | 画像のリサイズに使用する入力サイズです(32 の倍数である必要があります)。 |
max_det | int | 300 | メモリ効率を高めるための、画像ごとの検出数の最大値です。 |
classes | list[int] | None | 検出するクラスインデックスのリストです(例: person と bicycle の場合は [0, 1])。 |
output_dir | str | None | アノテーションの保存先ディレクトリです(デフォルト: <data>_auto_annotate_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は、モバイルおよびエッジアプリケーション向けに最適化された、軽量で高速な画像セグメンテーションモデルです。MobileSAMは、オリジナルのSAMと同じパイプラインを維持しますが、大型のViT-Hエンコーダー(6.37億パラメータ)をコンパクトなTiny-ViTエンコーダー(500万パラメータ)に置き換えます。これにより、MobileSAMの全体的なパイプラインは、オリジナルのSAM(9.66億対6.41億パラメータ)と比較して約66分の一の小ささになり、速度は約38倍速く、SAMの1画像あたり456ミリ秒に対してMobileSAMは約12ミリ秒で動作します。MobileSAMの実装についての詳細な探索は、MobileSAM GitHub repositoryをご覧ください。
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は、その軽量な設計と迅速な推論速度により、モバイルおよびエッジアプリケーションに最適です。オリジナルのSAMと比較して、MobileSAMは約66倍少ないパラメータを持ち、約38倍高速に動作するため、限られた計算リソースを持つデバイスでのリアルタイムセグメンテーションに適しています。MobileSAMの効率性により、モバイルデバイスは大幅な遅延なしにリアルタイム画像セグメンテーションを実行できます。さらに、MobileSAMはモバイルパフォーマンス向けに最適化された推論モードをサポートしています。
MobileSAMは、10万枚の画像データセット(元のSA-1B画像の1%)を使用して1基のGPUで1日未満でトレーニングされ、SAMのViT-H画像エンコーダーをTiny-ViTエンコーダーに蒸留しました。事前学習済み重みと実装の詳細については、MobileSAM GitHub repositoryから入手できます。
MobileSAMは、モバイル環境やエッジ環境で高速かつ効率的な画像セグメンテーションを実現するよう設計されています。主なユースケースは次のとおりです。
- モバイルアプリ向けのリアルタイム物体検出とセグメンテーション
- 計算リソースが限られたデバイスでの低レイテンシー画像処理
- 拡張現実(AR)、分析などのAI搭載モバイルアプリケーションへの統合
ユースケースと性能の詳細については、SAMからMobileSAMへの適応とMobileSAMアプリケーションに関するUltralyticsブログをご覧ください。