Vai al contenuto

Modello Segment Anything (SAM)

Benvenuti alla frontiera della segmentazione delle immagini con il Segment Anything Model, o SAM. Questo modello rivoluzionario ha cambiato le carte in tavola introducendo la segmentazione delle immagini in tempo reale, stabilendo nuovi standard nel settore.

Introduzione a SAM: Il modello Segment Anything

Il Segment Anything Model, o SAM, è un modello di segmentazione delle immagini all'avanguardia che consente una segmentazione puntuale, offrendo una versatilità senza precedenti nelle attività di analisi delle immagini. SAM costituisce il cuore dell'iniziativa Segment Anything, un progetto innovativo che introduce un nuovo modello, un'attività e un set di dati per la segmentazione delle immagini.

SAMIl design avanzato di gli permette di adattarsi a nuove distribuzioni di immagini e a nuovi compiti senza alcuna conoscenza preliminare, una caratteristica nota come trasferimento a zero scatti. Addestrato sul vasto set di dati SA-1B, che contiene più di 1 miliardo di maschere distribuite su 11 milioni di immagini accuratamente curate, SAM ha mostrato prestazioni impressionanti a scatto zero, superando in molti casi i precedenti risultati completamente supervisionati.

Immagine campione del set di dati SA-1B Immagini di esempio. Le immagini del dataset sovrappongono le maschere del nuovo dataset SA-1B. SA-1B contiene 11 milioni di immagini diverse, ad alta risoluzione, autorizzate e protette dalla privacy e 1,1 miliardi di maschere di segmentazione di alta qualità. Queste maschere sono state annotate in modo completamente automatico da SAM e, come verificato dalle valutazioni umane e da numerosi esperimenti, sono di alta qualità e diversità. Le immagini sono raggruppate in base al numero di maschere per immagine ai fini della visualizzazione (in media ci sono ∼100 maschere per immagine).

Caratteristiche principali del modello Segment Anything (SAM)

  • Compito di segmentazione su richiesta: SAM è stato progettato con un compito di segmentazione su richiesta, che gli consente di generare maschere di segmentazione valide a partire da qualsiasi richiesta, come ad esempio indizi spaziali o testuali che identificano un oggetto.
  • Architettura avanzata: Il Segment Anything Model impiega un potente codificatore di immagini, un codificatore di messaggi e un leggero decodificatore di maschere. Questa architettura unica permette di ricevere messaggi flessibili, di calcolare le maschere in tempo reale e di conoscere le ambiguità nei compiti di segmentazione.
  • Il set di dati SA-1B: Introdotto dal progetto Segment Anything, il dataset SA-1B presenta oltre 1 miliardo di maschere su 11 milioni di immagini. Essendo il più grande dataset di segmentazione fino ad oggi, fornisce a SAM una fonte di dati di addestramento diversificata e su larga scala.
  • Prestazioni a zero scatti: SAM mostra prestazioni eccezionali a zero scatti in diverse attività di segmentazione, rendendolo uno strumento pronto all'uso per diverse applicazioni con una necessità minima di progettazione immediata.

Per un approfondimento sul modello Segment Anything e sul set di dati SA-1B, visita il sito web di Segment Anything e consulta il documento di ricerca Segment Anything.

Modelli disponibili, attività supportate e modalità operative

Questa tabella presenta i modelli disponibili con i loro pesi specifici pre-addestrati, i compiti che supportano e la loro compatibilità con diverse modalità operative come Inferenza, Convalida, Formazione ed Esportazione, indicate da ✅ emoji per le modalità supportate e ❌ emoji per le modalità non supportate.

Tipo di modello Pesi pre-addestrati Attività supportate Inferenza Convalida Formazione Esportazione
SAM base sam_b.pt Segmentazione dell'istanza
SAM grande sam_l.pt Segmentazione dell'istanza

Come usare SAM: versatilità e potenza nella segmentazione delle immagini

Il Segment Anything Model può essere utilizzato per una moltitudine di attività a valle che vanno oltre i dati di addestramento. Tra questi, il rilevamento dei bordi, la generazione di proposte di oggetti, la segmentazione di istanze e la predizione preliminare da testo a maschera. Grazie a una rapida ingegnerizzazione, SAM può adattarsi rapidamente a nuove attività e distribuzioni di dati in modo immediato, diventando uno strumento versatile e potente per tutte le esigenze di segmentazione delle immagini.

SAM Esempio di previsione

Segmento con suggerimenti

Segmenta l'immagine con le indicazioni fornite.

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])

Segmenta tutto

