Mobiles Segment Irgendwas (MobileSAM)
MobileSAM ist ein kompaktes, effizientes Bildsegmentierungsmodell, das speziell für mobile und Edge-Geräte entwickelt wurde. Es wurde entwickelt, um die Leistungsfähigkeit von Metas Segment Anything Model (SAM) in Umgebungen mit begrenzter Rechenleistung zu bringen, liefert MobileSAM eine nahezu sofortige Segmentierung, wobei die Kompatibilität mit der ursprünglichen SAM erhalten bleibt. Unabhängig davon, ob Sie Echtzeitanwendungen oder leichtgewichtige Implementierungen entwickeln, liefert MobileSAM beeindruckende Segmentierungsergebnisse mit einem Bruchteil der Größe und der Geschwindigkeitsanforderungen seiner Vorgängerversionen.
Beobachten: Inferenz mit MobileSAM und Ultralytics | Schritt-für-Schritt-Anleitung 🎉
MobileSAM wurde in einer Reihe von Projekten eingesetzt, darunter SAM, AnyLabeling und Segment Anything in 3D.
MobileSAM wurde auf einem einzigen GPU mit einem Datensatz von 100 000 Bildern (1 % der Originalbilder) in weniger als einem Tag trainiert. Der Trainingscode wird in Zukunft veröffentlicht werden.
Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi
Die nachstehende Tabelle gibt einen Überblick über das verfügbare MobileSAM , seine vortrainierten Gewichte, unterstützte Aufgaben und die Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export. Unterstützte Modi sind durch ✅ und nicht unterstützte Modi durch ❌ gekennzeichnet.
Modell Typ | Vorgefertigte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Ausbildung | Exportieren |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Instanz-Segmentierung | ✅ | ❌ | ❌ | ❌ |
MobileSAM Vergleich mit YOLO
Der folgende Vergleich zeigt die Unterschiede zwischen Metas SAM MobileSAM und Ultralytics' kleinsten Segmentierungsmodellen, einschließlich YOLO11n-seg:
Modell | Größe (MB) |
Parameter (M) |
Geschwindigkeit (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 |
FastSAM mitYOLOv8-Backbone | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 6,7 (11,7x kleiner) | 3,4 (11,4x weniger) | 24,5 (1061x schneller) |
Ultralytics YOLO11n-seg | 5,9 (13,2x kleiner) | 2,9 (13,4x weniger) | 30,1 (864x schneller) |
Dieser Vergleich zeigt die erheblichen Unterschiede in der Modellgröße und Geschwindigkeit zwischen SAM und YOLO . Während SAM einzigartige automatische Segmentierungsfähigkeiten bieten, sind YOLO - insbesondere YOLOv8n und YOLO11n-seg - deutlich kleiner, schneller und rechnerisch effizienter.
Die Tests wurden auf einem 2025 Apple M4 Pro mit 24 GB RAM durchgeführt. torch==2.6.0
und ultralytics==8.3.90
. Um diese Ergebnisse zu reproduzieren:
Beispiel
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)
Anpassen von SAM an MobileSAM
MobileSAM verfügt über die gleiche Pipeline wie das ursprüngliche SAMeinschließlich Vorverarbeitung, Nachverarbeitung und aller Schnittstellen. Das bedeutet, dass Sie mit minimalen Änderungen an Ihrem Arbeitsablauf von SAM zu MobileSAM wechseln können.
Der wichtigste Unterschied ist der Bild-Encoder: MobileSAM ersetzt den ursprünglichen ViT-H-Encoder (632M Parameter) durch einen viel kleineren Tiny-ViT-Encoder (5M Parameter). Auf einer einzelnen GPU verarbeitet MobileSAM ein Bild in etwa 12 ms (8 ms für den Encoder, 4 ms für den Maskendecoder).
ViT-basierter Image Encoder Vergleich
Bild-Encoder | Original SAM | MobileSAM |
---|---|---|
Parameter | 611M | 5M |
Geschwindigkeit | 452ms | 8ms |
Aufforderungsgesteuerter Maskendecoder
Maske Decoder | Original SAM | MobileSAM |
---|---|---|
Parameter | 3.876M | 3.876M |
Geschwindigkeit | 4ms | 4ms |
Gesamte Pipeline im Vergleich
Gesamte Pipeline (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
Parameter | 615M | 9.66M |
Geschwindigkeit | 456ms | 12ms |
Die Leistung von MobileSAM und dem ursprünglichen SAM wird im Folgenden anhand von Punkt- und Box-Eingabeaufforderungen dargestellt.
MobileSAM ist etwa fünfmal kleiner und siebenmal schneller als FastSAM. Weitere Einzelheiten finden Sie auf der MobileSAM .
Prüfung MobileSAM in Ultralytics
Genau wie das Original SAMbietet Ultralytics eine einfache Schnittstelle zum Testen von MobileSAM, die sowohl Point- als auch Box-Prompts unterstützt.
Modell Download
Laden Sie die vortrainierten MobileSAM aus den Ultralytics herunter.
Punkt Aufforderung
Beispiel
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 Aufforderung
Beispiel
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]])
Beide MobileSAM
und SAM
nutzen dieselbe API. Weitere Einzelheiten zur Verwendung finden Sie in der SAM.
Automatischer Aufbau von Segmentierungsdatensätzen mithilfe eines Erkennungsmodells
Um Ihren Datensatz automatisch mit dem Ultralytics zu annotieren, verwenden Sie die auto_annotate
Funktion wie unten dargestellt:
Beispiel
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
data |
str |
erforderlich | Pfad zum Verzeichnis, das die Zielbilder für die Beschriftung oder Segmentierung enthält. |
det_model |
str |
'yolo11x.pt' |
YOLO Erkennungsmodellpfad für die anfängliche Objekterkennung. |
sam_model |
str |
'sam_b.pt' |
SAM für die Segmentierung (unterstützt SAM, SAM2 und mobile_sam-Modelle). |
device |
str |
'' |
Berechnungsgerät (z. B. 'cuda:0', 'cpu' oder '' für die automatische Geräteerkennung). |
conf |
float |
0.25 |
YOLO Schwellenwert für die Erkennungswahrscheinlichkeit zum Herausfiltern schwacher Erkennungen. |
iou |
float |
0.45 |
IoU-Schwelle für die Nicht-Maximum-Unterdrückung, um überlappende Boxen zu filtern. |
imgsz |
int |
640 |
Eingabegröße für die Größenänderung von Bildern (muss ein Vielfaches von 32 sein). |
max_det |
int |
300 |
Maximale Anzahl von Erkennungen pro Bild, um den Speicher zu schonen. |
classes |
list[int] |
None |
Liste der zu erkennenden Klassenindizes (z. B., [0, 1] für Person & Fahrrad). |
output_dir |
str |
None |
Speicherverzeichnis für Anmerkungen (Standardwert ist './labels' relativ zum Datenpfad). |
Zitate und Danksagungen
Wenn MobileSAM für Ihre Forschung oder Entwicklung hilfreich ist, ziehen Sie bitte in Erwägung, das folgende Dokument 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}
}
Lesen Sie das vollständige MobileSAM auf arXiv.
FAQ
Was ist MobileSAM und wie unterscheidet es sich von dem ursprünglichen SAM ?
MobileSAM ist ein leichtgewichtiges, schnelles Bildsegmentierungsmodell, das für mobile und Randanwendungen optimiert ist. Es behält die gleiche Pipeline wie das ursprüngliche SAM bei, ersetzt aber den großen ViT-H-Encoder (632M Parameter) durch einen kompakten Tiny-ViT-Encoder (5M Parameter). Dadurch ist MobileSAM etwa fünfmal kleiner und siebenmal schneller als das ursprüngliche SAM und arbeitet mit etwa 12 ms pro Bild im Vergleich zu 456 ms bei SAM. Weitere Informationen über die Implementierung von MobileSAM finden Sie im MobileSAM GitHub Repository.
Wie kann ich MobileSAM mit Ultralytics testen?
Die Prüfung von MobileSAM in Ultralytics ist unkompliziert. Sie können Punkt- und Box-Eingabeaufforderungen verwenden, um Segmente vorherzusagen. Zum Beispiel mit einer Punktaufforderung:
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 finden Sie im Abschnitt Testen von MobileSAM in Ultralytics.
Warum sollte ich MobileSAM für meine mobile Anwendung verwenden?
MobileSAM eignet sich aufgrund seiner geringen Größe und schnellen Inferenzgeschwindigkeit ideal für mobile und Edge-Anwendungen. Im Vergleich zum ursprünglichen SAM ist MobileSAM etwa fünfmal kleiner und siebenmal schneller, wodurch es sich für die Echtzeitsegmentierung auf Geräten mit begrenzten Rechenressourcen eignet. Seine Effizienz ermöglicht es mobilen Geräten, Bildsegmentierungen in Echtzeit und ohne nennenswerte Latenzzeit durchzuführen. Außerdem unterstützt MobileSAM den für die mobile Leistung optimierten Inferenzmodus.
Wie wurde MobileSAM geschult, und ist der Schulungscode verfügbar?
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. Derzeit können Sie bereits trainierte Gewichte und Implementierungsdetails über das MobileSAM GitHub-Repository abrufen.
Was sind die wichtigsten Anwendungsfälle für MobileSAM?
MobileSAM wurde für eine schnelle, effiziente Bildsegmentierung in mobilen und randnahen Umgebungen entwickelt. Zu den wichtigsten Anwendungsfällen gehören:
- Objekterkennung und -segmentierung in Echtzeit für mobile Anwendungen
- Bildverarbeitung mit geringer Latenzzeit 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 finden Sie unter Anpassung von SAM an MobileSAM und im Ultralytics zu MobileSAM .