Mobile Segment Anything (MobileSAM)
MobileSAMは、モバイルおよびエッジデバイス向けに特別に構築された、コンパクトで効率的な画像セグメンテーションモデルです。MetaのSegment Anything Model(SAM)の能力を、計算資源が限られた環境にもたらすように設計されており、MobileSAMは、元のSAMパイプラインとの互換性を維持しながら、ほぼ瞬時のセグメンテーションを実現します。リアルタイムアプリケーションを開発する場合でも、軽量なデプロイメントを行う場合でも、MobileSAMは、従来のモデルと比較して、サイズと速度要件を大幅に削減しながら、優れたセグメンテーション結果を提供します。
見る: Ultralyticsを使用してMobileSAMで推論を実行する方法 | ステップごとのガイド 🎉
MobileSAMは、Grounding-SAM、AnyLabeling、Segment Anything in 3Dなど、さまざまなプロジェクトで採用されています。
MobileSAMは、10万枚の画像データセット(元の画像の1%)を使用して、1つのGPUで1日以内にトレーニングされました。トレーニングコードは将来公開される予定です。
利用可能なモデル、サポートされているタスク、および動作モード
以下の表は、利用可能なMobileSAMモデル、その事前学習済み重み、サポートされているタスク、および推論、検証、トレーニング、エクスポートなどのさまざまな動作モードとの互換性を示しています。サポートされているモードは✅で、サポートされていないモードは❌で示されています。
モデルの種類 | 事前学習済み重み | サポートされているタスク | 推論 | 検証 | 学習 | エクスポート |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
MobileSAMとYOLOの比較
次の比較は、MetaのSAMバリアント、MobileSAM、およびYOLO11n-segを含むUltralyticsの最小セグメンテーションモデルの違いを強調しています。
モデル | サイズ (MB) |
パラメータ (M) |
速度 (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 バックボーンを備えたFastSAM-s | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 6.7 (11.7分の1) | 3.4 (11.4分の1) | 24.5 (1061倍高速) |
Ultralytics YOLO11n-seg | 5.9 (13.2倍小さい) | 2.9 (13.4倍少ない) | 30.1 (864倍高速) |
この比較は、SAMのバリアントとYOLOセグメンテーションモデルとの間で、モデルサイズと速度に大きな違いがあることを示しています。SAMモデルは独自の自動セグメンテーション機能を提供しますが、YOLOモデル、特にYOLOv8n-segとYOLO11n-segは、著しく小型、高速で、計算効率に優れています。
テストは、24GB RAM を搭載した 2025 Apple M4 Pro で実施されました。 torch==2.6.0
および ultralytics==8.3.90
これらの結果を再現するには、
例
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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
SAMからMobileSAMへの適応
MobileSAMは、前処理、後処理、およびすべてのインターフェースを含む、元のSAMと同じパイプラインを保持しています。つまり、ワークフローを最小限に変更するだけで、SAMからMobileSAMに移行できます。
主な違いは画像エンコーダーです。MobileSAMは、オリジナルのViT-Hエンコーダー(632Mパラメーター)を、はるかに小型のTiny-ViTエンコーダー(5Mパラメーター)に置き換えます。単一のGPU上で、MobileSAMは約12msで画像を処理します(エンコーダーに8ms、マスクデコーダーに4ms)。
ViTベースの画像エンコーダの比較
画像エンコーダー | オリジナルSAM | MobileSAM |
---|---|---|
パラメータ | 611M | 5M |
速度 | 452ms | 8ms |
プロンプト誘導型マスクデコーダー
マスクデコーダー | オリジナルSAM | MobileSAM |
---|---|---|
パラメータ | 3.876M | 3.876M |
速度 | 4ms | 4ms |
パイプライン全体の比較
パイプライン全体 (Enc+Dec) | オリジナルSAM | MobileSAM |
---|---|---|
パラメータ | 615M | 9.66M |
速度 | 456ms | 12ms |
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]])
両方 MobileSAM
および SAM
同じAPIを共有します。詳細な使用方法については、以下を参照してください。 SAMのドキュメント.
検出モデルを使用したセグメンテーションデータセットの自動構築
Ultralytics フレームワークを使用してデータセットに自動的にアノテーションを付けるには、以下を使用します。 auto_annotate
以下に示すように機能します:
例
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
引数 | 種類 | デフォルト | 説明 |
---|---|---|---|
data |
str |
必須 | アノテーションまたはセグメンテーションの対象となる画像を含むディレクトリへのパス。 |
det_model |
str |
'yolo11x.pt' |
初期オブジェクト検出のための YOLO 検出モデルのパス。 |
sam_model |
str |
'sam_b.pt' |
セグメンテーション用のSAMモデルパス(SAM、SAM2バリアント、およびmobile_samモデルをサポート)。 |
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 |
検出するクラスインデックスのリスト(例: [0, 1] 人および自転車用)。 |
output_dir |
str |
None |
アノテーションの保存先ディレクトリ(デフォルトはデータパスに対する相対パスで'./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論文全文をお読みください。
よくある質問
MobileSAMとは何ですか?また、元のSAMモデルとどのように異なりますか?
MobileSAMは、モバイルおよびエッジアプリケーション向けに最適化された、軽量で高速な画像セグメンテーションモデルです。元のSAMと同じパイプラインを維持していますが、大型のViT-Hエンコーダ(632Mパラメータ)を、コンパクトなTiny-ViTエンコーダ(5Mパラメータ)に置き換えています。これにより、MobileSAMは元のSAMより約5分の1のサイズ、7倍の速度になり、SAMの456msに対して、画像あたり約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と比較して、MobileSAMは約5分の1のサイズ、7倍の速度であり、計算リソースが限られたデバイスでのリアルタイムセグメンテーションに適しています。その効率性により、モバイルデバイスは大幅な遅延なしにリアルタイム画像セグメンテーションを実行できます。さらに、MobileSAMは、モバイルパフォーマンス向けに最適化された推論モードをサポートしています。
MobileSAM はどのようにトレーニングされたのか、またトレーニングコードは利用可能か?
MobileSAMは、10万枚の画像データセット(元の画像の1%)を使用して、1つのGPUで1日以内にトレーニングされました。トレーニングコードは将来公開される予定ですが、現在、MobileSAM GitHubリポジトリから、事前トレーニング済みの重みと実装の詳細にアクセスできます。
MobileSAMの主なユースケースは何ですか?
MobileSAMは、モバイルおよびエッジ環境での高速かつ効率的な画像セグメンテーションのために設計されています。主なユースケースは次のとおりです。
- モバイルアプリ向けのリアルタイムオブジェクト検出とセグメンテーション
- 計算能力が限られたデバイスでの低遅延画像処理
- 拡張現実(AR)、分析などのためのAI搭載モバイルアプリケーションへの統合
ユースケースとパフォーマンスの詳細については、SAMからMobileSAMへの適応とMobileSAMアプリケーションに関するUltralyticsブログをご覧ください。