
Mobile Segment Anything (MobileSAM)
MobileSAM ist ein kompaktes, effizientes Bildsegmentierungsmodell, das speziell für mobile Geräte und Edge-Umgebungen entwickelt wurde. Es wurde konzipiert, um die Leistung des Segment Anything Model (SAM) von Meta in Umgebungen mit begrenzter Rechenleistung verfügbar zu machen. MobileSAM bietet eine nahezu verzögerungsfreie Segmentierung und bleibt dabei mit der ursprünglichen SAM-Pipeline kompatibel. Egal, ob du Echtzeitanwendungen entwickelst oder leichtgewichtige Implementierungen planst, MobileSAM liefert beeindruckende Segmentierungsergebnisse bei einem Bruchteil der Größe und Geschwindigkeitsanforderungen seiner Vorgänger.
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
MobileSAM wurde in einer Vielzahl von Projekten eingesetzt, darunter Grounding-SAM, AnyLabeling und Segment Anything in 3D.
MobileSAM wurde auf einer einzelnen GPU mit einem Datensatz von 100.000 Bildern (1 % der Originalbilder) in weniger als einem Tag trainiert. Der Trainingscode wird in Zukunft veröffentlicht.
Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi
Die folgende Tabelle zeigt das verfügbare MobileSAM-Modell, seine vortrainierten Gewichte, die unterstützten Aufgaben sowie die Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export. Unterstützte Modi sind mit ✅ und nicht unterstützte mit ❌ gekennzeichnet.
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Exportieren |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
MobileSAM Vergleich vs YOLO
Der folgende Vergleich hebt die Unterschiede zwischen den SAM-Varianten von Meta, MobileSAM und Ultralytics-Segmentierungsmodellen, einschließlich YOLO26n-seg, hervor:
| Modell | Größe (MB) | Parameter (M) | Geschwindigkeit (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 |
| FastSAM-s mit YOLOv8 Backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0x kleiner) | 3.4 (11.4x weniger) | 24.8 (945x schneller) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x kleiner) | 2.9 (13.4x weniger) | 24.3 (964x schneller) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x kleiner) | 2.7 (14.4x weniger) | 25.2 (930x schneller) |
Dieser Vergleich demonstriert die erheblichen Unterschiede in Modellgröße und Geschwindigkeit zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. Während SAM-Modelle einzigartige Funktionen zur automatischen Segmentierung bieten, sind YOLO-Modelle – insbesondere YOLOv8n-seg, YOLO11n-seg und YOLO26n-seg – deutlich kleiner, schneller und recheneffizienter.
SAM-Geschwindigkeiten wurden mit PyTorch gemessen, YOLO-Geschwindigkeiten mit ONNX Runtime. Die Tests wurden auf einem 2025 Apple M4 Air mit 16 GB RAM unter Verwendung von torch==2.10.0, ultralytics==8.4.31 und onnxruntime==1.24.4 durchgeführt. Um diese Ergebnisse zu reproduzieren:
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)Anpassung von SAM an MobileSAM
MobileSAM behält dieselbe Pipeline wie das ursprüngliche SAM bei, einschließlich Vorverarbeitung, Nachverarbeitung und aller Schnittstellen. Das bedeutet, dass du mit minimalen Änderungen an deinem Workflow von SAM zu MobileSAM wechseln kannst.
Der Hauptunterschied ist der Bild-Encoder: MobileSAM ersetzt den ursprünglichen ViT-H-Encoder (632 Mio. Parameter) durch einen wesentlich kleineren Tiny-ViT-Encoder (5 Mio. Parameter). Auf einer einzelnen GPU verarbeitet MobileSAM ein Bild in etwa 12 ms (8 ms für den Encoder, 4 ms für den Masken-Decoder).
Vergleich des ViT-basierten Bild-Encoders
| Bild-Encoder | Original SAM | MobileSAM |
|---|---|---|
| Parameter | 611M | 5M |
| Geschwindigkeit | 452ms | 8ms |
Prompt-gesteuerter Masken-Decoder
| Masken-Decoder | Original SAM | MobileSAM |
|---|---|---|
| Parameter | 3.876M | 3.876M |
| Geschwindigkeit | 4ms | 4ms |
Vergleich der gesamten Pipeline
| Gesamte Pipeline (Enc+Dec) | Original SAM | MobileSAM |
|---|---|---|
| Parameter | 615M | 9.66M |
| Geschwindigkeit | 456ms | 12ms |
Die Leistung von MobileSAM und dem ursprünglichen SAM wird unten anhand von Punkt- und Box-Prompts veranschaulicht.


