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 modello, un compito e un set di dati inediti per la segmentazione delle immagini.

SAMIl design avanzato di gli consente di adattarsi a nuove distribuzioni di immagini e a nuovi compiti senza alcuna conoscenza preliminare, una caratteristica nota come trasferimento a zero scatti. Addestrato sull'ampio 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. Immagini del dataset sovrapposte alle 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 per 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 indizi spaziali o testuali che identificano un oggetto.
  • Architettura avanzata: Il Segment Anything Model impiega un potente codificatore di immagini, un codificatore di richieste e un leggero decodificatore di maschere. Questa architettura unica consente una richiesta flessibile, il calcolo della maschera in tempo reale e la consapevolezza dell'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 finora esistente, fornisce a SAM una fonte di dati di addestramento diversificata e su larga scala.
  • Prestazioni a zero scatti: SAM offre prestazioni eccezionali a zero scatti in varie 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, visitate il sito web di Segment Anything e consultate 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, Addestramento 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 delle istanze
SAM grande sam_l.pt Segmentazione delle istanze

Come utilizzare SAM: Versatilità e potenza nella segmentazione delle immagini

Il modello Segment Anything può essere utilizzato per una moltitudine di compiti a valle che vanno oltre i dati di addestramento. Ciò include il rilevamento dei bordi, la generazione di proposte di oggetti, la segmentazione di istanze e la predizione preliminare del testo da maschera a maschera. Grazie a una rapida ingegnerizzazione, SAM è in grado di adattarsi rapidamente a nuovi compiti e distribuzioni di dati in modo immediato, affermandosi come uno strumento versatile e potente per tutte le esigenze di segmentazione delle immagini.

SAM esempio di previsione

Segmento con suggerimenti

Segmentare l'immagine con le indicazioni date.

from ultralytics import SAM

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

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

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

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Segmentare tutto

Segmentare 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 è possibile impostare l'immagine una sola volta ed eseguire più volte l'inferenza dei prompt 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])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[[1, 1]])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

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

Nota

Tutti i dati restituiti results negli esempi precedenti sono Risultati che consente di accedere facilmente alle maschere previste e all'immagine di partenza.

SAM confronto vs YOLOv8

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

Modello Dimensione
(MB)
Parametri
(M)
Velocità (CPU)
(ms/im)
Meta SAM-b 358 94.7 51096
MobileSAM 40.7 10.1 46122
FastSAM-s con dorsale YOLOv8 23.7 11.8 115
Ultralytics YOLOv8n-Seg 6,7 (53,4 volte più piccolo) 3,4 (27,9x in meno) 59 (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 16 GB di RAM. Per riprodurre questo test:

Esempio

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)

Annotazione automatica: Un percorso rapido per i set di dati di segmentazione

L'annotazione automatica è 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 l'etichettatura manuale che richiede molto tempo.

Generare il set di dati di segmentazione utilizzando un modello di rilevamento

Per autoanalizzare il set di dati con il framework Ultralytics , utilizzare il metodo auto_annotate come mostrato di seguito:

Esempio

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argomento Tipo Descrizione Predefinito
data str Percorso di una cartella contenente le immagini da annotare.
det_model str, opzionale Modello di rilevamento preaddestrato YOLO . Si imposta come predefinito su 'yolo11x.pt'. 'yolo11x.pt'
sam_model str, opzionale Modello di segmentazione preaddestrato di SAM . Valore predefinito: 'sam_b.pt'. 'sam_b.pt'
device str, opzionale Dispositivo su cui eseguire i modelli. Il valore predefinito è una stringa vuota (CPU o GPU, se disponibili).
conf float, opzionale Soglia di fiducia per il modello di rilevamento; l'impostazione predefinita è 0,25. 0.25
iou float, opzionale Soglia IoU per il filtraggio delle caselle sovrapposte nei risultati del rilevamento; l'impostazione predefinita è 0,45. 0.45
imgsz int, opzionale Dimensione di ridimensionamento dell'immagine in ingresso; il valore predefinito è 640. 640
max_det int, opzionale Limita i rilevamenti per immagine per controllare le uscite in scene dense. 300
classes list, opzionale Filtra le previsioni in base agli ID di classe specificati, restituendo solo i rilevamenti rilevanti. None
output_dir str, Nessuno, opzionale Cartella in cui salvare i risultati annotati. La cartella predefinita è 'labels' nella stessa directory di 'data'. None

