Mobiles Segment Irgendwas (MobileSAM)
Das MobileSAM Papier ist jetzt auf arXiv verfügbar.
Eine Demonstration von MobileSAM auf einer CPU kann unter diesem Demo-Link abgerufen werden. Die Ausführung auf einer Mac i5 CPU dauert etwa 3 Sekunden. Auf dem Hugging Face Demo tragen die Schnittstelle und die leistungsschwächeren CPUs zu einer langsameren Reaktion bei, aber sie funktioniert weiterhin effektiv.
Beobachten: Inferenz mit MobileSAM und Ultralytics | Schritt-für-Schritt-Anleitung 🎉
MobileSAM wird in verschiedenen Projekten eingesetzt, darunter Grounding-SAM, AnyLabeling und Segment Anything in 3D.
MobileSAM wird auf einem einzigen GPU mit einem 100k-Datensatz (1% der Originalbilder) in weniger als einem Tag trainiert. Der Code für dieses Training wird in Zukunft zur Verfügung gestellt werden.
Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi
In dieser Tabelle werden die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, den von ihnen unterstützten Aufgaben und ihrer Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export aufgeführt, gekennzeichnet durch ✅ Emojis für unterstützte Modi und ❌ Emojis für nicht unterstützte Modi.
Modell Typ | Vorgefertigte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Ausbildung | Exportieren |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Instanz-Segmentierung | ✅ | ❌ | ❌ | ❌ |
MobileSAM Vergleich mit YOLO
Hier vergleichen wir die SAM von Meta, einschließlich MobileSAM, mit dem kleinsten Segmentierungsmodell von Ultralytics , YOLO11n-seg:
Modell | Größe (MB) | Parameter (M) | GeschwindigkeitCPU) (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 den Modellgrößen und Geschwindigkeiten zwischen SAM und YOLO . Während SAM einzigartige automatische Segmentierungsfähigkeiten bietet, sind die YOLO , insbesondere YOLOv8n und YOLO11n-seg, deutlich kleiner, schneller und rechnerisch effizienter.
Die Tests laufen auf einem 2025 Apple M4 Pro mit 24 GB RAM und torch==2.6.0
und ultralytics==8.3.90
. Um diesen Test 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
Da MobileSAM die gleiche Pipeline wie das Original SAM verwendet, haben wir die Vorverarbeitung, die Nachverarbeitung und alle anderen Schnittstellen des Originals übernommen. Folglich können diejenigen, die derzeit das Original SAM verwenden, mit minimalem Aufwand zu MobileSAM wechseln.
MobileSAM hat eine vergleichbare Leistung wie das Original SAM und behält dieselbe Pipeline bei, abgesehen von einer Änderung des Bildkodierers. Insbesondere ersetzen wir den ursprünglichen, schwergewichtigen ViT-H-Encoder (632M) durch einen kleineren Tiny-ViT (5M). Auf einer einzigen GPU arbeitet MobileSAM mit etwa 12 ms pro Bild: 8 ms für den Bildcodierer und 4 ms für den Maskendecodierer.
Die folgende Tabelle enthält einen Vergleich der ViT-basierten Bildkodierer:
Bild-Encoder | Original SAM | MobileSAM |
---|---|---|
Parameter | 611M | 5M |
Geschwindigkeit | 452ms | 8ms |
Sowohl das Original SAM als auch MobileSAM verwenden denselben prompt-guided mask decoder:
Maske Decoder | Original SAM | MobileSAM |
---|---|---|
Parameter | 3.876M | 3.876M |
Geschwindigkeit | 4ms | 4ms |
Hier ist der Vergleich der gesamten Pipeline:
Gesamte Pipeline (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
Parameter | 615M | 9.66M |
Geschwindigkeit | 456ms | 12ms |
Die Leistung von MobileSAM und dem Original SAM wird anhand eines Punktes und eines Kastens als Eingabeaufforderung demonstriert.
Mit seiner überragenden Leistung ist MobileSAM etwa 5 Mal kleiner und 7 Mal schneller als das aktuelle FastSAM. Weitere Einzelheiten sind auf der ProjektseiteMobileSAM zu finden.
Prüfung MobileSAM in Ultralytics
Genau wie das Original SAMbieten wir in Ultralytics eine unkomplizierte Prüfmethode an, die Modi für Punkt- und Kastenaufforderungen umfasst.
Modell Download
Sie können die vortrainierten MobileSAM unter ultralytics herunterladen ultralytics
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]])
Wir haben umgesetzt MobileSAM
und SAM
unter Verwendung der gleichen API. Weitere Informationen zur Verwendung finden Sie in der SAM Seite.
Automatischer Aufbau von Segmentierungsdatensätzen unter Verwendung eines Erkennungsmodells
Um Ihren Datensatz mit Hilfe des Ultralytics Frameworks automatisch zu annotieren, verwenden Sie die auto_annotate
Funktion wie unten gezeigt:
Beispiel
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 Sie MobileSAM für Ihre Forschungs- oder Entwicklungsarbeit nützlich finden, sollten Sie unser Papier zitieren:
FAQ
Was ist MobileSAM und wie unterscheidet es sich von dem ursprünglichen Modell SAM ?
MobileSAM ist ein leichtgewichtiges, schnelles Bildsegmentierungsmodell, das für mobile Anwendungen entwickelt wurde. Es behält die gleiche Pipeline wie das ursprüngliche SAM bei, ersetzt aber den schwergewichtigen ViT-H-Encoder (632M Parameter) durch einen kleineren Tiny-ViT-Encoder (5M Parameter). Diese Änderung führt dazu, dass MobileSAM etwa fünfmal kleiner und siebenmal schneller als das ursprüngliche SAM ist. So arbeitet MobileSAM beispielsweise mit etwa 12 ms pro Bild, verglichen mit 456 ms beim ursprünglichen SAM. Sie können mehr über die MobileSAM in verschiedenen Projekten im MobileSAM erfahren.
Wie kann ich MobileSAM mit Ultralytics testen?
Das Testen von MobileSAM in Ultralytics kann mit einfachen Methoden durchgeführt werden. Sie können Punkt- und Kastenaufforderungen verwenden, um Segmente vorherzusagen. Hier ist ein 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 Informationen finden Sie auch im Abschnitt Testen MobileSAM.
Warum sollte ich MobileSAM für meine mobile Anwendung verwenden?
MobileSAM ist aufgrund seiner leichtgewichtigen Architektur und seiner schnellen Inferenzgeschwindigkeit ideal für mobile Anwendungen. Im Vergleich zum Original SAM ist MobileSAM etwa fünfmal kleiner und siebenmal schneller, was es für Umgebungen mit begrenzten Rechenressourcen geeignet macht. Diese Effizienz stellt sicher, dass mobile Geräte Bildsegmentierungen in Echtzeit und ohne signifikante Latenzzeit durchführen können. Darüber hinaus sind die Modelle von MobileSAM, wie z. B. Inference, für die mobile Leistung optimiert.
Wie wurde MobileSAM geschult, und ist der Schulungscode verfügbar?
MobileSAM wurde auf einem einzigen GPU mit einem 100k-Datensatz, d.h. 1% der Originalbilder, in weniger als einem Tag trainiert. Während der Trainingscode in Zukunft zur Verfügung gestellt wird, können Sie derzeit andere Aspekte von MobileSAM im MobileSAM GitHub-Repository erkunden. Dieses Repository enthält vortrainierte Gewichte und Implementierungsdetails für verschiedene Anwendungen.
Was sind die wichtigsten Anwendungsfälle für MobileSAM?
MobileSAM wurde für eine schnelle und effiziente Bildsegmentierung in mobilen Umgebungen entwickelt. Zu den wichtigsten Anwendungsfällen gehören:
- Objekterkennung und -segmentierung in Echtzeit für mobile Anwendungen.
- Bildverarbeitung mit geringer Latenzzeit in Geräten mit begrenzten Rechenressourcen.
- Integration in KI-gesteuerte mobile Anwendungen für Aufgaben wie Augmented Reality (AR) und Echtzeit-Analysen.
Ausführlichere Anwendungsfälle und Leistungsvergleiche finden Sie im Abschnitt " Anpassung von SAM an MobileSAM".