モバイルセグメントなんでも (MobileSAM)
MobileSAM 、モバイルおよびエッジデバイス用に作られた、コンパクトで効率的な画像セグメンテーションモデルです。MetaのSegment Anything Model (SAM)のパワーを限られたコンピュート環境にもたらすために設計されたMobileSAM 、オリジナルのSAM パイプラインとの互換性を維持しながら、ほぼ瞬時のセグメンテーションを実現する。MobileSAM 、リアルタイムアプリケーションの開発であろうと、軽量なデプロイメントであろうと、従来のものと比べてわずかなサイズとスピードの要件で、印象的なセグメンテーション結果を提供する。
見るんだ: Ultralytics を使ってMobileSAM で推論を実行する方法|ステップ・バイ・ステップ・ガイド🎉。
MobileSAM 、SAM-SAM、AnyLabeling、Segment Anything in 3D など、さまざまなプロジェクトで採用されている。
MobileSAM 、10万枚の画像データセット(オリジナル画像の1%)を使って、GPU 1台で1日以内にトレーニングされた。トレーニングコードは今後公開される予定だ。
利用可能なモデル、サポートされるタスク、および動作モード
以下の表は、利用可能なMobileSAM モデル、事前にトレーニングされた重み、サポートされているタスク、および推論、検証、トレーニング、エクスポートなどのさまざまな操作モードとの互換性の概要を示している。サポートされているモードは✅で、サポートされていないモードは❌で示されている。
モデルタイプ | 事前に訓練されたウェイト | 対応タスク | 推論 | バリデーション | トレーニング | 輸出 |
---|---|---|---|---|---|---|
MobileSAM | モバイルサム | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
MobileSAM YOLO比較
以下の比較は、MetaのSAM 亜種であるMobileSAM、YOLO11n-segを含むUltralytics最小セグメンテーションモデルの違いを強調している:
モデル | サイズ (MB) |
パラメータ (M) |
スピード (CPU) (ms/im) |
---|---|---|---|
メタSAM-b | 375 | 93.7 | 49401 |
メタSAM2-b | 162 | 80.8 | 31901 |
メタSAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 バックボーンのFastSAM | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 6.7(11.7倍小さい) | 3.4倍(11.4倍減) | 24.5(1061倍速) |
Ultralytics YOLO11n-seg | 5.9(13.2倍小さい) | 2.9(13.4倍減) | 30.1(864倍速) |
この比較は、SAM セグメンテーションモデルとYOLO セグメンテーションモデルの間には、モデルのサイズと速度に大きな違いがあることを示している。SAM モデルはユニークな自動セグメンテーション機能を提供するが、YOLO モデル(特にYOLOv8nYOLO11n-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 、オリジナルの SAMMobileSAMは、前処理、後処理、すべてのインターフェースを含む、オリジナルのSAMと同じパイプラインを保持します。つまり、ワークフローに最小限の変更を加えるだけで、SAM MobileSAM 移行できる。
主な違いは画像エンコーダーである:MobileSAM 、オリジナルのViT-Hエンコーダー(632Mパラメーター)を、はるかに小さなTiny-ViTエンコーダー(5Mパラメーター)に置き換えている。シングルGPU、MobileSAM 約12msで画像を処理する(エンコーダーが8ms、マスクデコーダーが4ms)。
ViTベースの画像エンコーダの比較
画像エンコーダー | オリジナルSAM | MobileSAM |
---|---|---|
パラメータ | 611M | 5M |
スピード | 452ミリ秒 | 8ms |
プロンプト誘導型マスク・デコーダー
マスク・デコーダー | オリジナルSAM | MobileSAM |
---|---|---|
パラメータ | 3.876M | 3.876M |
スピード | 4ms | 4ms |
パイプライン全体の比較
パイプライン全体(Enc+Dec) | オリジナルSAM | MobileSAM |
---|---|---|
パラメータ | 615M | 9.66M |
スピード | 456ms | 12ms |
MobileSAM オリジナルのSAM パフォーマンスを、ポイントプロンプトとボックスプロンプトの両方を使って以下に示す。
MobileSAM FastSAM約5倍小さく、7倍速い。詳細については、MobileSAM プロジェクトのページをご覧ください。
テストMobileSAM Ultralytics
オリジナルのように SAMUltralytics MobileSAMテストするためのシンプルなインターフェースを提供し、ポイントプロンプトとボックスプロンプトの両方をサポートする。
モデルダウンロード
Ultralytics アセットから 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 |
重複するボックスをフィルタリングするための非最大抑制の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}
}
MobileSAM 論文の全文をarXivで読む。
よくあるご質問
MobileSAM 何か、オリジナルSAM モデルとの違いは何か?
MobileSAM 、モバイルおよびエッジアプリケーション向けに最適化された、軽量で高速な画像セグメンテーションモデルである。オリジナルのSAM 同じパイプラインを維持しながら、大きなViT-Hエンコーダー(632Mパラメーター)をコンパクトなTiny-ViTエンコーダー(5Mパラメーター)に置き換えている。この結果、MobileSAM オリジナルのSAM約5倍小さく、7倍高速になり、1画像あたりの動作速度はSAM456msに対し、およそ12msとなった。MobileSAM実装の詳細については、MobileSAM GitHubリポジトリを参照してください。
Ultralytics MobileSAM テストするには?
Ultralytics MobileSAM テストするのは簡単だ。セグメントを予測するには、ポイントプロンプトとボックスプロンプトを使用できる。例えば、Pointプロンプトを使用する:
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 倍小さく、7 倍高速であるため、計算リソースが限られたデバイスでのリアルタイムのセグメンテーションに適している。この効率性により、モバイルデバイスは、大きな待ち時間なしにリアルタイムの画像セグメンテーションを実行できる。さらに、MobileSAM モバイル性能に最適化された推論モードをサポートしている。
MobileSAM どのようにトレーニングされたのか、またトレーニングコードは入手可能か?
MobileSAM 、100kの画像データセット(元画像の1%)を使って、シングルGPU 1日以内にトレーニングされた。トレーニングコードは将来公開される予定だが、現在はMobileSAM GitHubリポジトリから、事前にトレーニングされた重みと実装の詳細にアクセスできる。
MobileSAM主な使用例とは?
MobileSAM 、モバイル環境およびエッジ環境における高速で効率的な画像セグメンテーションのために設計されている。主な使用例
- モバイルアプリのリアルタイムオブジェクト検出とセグメンテーション
- 限られたコンピュートしか持たないデバイスでの低レイテンシー画像処理
- 拡張現実(AR)、分析などのためのAI搭載モバイル・アプリケーションへの統合
使用例とパフォーマンスの詳細については、 SAM MobileSAM適応と、 MobileSAM アプリケーションに関するUltralytics ブログを参照のこと。