Ultralytics YOLO27:
Get Started

Modello Segment Anything (SAM)#

Evoluzione di SAM

Questo è il modello SAM originale di Meta. Per funzionalità avanzate, consulta SAM 2 per la segmentazione video oppure SAM 3 per la Segmentazione di concetti basata su prompt con prompt esemplificativi di testo e immagini.

How to use Segment Anything In Colab

Ti diamo il benvenuto all'avanguardia della segmentazione delle immagini con il Modello Segment Anything, o SAM. Questo modello rivoluzionario ha cambiato le regole del gioco introducendo la segmentazione delle immagini basata su prompt con prestazioni in tempo reale, stabilendo nuovi standard nel settore.

Introduzione a SAM: il Modello Segment Anything#

Il Modello Segment Anything, o SAM, è un modello di segmentazione delle immagini all'avanguardia che consente la segmentazione basata su prompt e offre una versatilità senza pari nelle attività di analisi delle immagini. SAM è il cuore dell'iniziativa Segment Anything, un progetto innovativo che introduce un nuovo modello, un'attività e un dataset per la segmentazione delle immagini.

Il design avanzato di SAM gli consente di adattarsi a nuove distribuzioni di immagini e attività senza conoscenze pregresse, una caratteristica nota come trasferimento zero-shot. Addestrato sull'ampio dataset SA-1B, che contiene oltre 1 miliardo di maschere distribuite su 11 milioni di immagini accuratamente selezionate, SAM ha dimostrato prestazioni zero-shot notevoli, superando in molti casi i risultati precedenti ottenuti con supervisione completa.

Esempio del dataset SA-1B con maschere di segmentazione automatica Immagini di esempio SA-1B. Maschere sovrapposte alle immagini del dataset SA-1B, appena introdotto. SA-1B contiene 11M di immagini diversificate, ad alta risoluzione, con licenza e rispettose della privacy, e 1,1B di maschere di segmentazione di alta qualità. SAM ha annotato queste maschere in modo completamente automatico e, come dimostrato dalle valutazioni umane e da numerosi esperimenti, sono di alta qualità e varietà. Per la visualizzazione, le immagini sono raggruppate in base al numero di maschere per immagine (in media, ∼100 maschere per immagine).

Caratteristiche principali del Modello Segment Anything (SAM)#

  • Attività di segmentazione basata su prompt: SAM è stato progettato per un'attività di segmentazione basata su prompt e può generare maschere di segmentazione valide a partire da qualsiasi prompt, ad esempio indizi spaziali o testuali che identificano un oggetto.
  • Architettura avanzata: Il Modello Segment Anything utilizza un potente encoder di immagini, un encoder di prompt e un decoder di maschere leggero. Questa architettura esclusiva consente di fornire prompt in modo flessibile, calcolare maschere in tempo reale e gestire le ambiguità nelle attività di segmentazione.
  • Il dataset SA-1B: Introdotto dal progetto Segment Anything, il dataset SA-1B comprende oltre 1 miliardo di maschere su 11 milioni di immagini. È il più grande dataset di segmentazione disponibile finora e fornisce a SAM una fonte di dati di addestramento ampia e diversificata.
  • Prestazioni zero-shot: SAM mostra prestazioni zero-shot eccezionali in varie attività di segmentazione ed è quindi pronto all'uso per applicazioni diverse, con un'esigenza minima di prompt engineering.

Per un approfondimento sul Modello Segment Anything e sul dataset SA-1B, visita Segment Anything su GitHub e leggi l'articolo di ricerca Segment Anything.

SAM sulla piattaforma Ultralytics

SAM alimenta la funzionalità di annotazione intelligente sulla piattaforma Ultralytics, che consente di creare maschere intelligenti con un clic per etichettare rapidamente i dataset. Per i dettagli, consulta la guida all'annotazione.

Modelli disponibili, attività supportate e modalità operative#

Questa tabella presenta i modelli disponibili con i rispettivi pesi preaddestrati, le attività supportate e la compatibilità con le diverse modalità operative, come Inferenza, Validazione, Addestramento ed Esportazione. Le emoji ✅ indicano le modalità supportate e le emoji ❌ quelle non supportate.

Tipo di modelloPesi preaddestratiAttività supportateAddestramentoValidazioneInferenzaEsporta
SAM basesam_b.ptSegmentazione di istanze❌❌✅❌
SAM largesam_l.ptSegmentazione di istanze❌❌✅❌

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

