Overslaan naar inhoud

Snel Segment Anything Model (FastSAM)

Het Fast Segment Anything Model (FastSAM) is een nieuwe, real-time CNN-gebaseerde oplossing voor de Segment Anything taak. Deze taak is ontworpen om elk object in een afbeelding te segmenteren op basis van verschillende mogelijke gebruikersinteractie-aanwijzingen. FastSAM vermindert de rekenkracht aanzienlijk met behoud van concurrerende prestaties, waardoor het een praktische keuze is voor een verscheidenheid aan vision-taken.



Kijken: Objecten volgen met FastSAM met Ultralytics

Model Architectuur

Overzicht architectuur Fast Segment Anything Model (FastSAM)

Overzicht

FastSAM is ontworpen om de beperkingen van het Segment Anything Model (SAM) aan te pakken, een zwaar Transformer-model dat veel rekenkracht vergt. De FastSAM ontkoppelt de segmentatie-alles taak in twee opeenvolgende fasen: segmentatie van alle instanties en prompt-gestuurde selectie. De eerste fase gebruikt YOLOv8-seg om de segmentatiemaskers van alle instanties in de afbeelding te produceren. In de tweede fase wordt het interessegebied uitgevoerd dat overeenkomt met de prompt.

Belangrijkste kenmerken

  1. Realtime oplossing: Door gebruik te maken van de rekenefficiëntie van CNN's biedt FastSAM een real-time oplossing voor de segment-om het even welke taak, waardoor het waardevol is voor industriële toepassingen die snelle resultaten vereisen.

  2. Efficiëntie en prestaties: FastSAM biedt een aanzienlijke vermindering van de benodigde rekenkracht en hulpmiddelen zonder afbreuk te doen aan de kwaliteit van de prestaties. Het haalt vergelijkbare prestaties als SAM maar met drastisch gereduceerde rekenkracht, waardoor real-time toepassingen mogelijk zijn.

  3. Segmentatie op basis van prompt: FastSAM kan elk object in een afbeelding segmenteren op basis van verschillende mogelijke gebruikersinteracties, wat flexibiliteit en aanpassingsvermogen biedt in verschillende scenario's.

  4. Gebaseerd op YOLOv8 -seg: FastSAM is gebaseerd op YOLOv8-seg, een objectdetector die is uitgerust met een segmentatietak voor instanties. Hierdoor kan het effectief de segmentatiemaskers van alle instanties in een afbeelding produceren.

  5. Concurrerende resultaten op benchmarks: Op de taak voor het voorstellen van objecten op MS COCO behaalt FastSAM hoge scores met een aanzienlijk hogere snelheid dan SAM op een enkele NVIDIA RTX 3090, wat de efficiëntie en mogelijkheden aantoont.

  6. Praktische toepassingen: De voorgestelde benadering biedt een nieuwe, praktische oplossing voor een groot aantal vision-taken met een echt hoge snelheid, tientallen of honderden keren sneller dan de huidige methoden.

  7. Haalbaarheid van modelcompressie: FastSAM toont de haalbaarheid aan van een pad dat de rekeninspanning aanzienlijk kan verminderen door een kunstmatige voorafgaande structuur te introduceren, waardoor nieuwe mogelijkheden ontstaan voor de architectuur van grote modellen voor algemene vision-taken.

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
FastSAM-s FastSAM-s.pt Instance segmentatie ✅ ❌ ❌ ✅
FastSAM-x FastSAM-x.pt Instance segmentatie ✅ ❌ ❌ ✅

Voorbeelden

De FastSAM modellen zijn eenvoudig te integreren in je Python applicaties. Ultralytics biedt gebruiksvriendelijke Python API en CLI commando's om de ontwikkeling te stroomlijnen.

Gebruik voorspellen

Om objectdetectie op een afbeelding uit te voeren, gebruik je de optie predict methode zoals hieronder getoond:

Voorbeeld

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
results = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
results = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
results = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
results = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=results, output="./")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

Dit fragment laat de eenvoud zien van het laden van een voorgetraind model en het uitvoeren van een voorspelling op een afbeelding.

Opmerking

Alle geretourneerde results in bovenstaande voorbeelden zijn Resultaten object dat gemakkelijk toegang geeft tot voorspelde maskers en bronafbeelding.

Val Gebruik

Validatie van het model op een dataset kan als volgt worden gedaan:

Voorbeeld

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640

Merk op dat FastSAM alleen detectie en segmentatie van een enkele objectklasse ondersteunt. Dit betekent dat het alle objecten zal herkennen en segmenteren als dezelfde klasse. Daarom moet je bij het voorbereiden van de dataset alle objectcategorie-ID's converteren naar 0.

Spoorgebruik

Gebruik de optie track methode zoals hieronder getoond:

Voorbeeld

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)
yolo segment track model=FastSAM-s.pt source="path/to/video/file.mp4" imgsz=640

FastSAM officieel gebruik

