Overslaan naar inhoud

Segment Anything Model (SAM)

Welkom op de grens van beeldsegmentatie met het Segment Anything Model, of SAM. Dit revolutionaire model heeft het spel veranderd door onmiddellijke beeldsegmentatie met realtime prestaties te introduceren en zet daarmee nieuwe standaarden op dit gebied.

Inleiding tot SAM: Het Segment Anything Model

Het Segment Anything Model, of SAM, is een baanbrekend beeldsegmentatiemodel dat onmiddellijke segmentatie mogelijk maakt, wat ongeëvenaarde veelzijdigheid biedt in beeldanalysetaken. SAM vormt het hart van het Segment Anything initiatief, een baanbrekend project dat een nieuw model, taak en dataset voor beeldsegmentatie introduceert.

SAMHet geavanceerde ontwerp zorgt ervoor dat het zich kan aanpassen aan nieuwe beeldverdelingen en taken zonder voorkennis, een eigenschap die bekend staat als zero-shot overdracht. Getraind op de uitgebreide SA-1B dataset, die meer dan 1 miljard maskers bevat verspreid over 11 miljoen zorgvuldig gecureerde afbeeldingen, heeft SAM indrukwekkende zero-shot prestaties laten zien, die eerdere volledig supervised resultaten in veel gevallen overtreffen.

Voorbeeldafbeelding dataset SA-1B Voorbeeldafbeeldingen. Afbeeldingen van de dataset met overlappende maskers van de onlangs geïntroduceerde SA-1B dataset. SA-1B bevat 11 miljoen verschillende afbeeldingen met een hoge resolutie, licentie en privacybescherming en 1,1 miljard segmentatiemaskers van hoge kwaliteit. Deze maskers zijn volledig automatisch geannoteerd door SAM en zijn, zoals geverifieerd door menselijke beoordelingen en talrijke experimenten, van hoge kwaliteit en diversiteit. Afbeeldingen zijn gegroepeerd op het aantal maskers per afbeelding voor visualisatie (gemiddeld zijn er ∼100 maskers per afbeelding).

Belangrijkste kenmerken van het Segment Anything Model (SAM)

  • Segmentatietaak op verzoek: SAM is ontworpen met een segmentatietaak op verzoek in gedachten, waardoor het geldige segmentatiemaskers kan genereren vanaf elk gegeven verzoek, zoals ruimtelijke of tekstuele aanwijzingen die een object identificeren.
  • Geavanceerde architectuur: Het Segment Anything Model maakt gebruik van een krachtige afbeeldingsencoder, een prompt-encoder en een lichtgewicht maskerdecoder. Deze unieke architectuur maakt flexibele prompting, real-time maskerberekening en ambiguïteitsbewustzijn bij segmentatietaken mogelijk.
  • De SA-1B dataset: De SA-1B dataset, geïntroduceerd door het Segment Anything project, bevat meer dan 1 miljard maskers op 11 miljoen afbeeldingen. Het is de grootste segmentatiedataset tot nu toe en biedt SAM een diverse en grootschalige trainingsbron.
  • Nul-opname-prestaties: SAM laat uitstekende nul-opname-prestaties zien bij diverse segmentatietaken, waardoor het een gebruiksklaar hulpmiddel is voor diverse toepassingen met minimale behoefte aan snelle engineering.

Ga voor een diepgaande blik op het Segment Anything Model en de SA-1B dataset naar de Segment Anything website en bekijk het onderzoeksartikel Segment Anything.

Beschikbare modellen, ondersteunde taken en bedrijfsmodi

Deze tabel toont de beschikbare modellen met hun specifieke voorgetrainde gewichten, de taken die ze ondersteunen en hun compatibiliteit met verschillende bedrijfsmodi zoals Inferentie, Validatie, Training en Exporteren, aangegeven met ✅ emoji's voor ondersteunde modi en ❌ emoji's voor niet-ondersteunde modi.

Type model Voorgetrainde gewichten Ondersteunde taken Inferentie Validatie Training Exporteer
SAM basis sam_b.pt Instance segmentatie
SAM groot sam_l.pt Instance segmentatie

Hoe SAM te gebruiken: veelzijdigheid en kracht in beeldsegmentatie

