
Mobile Segment Anything(MobileSAM)#
MobileSAMは、モバイルデバイスやエッジデバイス向けに特化して設計された、コンパクトで効率的な画像セグメンテーションモデルです。計算リソースが限られた環境にMetaのセグメント・エニシング・モデル(SAM)の性能をもたらすよう設計されており、オリジナルのSAMパイプラインとの互換性を維持しながら、ほぼ瞬時のセグメンテーションを実現します。リアルタイムアプリケーションの開発にも、軽量なデプロイにも、MobileSAMは従来モデルより大幅に少ないサイズと処理速度の要件で優れたセグメンテーション結果を提供します。
視聴: Ultralytics で MobileSAM を使って推論を実行する方法 | ステップごとのガイド 🎉
MobileSAMは、Grounding-SAM、AnyLabeling、Segment Anything in 3Dなど、さまざまなプロジェクトに採用されています。
MobileSAMは、元の画像の1%にあたる10万枚の画像データセットを使い、単一のGPUで1日足らずで学習されました。
利用可能なモデル、サポート対象タスク、動作モード#
以下の表では、利用可能なMobileSAMモデルとその事前学習済み重み、サポート対象タスク、および推論、検証、学習、エクスポートなどの各動作モードとの互換性を示します。サポートされるモードには✅、サポートされないモードには❌が付いています。
| モデルタイプ | 事前学習済み重み | サポートされるタスク | トレーニング | 検証 | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| 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のバックボーンを使用した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
# 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)
# FastSAM-sのプロファイルを取得
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# YOLOモデル(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フリーヘッド。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は画像を約12ms(エンコーダーが8ms、マスクデコーダーが4ms)で処理します。
ViTベースの画像エンコーダーの比較#
| 画像エンコーダー | 元のSAM | MobileSAM |
|---|---|---|
| パラメーター数 | 637M | 500万 |
| 速度 | 452ms | 8ms |
プロンプトガイド型マスクデコーダー#
| マスクデコーダー | 元のSAM | MobileSAM |
|---|---|---|
| パラメーター数 | 387万6,000 | 387万6,000 |
| 速度 | 4ms | 4ms |
パイプライン全体の比較#
| パイプライン全体(エンコーダー+デコーダー) | 元のSAM | MobileSAM |
|---|---|---|
| パラメーター数 | 641M | 966万 |
| 速度 | 456ms | 12ms |
以下では、ポイントプロンプトとボックスプロンプトを使用して、MobileSAMと元のSAMの性能を示します。


MobileSAMはFastSAMより約7倍小型で、約5倍高速です。詳しくは、MobileSAMプロジェクトページをご覧ください。
UltralyticsでのMobileSAMのテスト#
元のSAMと同様に、UltralyticsはMobileSAMをテストするためのシンプルなインターフェースを提供しており、ポイントプロンプトとボックスプロンプトの両方に対応しています。
モデルのダウンロード#
UltralyticsのアセットからMobileSAMの事前学習済み重みをダウンロードしてください。
ポイントプロンプト#
from ultralytics import SAM
# モデルを読み込みます
model = SAM("mobile_sam.pt")
# 単一のポイントプロンプトに基づいてセグメントを予測します
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# 複数のポイントプロンプトに基づいて複数のセグメントを予測します
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# オブジェクトごとに複数のポイントプロンプトに基づいてセグメントを予測します
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# 正のプロンプトと負のプロンプトの両方を使用してセグメントを予測します。
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])ボックスプロンプト#
from ultralytics import SAM
# モデルを読み込みます
model = SAM("mobile_sam.pt")
# 単一のボックスプロンプトに基づいてセグメントを予測します
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# 複数のボックスプロンプトに基づいて複数のセグメントを予測します
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 | 重複するボックスを除外するための非最大値抑制のIoUしきい値。 |
imgsz | int | 640 | 画像のリサイズに使用する入力サイズ(必要に応じて32の倍数に切り上げられます)。 |
max_det | int | 300 | メモリ効率を高めるための、画像ごとの検出数の最大値。 |
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}
}よくある質問#
MobileSAMは、モバイルおよびエッジアプリケーション向けに最適化された、軽量で高速な画像セグメンテーションモデルです。元のSAMと同じパイプラインを維持しながら、大型のViT-Hエンコーダー(パラメーター数6億3,700万)をコンパクトなTiny-ViTエンコーダー(パラメーター数500万)に置き換えています。これにより、MobileSAMのパイプライン全体は元のSAMより約66倍小型(パラメーター数966万対6億4,100万)で、約38倍高速になり、画像1枚あたり約12msで動作します。SAMは画像1枚あたり456msです。MobileSAMのGitHubリポジトリで、MobileSAMの実装についてさらにご確認ください。
UltralyticsでのMobileSAMのテストは簡単です。ポイントプロンプトとボックスプロンプトを使ってセグメントを予測できます。たとえば、ポイントプロンプトを使う場合は次のとおりです。
from ultralytics import SAM # モデルを読み込みます model = SAM("mobile_sam.pt") # ポイントプロンプトに基づいてセグメントを予測します model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])詳しくは、UltralyticsでのMobileSAMのテストのセクションをご覧ください。
MobileSAMは軽量な設計と高速な推論により、モバイルおよびエッジアプリケーションに最適です。元のSAMと比べてパラメーター数が約66分の1で、約38倍高速に動作するため、計算リソースが限られたデバイスでのリアルタイムセグメンテーションに適しています。高い効率性により、モバイルデバイスでも大幅な遅延なくリアルタイム画像セグメンテーションを実行できます。さらに、モバイル性能に最適化された推論モードにも対応しています。
MobileSAMは、10万枚の画像データセット(元のSA-1B画像の1%)を使用して、単一のGPUで1日未満で学習されました。この学習では、SAMのViT-H画像エンコーダーからTiny-ViTエンコーダーへ知識を蒸留しています。事前学習済み重みと実装の詳細は、MobileSAMのGitHubリポジトリで公開されています。
MobileSAMは、モバイルおよびエッジ環境での高速かつ効率的な画像セグメンテーション向けに設計されています。主なユースケースは次のとおりです。
- モバイルアプリ向けのリアルタイム物体検出とセグメンテーション
- 計算リソースが限られたデバイスでの低遅延画像処理
- AR(拡張現実)、分析などを目的としたAI搭載モバイルアプリケーションへの統合
ユースケースと性能の詳細については、SAMからMobileSAMへの移行とSegment Anythingのアプリケーションに関するUltralyticsブログをご覧ください。