FastSAM is ook direct beschikbaar vanuit de https://github.com/CASIA-IVA-Lab/FastSAM repository. Hier volgt een kort overzicht van de typische stappen die je zou kunnen nemen om FastSAM te gebruiken:

Installatie

  1. Kloon de FastSAM repository:

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
    
  2. Maak en activeer een Conda-omgeving met Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navigeer naar de gekloonde repository en installeer de vereiste pakketten:

    cd FastSAM
    pip install -r requirements.txt
    
  4. Installeer het CLIP-model:

    pip install git+https://github.com/ultralytics/CLIP.git
    

Voorbeeldgebruik

  1. Download een modelcontrolepunt.

  2. Gebruik FastSAM voor inferentie. Voorbeeldopdrachten:

    • Segmenteer alles in een afbeelding:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmenteer specifieke objecten met behulp van tekstaanwijzingen:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmenteer objecten binnen een bounding box (geef boxcoördinaten in xywh formaat):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
      
    • Objecten segmenteren in de buurt van specifieke punten:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
      

Daarnaast kun je FastSAM uitproberen via een Colab demo of op de HuggingFace webdemo voor een visuele ervaring.

Citaten en Erkenningen

We willen graag de FastSAM auteurs bedanken voor hun belangrijke bijdragen op het gebied van real-time segmentatie van instanties:

@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Het oorspronkelijke FastSAM artikel is te vinden op arXiv. De auteurs hebben hun werk openbaar gemaakt en de codebase is toegankelijk op GitHub. We waarderen hun inspanningen om het veld vooruit te helpen en hun werk toegankelijk te maken voor de bredere gemeenschap.

FAQ

Wat is FastSAM en waarin verschilt het van SAM?

FastSAM, kort voor Fast Segment Anything Model, is een op een convolutioneel neuraal netwerk (CNN) gebaseerde oplossing in realtime die is ontworpen om de benodigde rekenkracht te verminderen met behoud van hoge prestaties bij objectsegmentatietaken. In tegenstelling tot het Segment Anything Model (SAM), dat een zwaardere op Transformer gebaseerde architectuur gebruikt, maakt FastSAM gebruik van Ultralytics YOLOv8 -seg voor efficiënte segmentatie van instanties in twee fasen: segmentatie van alle instanties gevolgd door selectie op verzoek.

Hoe bereikt FastSAM realtime segmentatieprestaties?

FastSAM bereikt realtime segmentatie door de segmentatietaak te ontkoppelen in all-instance segmentatie met YOLOv8-seg en prompt-geleide selectiefasen. Door gebruik te maken van de rekenefficiëntie van CNN's, biedt FastSAM een aanzienlijke vermindering van de benodigde rekenkracht en middelen met behoud van concurrerende prestaties. Deze tweefasenaanpak stelt FastSAM in staat om snelle en efficiënte segmentatie te leveren die geschikt is voor toepassingen die snelle resultaten vereisen.

Wat zijn de praktische toepassingen van FastSAM?

FastSAM is praktisch voor een verscheidenheid aan computer vision-taken die realtime segmentatieprestaties vereisen. Toepassingen zijn onder andere:

  • Industriële automatisering voor kwaliteitscontrole en -borging
  • Real-time videoanalyse voor beveiliging en bewaking
  • Autonome voertuigen voor objectdetectie en segmentatie
  • Medische beeldvorming voor nauwkeurige en snelle segmentatietaken

Het vermogen om om te gaan met verschillende gebruikersinteracties maakt FastSAM aanpasbaar en flexibel voor diverse scenario's.

Hoe gebruik ik het FastSAM model voor inferentie in Python?

Om FastSAM te gebruiken voor inferentie in Python kun je het onderstaande voorbeeld volgen:

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
ann = prompt_process.everything_prompt()

# Bounding box prompt
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
ann = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output="./")

Kijk voor meer informatie over inferentiemethoden in het gedeelte Voorspellen van gebruik in de documentatie.

Welke typen aanwijzingen ondersteunt FastSAM voor segmentatietaken?

FastSAM ondersteunt meerdere typen aanwijzingen om de segmentatietaken te begeleiden:

  • Alles Prompt: Genereert segmentatie voor alle zichtbare objecten.
  • Bounding Box (BBox) Prompt: Segmenteert objecten binnen een gespecificeerde begrenzende box.
  • Tekst Prompt: Gebruikt een beschrijvende tekst om objecten te segmenteren die overeenkomen met de beschrijving.
  • Punt Prompt: Segmenteert objecten in de buurt van specifieke, door de gebruiker gedefinieerde punten.

Door deze flexibiliteit kan FastSAM zich aanpassen aan een groot aantal interactiescenario's met gebruikers, waardoor het gebruik in verschillende toepassingen wordt verbeterd. Meer informatie over het gebruik van deze aanwijzingen vind je in de sectie Belangrijke functies.



Aangemaakt 2023-11-12, Bijgewerkt 2024-07-18
Auteurs: Lachen-q (2), glenn-jocher (13), RizwanMunawar (2), berry-ding (1)

Reacties