Het Segment Anything Model kan worden gebruikt voor een groot aantal downstream taken die verder gaan dan de trainingsgegevens. Dit omvat randdetectie, het genereren van objectvoorstellen, segmentatie van instanties en het voorspellen van tekst naar masker. Met snelle engineering kan SAM zich snel aanpassen aan nieuwe taken en gegevensdistributies, waardoor het een veelzijdig en krachtig hulpmiddel wordt voor al je beeldsegmentatiebehoeften.

SAM voorspellingsvoorbeeld

Segment met aanwijzingen

Segmenteer de afbeelding met de gegeven aanwijzingen.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Run inference with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

Alles segmenteren

Segmenteer de hele afbeelding.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • De logica hier is om de hele afbeelding te segmenteren als je geen aanwijzingen (bboxen/punten/maskers) doorgeeft.

SAMPredictor voorbeeld

Op deze manier kun je de afbeelding één keer instellen en de inferentie van prompts meerdere keren uitvoeren zonder dat je de afbeeldingsencoder meerdere keren hoeft te draaien.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

Segmenteer alles met extra argumenten.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)

SAM vergelijking vs YOLOv8

Hier vergelijken we Meta's kleinste SAM model, SAM-b, met Ultralytics kleinste segmentatiemodel, YOLOv8n-seg:

Model Maat Parameters Speed (CPU)
Meta's SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40,7 MB 10.1 M 46122 ms/im
FastSAM-s met YOLOv8 ruggengraat 23,7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-seg 6,7 MB (53,4x kleiner) 3,4 M (27,9x minder) 59 ms/im (866x sneller)

Deze vergelijking toont de orde van grootte verschillen in modelgrootte en snelheid tussen de modellen. Hoewel SAM unieke mogelijkheden biedt voor automatisch segmenteren, is het geen directe concurrent voor YOLOv8 segmentmodellen, die kleiner, sneller en efficiënter zijn.

De tests zijn uitgevoerd op een 2023 Apple M2 Macbook met 16 GB RAM. Om deze test te reproduceren:

Voorbeeld

from ultralytics import SAM, YOLO, FastSAM

# Profile SAM-b
model = SAM("sam_b.pt")
model.info()
model("ultralytics/assets")

# Profile MobileSAM
model = SAM("mobile_sam.pt")
model.info()
model("ultralytics/assets")

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model("ultralytics/assets")

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model("ultralytics/assets")

Auto-Annotatie: Een snel pad naar segmentatiedatasets

Auto-annotatie is een belangrijke functie van SAM, waarmee gebruikers een segmentatiedataset kunnen genereren met behulp van een vooraf getraind detectiemodel. Deze functie maakt snelle en nauwkeurige annotatie van een groot aantal afbeeldingen mogelijk, waardoor tijdrovende handmatige labeling overbodig wordt.

Je segmentatiedataset genereren met behulp van een detectiemodel

Om je dataset automatisch te annoteren met het Ultralytics framework, gebruik je het auto_annotate functie zoals hieronder getoond:

Voorbeeld

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
Argument Type Beschrijving Standaard
gegevens str Pad naar een map met afbeeldingen die geannoteerd moeten worden.
det_model str, optioneel Voorgetraind YOLO detectiemodel. Standaard ingesteld op 'yolov8x.pt'. 'yolov8x.pt'
sam_model str, optioneel Voorgetraind SAM segmentatiemodel. Standaard ingesteld op 'sam_b.pt'. sam_b.pt
apparaat str, optioneel Apparaat om de modellen op uit te voeren. Standaard een lege string (CPU of GPU, indien beschikbaar).
uitvoer_dir str, Geen, optioneel Directory om de geannoteerde resultaten op te slaan. Standaard een map 'labels' in dezelfde map als 'gegevens'. Geen

De auto_annotate De functie neemt het pad naar je afbeeldingen, met optionele argumenten voor het specificeren van de voorgetrainde detectie- en SAM segmentatiemodellen, het apparaat om de modellen op uit te voeren en de uitvoermap voor het opslaan van de geannoteerde resultaten.