Segmenta l'intera immagine.

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
  • La logica è quella di segmentare l'intera immagine se non si passa alcun prompt (bbox/punti/maschere).

Esempio di SAMPredictor

In questo modo puoi impostare l'immagine una volta sola ed eseguire l'inferenza dei prompt più volte senza dover eseguire più volte il codificatore di immagini.

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()

Segmenta tutto con argomenti aggiuntivi.

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 confronto vs YOLOv8

Qui confrontiamo il modello più piccolo di Meta SAM , SAM-b, con il modello di segmentazione più piccolo di Ultralytics , YOLOv8n-seg:

Modello Dimensioni Parametri Velocità (CPU)
SAM-b di Meta 358 MB 94.7 M 51096 ms/im
MobileSAM 40,7 MB 10.1 M 46122 ms/im
FastSAM-s con YOLOv8 backbone 23,7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-Seg 6,7 MB (53,4 volte più piccolo) 3,4 M (27,9 volte in meno) 59 ms/im (866x più veloce)

Questo confronto mostra le differenze di ordine di grandezza nelle dimensioni e nelle velocità dei modelli. Sebbene SAM presenti capacità uniche per la segmentazione automatica, non è un concorrente diretto dei modelli di segmentazione di YOLOv8 , che sono più piccoli, più veloci e più efficienti.

I test sono stati eseguiti su un Macbook Apple M2 2023 con 16GB di RAM. Per riprodurre questo test:

Esempio

from ultralytics import FastSAM, SAM, YOLO

# 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')

Annotazione automatica: Un percorso rapido per i dataset di segmentazione

L'auto-annotazione è una caratteristica fondamentale di SAM, che consente agli utenti di generare un set di dati di segmentazione utilizzando un modello di rilevamento pre-addestrato. Questa funzione consente un'annotazione rapida e accurata di un gran numero di immagini, evitando la necessità di un'etichettatura manuale che richiede molto tempo.

Genera il tuo set di dati per la segmentazione usando un modello di rilevamento

Per auto-analizzare il tuo set di dati con il framework Ultralytics , usa il framework auto_annotate come mostrato di seguito:

Esempio

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model='sam_b.pt')
Argomento Tipo Descrizione Predefinito
dati str Percorso di una cartella contenente le immagini da annotare.
det_model str, opzionale Modello di rilevamento di YOLO pre-addestrato. Il valore predefinito è 'yolov8x.pt'. 'yolov8x.pt'
sam_modello str, opzionale Modello di segmentazione di SAM pre-addestrato. Il valore predefinito è 'sam_b.pt'. 'sam_b.pt'
dispositivo str, opzionale Dispositivo su cui eseguire i modelli. Il valore predefinito è una stringa vuota (CPU o GPU, se disponibile).
directory_uscita str, Nessuno, opzionale Cartella in cui salvare i risultati annotati. La cartella predefinita è "labels" nella stessa directory di "data". Nessuno

Il auto_annotate riceve il percorso delle immagini, con argomenti opzionali per specificare i modelli di rilevamento e di segmentazione preaddestrati di SAM , il dispositivo su cui eseguire i modelli e la directory di output per salvare i risultati annotati.

L'annotazione automatica con modelli pre-addestrati può ridurre drasticamente il tempo e l'impegno necessari per creare set di dati di segmentazione di alta qualità. Questa funzione è particolarmente vantaggiosa per i ricercatori e gli sviluppatori che hanno a che fare con grandi collezioni di immagini, in quanto permette loro di concentrarsi sullo sviluppo e sulla valutazione dei modelli piuttosto che sull'annotazione manuale.

Citazioni e ringraziamenti

Se trovi utile SAM nel tuo lavoro di ricerca o sviluppo, ti invitiamo a citare il nostro articolo:

@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}
}

Desideriamo esprimere la nostra gratitudine a Meta AI per aver creato e mantenuto questa preziosa risorsa per la comunità della computer vision.

Parole chiave: Segment Anything, Segment Anything Model, SAM, Meta SAM, segmentazione di immagini, segmentazione a comando, prestazioni a scatto zero, set di dati SA-1B, architettura avanzata, auto-annotazione, Ultralytics, modelli pre-addestrati, SAM base, SAM grande, segmentazione di istanze, computer vision, AI, intelligenza artificiale, apprendimento automatico, annotazione di dati, maschere di segmentazione, modello di rilevamento, YOLO modello di rilevamento, bibtex, Meta AI.



Creato 2023-11-12, Aggiornato 2024-04-17
Autori: glenn-jocher (10), ChaoningZhang (1), Laughing-q (1)

Commenti