MobileSAM ist etwa 7-mal kleiner und 5-mal schneller als FastSAM. Weitere Einzelheiten findest du auf der MobileSAM-Projektseite.
Testen von MobileSAM in Ultralytics
Genau wie das ursprüngliche SAM bietet Ultralytics eine einfache Schnittstelle zum Testen von MobileSAM, die sowohl Punkt- als auch Box-Prompts unterstützt.
Modell-Download
Lade die vortrainierten MobileSAM-Gewichte von Ultralytics Assets herunter.
Punkt-Prompt
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]])Box-Prompt
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]])Sowohl MobileSAM als auch SAM nutzen dieselbe API. Weitere Einzelheiten zur Verwendung findest du in der SAM-Dokumentation.
Automatische Erstellung von Segmentierungsdatensätzen mit einem Erkennungsmodell
Um deinen Datensatz automatisch zu annotieren, verwende die auto_annotate-Funktion mit dem Ultralytics-Framework wie unten gezeigt:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
data | str | erforderlich | Pfad zum Verzeichnis, das die Zielbilder für die Annotation oder Segmentierung enthält. |
det_model | str | 'yolo26x.pt' | Pfad zum YOLO-Detektionsmodell für die anfängliche Objekterkennung. |
sam_model | str | 'sam_b.pt' | Pfad zum SAM-Modell für die Segmentierung (unterstützt SAM, SAM2-Varianten und MobileSAM-Modelle). |
device | str | '' | Rechengerät (z. B. 'cuda:0', 'cpu' oder '' für automatische Geräteerkennung). |
conf | float | 0.25 | Konfidenzschwellenwert für die YOLO-Detektion zum Filtern schwacher Detektionen. |
iou | float | 0.45 | IoU-Schwellenwert für Non-Maximum Suppression zum Filtern überlappender Boxen. |
imgsz | int | 640 | Eingabegröße für die Bildskalierung (muss ein Vielfaches von 32 sein). |
max_det | int | 300 | Maximale Anzahl an Detektionen pro Bild für Speichereffizienz. |
classes | list[int] | None | Liste der Klassenindizes zur Erkennung (z. B. [0, 1] für Person & Fahrrad). |
output_dir | str | None | Speicherverzeichnis für Annotationen (standardmäßig './labels' relativ zum Datenpfad). |
Zitate und Danksagungen
Wenn MobileSAM hilfreich für deine Forschung oder Entwicklung ist, ziehe bitte in Erwägung, das folgende Paper zu zitieren:
@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}
}Lies das vollständige MobileSAM-Paper auf arXiv.
FAQ
Was ist MobileSAM und wie unterscheidet es sich vom ursprünglichen SAM-Modell?
MobileSAM ist ein leichtgewichtiges, schnelles Bildsegmentierungsmodell, das für mobile und Edge-Anwendungen optimiert ist. Es behält dieselbe Pipeline wie das ursprüngliche SAM bei, ersetzt jedoch den großen ViT-H-Encoder (632 Mio. Parameter) durch einen kompakten Tiny-ViT-Encoder (5 Mio. Parameter). Dies führt dazu, dass MobileSAM etwa 5-mal kleiner und 7-mal schneller als das ursprüngliche SAM ist und mit etwa 12 ms pro Bild im Vergleich zu den 456 ms von SAM arbeitet. Erfahre mehr über die Implementierung von MobileSAM im MobileSAM GitHub-Repository.
Wie kann ich MobileSAM mit Ultralytics testen?
Das Testen von MobileSAM in Ultralytics ist unkompliziert. Du kannst Punkt- und Box-Prompts verwenden, um Segmente vorherzusagen. Zum Beispiel mit einem Punkt-Prompt:
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])Weitere Einzelheiten findest du im Abschnitt Testen von MobileSAM in Ultralytics.
Warum sollte ich MobileSAM für meine mobile Anwendung verwenden?
MobileSAM ist aufgrund seines leichtgewichtigen Designs und seiner schnellen Inferenzgeschwindigkeit ideal für mobile und Edge-Anwendungen geeignet. Im Vergleich zum ursprünglichen SAM ist MobileSAM etwa 5-mal kleiner und 7-mal schneller, was es für Echtzeit-Segmentierung auf Geräten mit begrenzten Rechenressourcen geeignet macht. Seine Effizienz ermöglicht es mobilen Geräten, Echtzeit-Bildsegmentierung ohne signifikante Latenz durchzuführen. Zusätzlich unterstützt MobileSAM den Inferenzmodus, der für mobile Leistung optimiert ist.
Wie wurde MobileSAM trainiert und ist der Trainingscode verfügbar?
MobileSAM wurde auf einer einzelnen GPU mit einem Datensatz von 100.000 Bildern (1 % der Originalbilder) in weniger als einem Tag trainiert. Obwohl der Trainingscode in Zukunft veröffentlicht wird, kannst du derzeit auf vortrainierte Gewichte und Implementierungsdetails im MobileSAM GitHub-Repository zugreifen.
Was sind die primären Anwendungsfälle für MobileSAM?
MobileSAM ist für eine schnelle, effiziente Bildsegmentierung in mobilen und Edge-Umgebungen konzipiert. Zu den primären Anwendungsfällen gehören:
- Echtzeit-Objekterkennung und -segmentierung für mobile Apps
- Bildverarbeitung mit geringer Latenz auf Geräten mit begrenzter Rechenleistung
- Integration in KI-gestützte mobile Anwendungen für Augmented Reality (AR), Analytik und mehr
Weitere Einzelheiten zu Anwendungsfällen und Leistung findest du unter Anpassung von SAM an MobileSAM sowie im Ultralytics-Blog zu MobileSAM-Anwendungen.