Il Modello Segment Anything può essere utilizzato per numerose attività a valle che vanno oltre i dati di addestramento. Tra queste rientrano il rilevamento dei bordi, la generazione di proposte di oggetti, la segmentazione di istanze e la previsione preliminare di maschere a partire da testo. Grazie al prompt engineering, SAM può adattarsi rapidamente a nuove attività e distribuzioni di dati in modalità zero-shot, diventando così uno strumento versatile e potente per tutte le tue esigenze di segmentazione delle immagini.

Esempio di predizione con SAM#

Segmenta con i prompt

Segmenta l'immagine usando i prompt forniti.

from ultralytics import SAM

# Carica un modello
model = SAM("sam_b.pt")

# Visualizza le informazioni sul modello (facoltativo)
model.info()

# Esegui l'inferenza con il prompt dei riquadri di delimitazione
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Esegui l'inferenza con un singolo punto
results = model(points=[900, 370], labels=[1])

# Esegui l'inferenza con più punti
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Esegui l'inferenza con il prompt a più punti per oggetto
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Esegui l'inferenza con il prompt dei punti negativi
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Segmenta tutto

Segmenta l'intera immagine.

from ultralytics import SAM

# Carica un modello
model = SAM("sam_b.pt")

# Visualizza le informazioni sul modello (facoltativo)
model.info()

# Esegui l'inferenza
model("path/to/image.jpg")
  • La logica è segmentare l'intera immagine se non passi alcun prompt (bboxes/points/masks).
Esempio di SAMPredictor

In questo modo puoi impostare l'immagine una sola volta ed eseguire l'inferenza con più prompt senza eseguire più volte l'encoder di immagini.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Crea SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Imposta l'immagine
predictor.set_image("ultralytics/assets/zidane.jpg")  # imposta con un file immagine
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # imposta con np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Esegui l'inferenza con un prompt a punto singolo
results = predictor(points=[900, 370], labels=[1])

# Esegui l'inferenza con un prompt a più punti
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Esegui l'inferenza con il prompt dei punti negativi
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reimposta l'immagine
predictor.reset_image()

Segmenta tutto con argomenti aggiuntivi.

from ultralytics.models.sam import Predictor as SAMPredictor

# Crea SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Segmenta con argomenti aggiuntivi
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)
Nota

Tutti gli oggetti results restituiti negli esempi precedenti sono oggetti Results, che consentono di accedere facilmente alle maschere predette e all'immagine sorgente.

Confronto tra SAM e YOLO#

Qui confrontiamo il modello SAM-b di Meta con i modelli di segmentazione Ultralytics, incluso YOLO26n-seg:

