
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-SAM、AnyLabeling、Segment Anything in 3Dなど、さまざまなプロジェクトで採用されています。
MobileSAMは、単一のGPUを使用して100k枚の画像データセット(元の画像の1%)で1日未満でトレーニングされました。トレーニングコードは将来リリースされる予定です。
利用可能なモデル、サポートされているタスク、および動作モード#
以下の表は、利用可能なMobileSAMモデル、その事前学習済み重み、サポートされているタスク、およびInference、Validation、Training、Exportなどのさまざまな動作モードとの互換性の概要を示しています。サポートされているモードは✅で示され、サポートされていないモードは❌で示されます。
| モデルタイプ | 事前学習済みウェイト | サポートされるタスク | トレーニング | バリデーション | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Instance Segmentation | ❌ | ❌ | ✅ | ❌ |
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で測定されました。テストは、torch==2.10.0、ultralytics==8.4.31、onnxruntime==1.24.4を使用して、16GBのRAMを搭載した2025年製Apple M4 Airで実行されました。これらの結果を再現するには:
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エンコーダー(637Mパラメーター)を、はるかに小さいTiny-ViTエンコーダー(5Mパラメーター)に置き換えています。単一の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 project pageをご覧ください。
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 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 documentationをご覧ください。
検出モデルを使用してセグメンテーションデータセットを自動的に構築する#
Ultralyticsフレームワークでdatasetを自動的にアノテーションするには、以下に示すように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(NMS)用IoU閾値です。 |
imgsz | int | 640 | 画像のリサイズに使用する入力サイズ(32の倍数である必要があります)。 |
max_det | int | 300 | メモリ効率のために、画像1枚あたりの最大検出数です。 |
classes | list[int] | None | 検出するクラスインデックスのリスト(例:人物と自転車の場合は [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 paper on arXivをお読みください。
よくある質問 (FAQ)#
MobileSAMは、モバイルおよびエッジアプリケーション向けに最適化された、軽量で高速なimage segmentationモデルです。元のSAMと同じパイプラインを維持していますが、大型のViT-Hエンコーダー(6.37億パラメータ)をコンパクトなTiny-ViTエンコーダー(500万パラメータ)に置き換えています。これにより、MobileSAMは元のSAMよりもサイズが約5倍小さく、速度が約7倍速くなり、SAMの456msに対して1画像あたり約12msで動作します。MobileSAM GitHub repositoryで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])詳細については、Testing MobileSAM in Ultralyticsセクションをご覧ください。
MobileSAMは、その軽量な設計と迅速な推論速度により、モバイルおよびエッジアプリケーションに最適です。元のSAMと比較して、MobileSAMはサイズが約5倍小さく、速度が約7倍速いため、計算リソースが限られたデバイスでのリアルタイムセグメンテーションに適しています。その効率性により、モバイルデバイスは大幅な遅延なしにreal-time image segmentationを実行できます。さらに、MobileSAMはモバイルパフォーマンス向けに最適化されたInference modeをサポートしています。
MobileSAMは、10万枚の画像データセット(元の画像の1%)を使用して、単一のGPUで1日未満でトレーニングされました。トレーニングコードは将来リリースされる予定ですが、現在、MobileSAM GitHub repositoryから事前学習済みの重みと実装の詳細にアクセスできます。
MobileSAMは、モバイルおよびエッジ環境における高速で効率的な画像セグメンテーションのために設計されています。主なユースケースには以下が含まれます:
- モバイルアプリ向けのリアルタイムobject detection and segmentation
- 計算リソースが限られたデバイスでの低遅延画像処理
- 拡張現実 (AR)、分析などのAI搭載モバイルアプリへの統合
ユースケースとパフォーマンスの詳細については、Adapting from SAM to MobileSAMおよびUltralytics blog on MobileSAM applicationsをご覧ください。