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.

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: Voor de objectvoorsteltaak 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
ann = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
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
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, 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.

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
  1. Maak en activeer een Conda-omgeving met Python 3.9:
conda create -n FastSAM python=3.9
conda activate FastSAM
  1. Navigeer naar de gekloonde repository en installeer de vereiste pakketten:
cd FastSAM
pip install -r requirements.txt
  1. 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.



Aangemaakt 2023-11-12, Bijgewerkt 2024-05-01
Auteurs: RizwanMunawar (1), glenn-jocher (8), Laughing-q (1), berry-ding (1)

Reacties