ModelloDimensione
(MB)
Parametri
(M)
Velocità (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s con backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (52.8x più piccolo)3.4 (27.6x in meno)24.8 (1682x più veloce)
Ultralytics YOLO11n-seg6.2 (60.5x più piccolo)2.9 (32.3x in meno)24.3 (1716x più veloce)
Ultralytics YOLO26n-seg6.7 (56.0x più piccolo)2.7 (34.7x in meno)25.2 (1655x più veloce)

Questo confronto evidenzia le notevoli differenze nelle dimensioni e nella velocità dei modelli tra le varianti SAM e i modelli di segmentazione YOLO. Sebbene SAM offra capacità uniche di segmentazione automatica, i modelli YOLO, in particolare YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.

Le velocità di SAM sono state misurate con PyTorch, quelle di YOLO con ONNX Runtime. I test sono stati eseguiti su un Apple M4 Air del 2025 con 16 GB di RAM usando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Per riprodurre questo test:

Esempio
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Confronta le prestazioni di SAM-b e MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

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

# Profila i modelli YOLO (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True, nms=False)  # Head senza NMS di YOLO26; non fa nulla per YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Annotazione automatica: un percorso rapido verso i dataset di segmentazione#

L'annotazione automatica è una funzionalità chiave di SAM, che consente agli utenti di generare un dataset di segmentazione usando un modello di rilevamento preaddestrato. Questa funzionalità permette di annotare rapidamente e con precisione un gran numero di immagini, evitando la necessità di un'etichettatura manuale dispendiosa in termini di tempo.

Genera il tuo dataset di segmentazione usando un modello di rilevamento#

Per annotare automaticamente il tuo dataset con il framework Ultralytics, usa la funzione auto_annotate come mostrato di seguito:

Esempio
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgomentoTipoPredefinitoDescrizione
datastrobbligatorioPercorso della directory contenente le immagini di destinazione da annotare o segmentare.
det_modelstr'yolo26x.pt'Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti.
sam_modelstr'sam_b.pt'Percorso del modello SAM per la segmentazione (supporta i pesi di SAM, SAM 2, MobileSAM e SAM 3).
devicestr''Dispositivo di calcolo (ad es. 'cuda:0', 'cpu' o '' per il rilevamento automatico del dispositivo).
conffloat0.25Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli.
ioufloat0.45Soglia IoU per la soppressione non massima, usata per filtrare i riquadri sovrapposti.
imgszint640Dimensione di input per ridimensionare le immagini (arrotondata al multiplo di 32 più vicino per eccesso, se necessario).
max_detint300Numero massimo di rilevamenti per immagine per ottimizzare l'uso della memoria.
classeslist[int]NoneElenco degli indici delle classi da rilevare (ad es. [0, 1] per persona e bicicletta).
output_dirstrNoneDirectory in cui salvare le annotazioni (per impostazione predefinita: directory sorella di <data>_auto_annotate_labels).

La funzione auto_annotate accetta il percorso delle immagini e argomenti facoltativi per specificare i modelli di rilevamento preaddestrato e di segmentazione SAM, il dispositivo su cui eseguirli e la directory di output in cui salvare i risultati annotati.

L'annotazione automatica con modelli preaddestrati può ridurre drasticamente il tempo e il lavoro necessari per creare dataset di segmentazione di alta qualità. Questa funzionalità è particolarmente utile per ricercatori e sviluppatori che gestiscono grandi raccolte di immagini, perché consente loro di concentrarsi sullo sviluppo e sulla valutazione dei modelli anziché sull'annotazione manuale.

Citazioni e ringraziamenti#

Se SAM ti è utile nel tuo lavoro di ricerca o sviluppo, valuta la possibilità di citare l'articolo:

Citazione
@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 ringraziare Meta AI per aver creato e mantenuto questa preziosa risorsa per la comunità della visione artificiale.

Domande frequenti#

  • Il Modello Segment Anything (SAM) di Meta è un modello rivoluzionario di segmentazione delle immagini progettato per attività di segmentazione basate su prompt. Sfrutta un'architettura avanzata, che combina encoder di immagini e di prompt con un decoder di maschere leggero, per generare maschere di segmentazione di alta qualità a partire da vari prompt, come indicazioni spaziali o testuali. Addestrato sull'ampio dataset SA-1B, SAM eccelle nelle prestazioni zero-shot e si adatta a nuove distribuzioni di immagini e attività senza conoscenze pregresse.

  • Puoi usare il Modello Segment Anything (SAM) per segmentare le immagini eseguendo l'inferenza con vari prompt, come riquadri di delimitazione o punti. Ecco un esempio con Python:

    from ultralytics import SAM
    
    # Carica un modello
    model = SAM("sam_b.pt")
    
    # Segmenta con un prompt di riquadro di delimitazione
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Segmenta con un prompt a punti
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Segmenta con un prompt a più punti
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Segmenta con un prompt a più punti per oggetto
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Segmenta con un prompt a punti negativi.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    In alternativa, puoi eseguire l'inferenza con SAM tramite l'interfaccia a riga di comando (CLI):

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

    Per istruzioni d'uso più dettagliate, visita la sezione sulla segmentazione.

  • Rispetto ai modelli YOLO, le varianti di SAM come SAM-b, MobileSAM e FastSAM-s sono generalmente più grandi e lente, ma offrono funzionalità esclusive di segmentazione zero-shot. Ad esempio, YOLO26n-seg è 56x più piccolo e oltre 1650x più veloce del modello SAM-b originale di Meta su CPU. Per questo i modelli YOLO sono ideali per applicazioni che richiedono una segmentazione rapida, leggera ed efficiente dal punto di vista computazionale, mentre i modelli SAM eccellono nelle attività di segmentazione flessibili, basate su prompt e zero-shot.

  • SAM di Ultralytics offre una funzionalità di annotazione automatica che consente di generare dataset di segmentazione usando un modello di rilevamento preaddestrato. Ecco un esempio in Python:

    from ultralytics.data.annotator import auto_annotate
    
    auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

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

  • SAM è addestrato sull'ampio dataset SA-1B, che comprende oltre 1 miliardo di maschere distribuite su 11 milioni di immagini. SA-1B è il più grande dataset di segmentazione disponibile finora e fornisce dati di addestramento diversificati e di alta qualità, garantendo prestazioni zero-shot notevoli in varie attività di segmentazione. Per maggiori dettagli, visita la sezione Dataset.

Commenti