Auto-annotatie met voorgetrainde modellen kan de tijd en moeite die nodig zijn voor het maken van segmentatiedatasets van hoge kwaliteit drastisch verminderen. Deze functie is vooral gunstig voor onderzoekers en ontwikkelaars die te maken hebben met grote beeldcollecties, omdat ze zich kunnen richten op modelontwikkeling en evaluatie in plaats van handmatige annotatie.

Citaten en Erkenningen

Als je SAM nuttig vindt in je onderzoek of ontwikkelingswerk, overweeg dan om ons artikel te citeren:

@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

We willen graag onze dank uitspreken aan Meta AI voor het maken en onderhouden van deze waardevolle bron voor de computer vision gemeenschap.

FAQ

Wat is het Segment Anything Model (SAM) van Ultralytics?

Het Segment Anything Model (SAM) van Ultralytics is een revolutionair segmentatiemodel voor afbeeldingen, ontworpen voor segmentatietaken met prompts. Het maakt gebruik van een geavanceerde architectuur, inclusief encoders voor afbeeldingen en prompts in combinatie met een lichtgewicht maskerdecoder, om segmentatiemaskers van hoge kwaliteit te genereren uit verschillende prompts, zoals ruimtelijke of tekstuele aanwijzingen. Getraind op de uitgebreide SA-1B dataset, blinkt SAM uit in zero-shot prestaties, waarbij het zich zonder voorkennis aanpast aan nieuwe beeldverdelingen en taken. Lees hier meer.

Hoe kan ik het Segment Anything Model (SAM) gebruiken voor beeldsegmentatie?

Je kunt het Segment Anything Model (SAM) gebruiken voor beeldsegmentatie door inferentie uit te voeren met verschillende aanwijzingen zoals bounding boxes of punten. Hier is een voorbeeld met Python:

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

Als alternatief kun je inferentie uitvoeren met SAM in de opdrachtregelinterface (CLI):

yolo predict model=sam_b.pt source=path/to/image.jpg

Ga voor meer gedetailleerde gebruiksinstructies naar de sectie Segmentatie.

Hoe verhouden SAM en YOLOv8 zich qua prestaties?

Vergeleken met YOLOv8 zijn SAM modellen zoals SAM-b en FastSAM-s groter en langzamer, maar ze bieden unieke mogelijkheden voor automatische segmentatie. Zo is Ultralytics YOLOv8n -seg 53,4 keer kleiner en 866 keer sneller dan SAM-b. Echter, SAM's zero-shot prestaties maakt het zeer flexibel en efficiënt in diverse, ongetrainde taken. Lees hier meer over prestatievergelijkingen tussen SAM en YOLOv8 .

Hoe kan ik mijn dataset auto-annoteren met SAM?

Ultralytics SAM biedt een auto-annotatiefunctie waarmee segmentatiedatasets kunnen worden gegenereerd met behulp van een vooraf getraind detectiemodel. Hier is een voorbeeld in : Python

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")

Deze functie neemt het pad naar je afbeeldingen en optionele argumenten voor voorgetrainde detectie- en SAM segmentatiemodellen, samen met apparaat- en uitvoermapspecificaties. Zie Auto-Annotatie voor een volledige handleiding.

Welke datasets worden gebruikt om het Segment Anything Model (SAM) te trainen?

SAM is getraind op de uitgebreide SA-1B dataset die meer dan 1 miljard maskers op 11 miljoen afbeeldingen bevat. SA-1B is de grootste segmentatiedataset tot nu toe en biedt hoogwaardige en diverse trainingsgegevens, waardoor indrukwekkende nul-op-de-meter prestaties in gevarieerde segmentatietaken worden gegarandeerd. Ga voor meer informatie naar de sectie Dataset.


Deze FAQ is bedoeld om veelvoorkomende vragen over het Segment Anything Model (SAM) van Ultralytics te beantwoorden, zodat gebruikers het beter begrijpen en de producten Ultralytics effectiever kunnen worden gebruikt. Ga voor aanvullende informatie naar de relevante secties waarnaar overal wordt verwezen.



Aangemaakt 2023-11-12, Bijgewerkt 2024-07-04
Auteurs: glenn-jocher (15), Burhan-Q (1), ChaoningZhang (1), Laughing-q (1)

Reacties