Il auto_annotate riceve il percorso delle immagini, con argomenti opzionali per specificare i modelli di rilevamento e di segmentazione preaddestrati 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 consente loro di concentrarsi sullo sviluppo e sulla valutazione dei modelli piuttosto che sull'annotazione manuale.

Citazioni e ringraziamenti

Se trovate utile il sito SAM nel vostro lavoro di ricerca o di sviluppo, vi invitiamo a citare il nostro documento:

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

FAQ

Che cos'è il Segment Anything Model (SAM) di Ultralytics?

Il Segment Anything Model (SAM) di Ultralytics è un modello rivoluzionario di segmentazione delle immagini progettato per attività di segmentazione su richiesta. Sfrutta un'architettura avanzata, che comprende codificatori di immagini e suggerimenti combinati con un decodificatore di maschere leggero, per generare maschere di segmentazione di alta qualità a partire da vari suggerimenti, come spunti spaziali o testuali. Addestrato sull'ampio set di dati SA-1B, SAM eccelle nelle prestazioni a colpo zero, adattandosi a nuove distribuzioni di immagini e compiti senza alcuna conoscenza preliminare. Per saperne di più , cliccate qui.

Come si può utilizzare il Segment Anything Model (SAM) per la segmentazione delle immagini?

È possibile utilizzare il Segment Anything Model (SAM) per la segmentazione delle immagini, eseguendo l'inferenza con vari prompt, come bounding box o punti. Ecco un esempio che utilizza 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])

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

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

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

In alternativa, è possibile eseguire l'inferenza con SAM nell'interfaccia a riga di comando (CLI):

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

Per istruzioni d'uso più dettagliate, visitate la sezione Segmentazione.

Come si comportano SAM e YOLOv8 in termini di prestazioni?

Rispetto a YOLOv8, i modelli SAM come SAM-b e FastSAM-s sono più grandi e più lenti, ma offrono capacità uniche per la segmentazione automatica. Ad esempio, Ultralytics YOLOv8n -seg è 53,4 volte più piccolo e 866 volte più veloce di SAM-b. Tuttavia, le prestazioni a zero scatti di SAM lo rendono altamente flessibile ed efficiente in compiti diversi e non addestrati. Per saperne di più sul confronto delle prestazioni tra SAM e YOLOv8 , cliccate qui.

Come posso autoanalizzare il mio set di dati utilizzando SAM?

Ultralytics'SAM offre una funzione di auto-annotazione che consente di generare insiemi di dati di segmentazione utilizzando un modello di rilevamento pre-addestrato. Ecco un esempio in Python:

from ultralytics.data.annotator import auto_annotate

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

Questa funzione accetta il percorso delle immagini e gli argomenti opzionali per i modelli di rilevamento e di segmentazione preaddestrati SAM , oltre alle specifiche del dispositivo e della directory di output. Per una guida completa, vedere Annotazione automatica.

Quali dataset vengono utilizzati per addestrare il Segment Anything Model (SAM)?

SAM è addestrato sull'ampio set di dati SA-1B, che comprende oltre 1 miliardo di maschere su 11 milioni di immagini. SA-1B è il più grande set di dati di segmentazione finora esistente e fornisce dati di addestramento di alta qualità e diversificati, garantendo prestazioni impressionanti a colpo zero in diversi compiti di segmentazione. Per maggiori dettagli, visitate la sezione Dataset.

📅C reato 1 anno fa ✏️ Aggiornato 19 giorni fa

Commenti