Zum Inhalt springen

MobileSAM Logo

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.

Bild mit Punkt als Aufforderung

Bild mit Box als Aufforderung

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

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 Sie MobileSAM für Ihre Forschungs- oder Entwicklungsarbeit nützlich finden, sollten Sie unser Papier 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}
}

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".

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 6 Tagen

Kommentare