Ultralytics YOLO27:
Get Started

Segmentazione semantica con Ultralytics YOLO#

Semantic segmentation examples

La segmentazione semantica assegna un'etichetta di classe a ogni pixel di un'immagine, producendo una mappa di classi densa che copre l'intera scena. A differenza della segmentazione delle istanze, che separa i singoli oggetti, la segmentazione semantica raggruppa tutti i pixel della stessa classe, indipendentemente dal numero di oggetti distinti presenti.



Guarda: Segmentazione semantica con Ultralytics YOLO26 | Tutorial rapido

L'output di un modello di segmentazione semantica è un'unica mappa di classi con altezza e larghezza pari a quelle dell'immagine, in cui ogni valore di pixel corrisponde a un ID di classe previsto. Per questo la segmentazione semantica è ideale per attività di analisi delle scene come la guida autonoma, l'imaging medico e la mappatura della copertura del suolo.

Suggerimento

Usa task=semantic o l'attività CLI yolo semantic per la segmentazione semantica. I file dei modelli di segmentazione semantica YOLO26 usano il suffisso -sem, ad esempio yolo26n-sem.pt.

Modelli#

Di seguito sono mostrati i modelli YOLO26 Semantic preaddestrati sul dataset Cityscapes.

I modelli vengono scaricati automaticamente dalla più recente release di Ultralytics al primo utilizzo.

Modellodimensione
(pixel)
mIoUvalVelocità
RTX3090 PyTorch
(ms)
parametri
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.623.8
YOLO26s-sem1024 × 204880.88.4 ± 0.06.591.0
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3305.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.8388.2
YOLO26x-sem1024 × 204883.648.9 ± 0.240.1866.9
  • I valori mIoUval si riferiscono a un singolo modello e a una singola scala sul set di convalida Cityscapes.
    Riproduci i risultati con yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Le metriche di velocità sono medie calcolate sulle immagini di convalida Cityscapes usando un'istanza RTX3090.
    Riproduci i risultati con yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • I valori di Params e FLOPs si riferiscono al modello fuso dopo model.fuse(), che unisce i layer Conv e BatchNorm. I checkpoint preaddestrati mantengono l'architettura di addestramento completa e possono riportare valori più alti.

Di seguito sono mostrati i modelli YOLO26 Semantic preaddestrati sul dataset ADE20K.

Modellodimensione
(pixel)
mIoUvalVelocità
RTX3090 PyTorch
(ms)
parametri
(M)
FLOPs
(B)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.5
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.5
YOLO26m-sem-ade20k64047.44.7 ± 0.314.459.6
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.2
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.4
  • I valori mIoUval si riferiscono a un singolo modello e a una singola scala sul set di convalida ADE20K.
    Riproduci i risultati con yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, sostituendo yolo26n-sem-ade20k.pt con il checkpoint yolo26*-sem-ade20k.pt desiderato.
  • Le metriche di velocità sono medie calcolate sulle immagini di convalida ADE20K usando un'istanza RTX3090.
    Riproduci i risultati con yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, sostituendo yolo26n-sem-ade20k.pt con il checkpoint yolo26*-sem-ade20k.pt desiderato.
  • I valori di Params e FLOPs si riferiscono al modello fuso dopo model.fuse(), che unisce i layer Conv e BatchNorm. I checkpoint preaddestrati mantengono l'architettura di addestramento completa e possono riportare valori più alti.

Consulta l'anteprima non ancora rilasciata di YOLO27 per i risultati preliminari di mIoU su Cityscapes.

Addestra#

Addestra YOLO26n-sem sul dataset Cityscapes8 per 100 epoche con una dimensione delle immagini di 1024. Per l'elenco completo degli argomenti disponibili, consulta la pagina Configurazione.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-sem.yaml")  # crea un nuovo modello dal file YAML
model = YOLO("yolo26n-sem.pt")  # carica un modello preaddestrato (consigliato per l'addestramento)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt")  # crea dal file YAML e trasferisci i pesi

# Addestra il modello
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Consulta la pagina Addestramento per tutti i dettagli sulla modalità train. Puoi addestrare i modelli di segmentazione semantica anche con l'addestramento cloud di Ultralytics Platform.

Formato del dataset#

I dataset di segmentazione semantica usano immagini di maschere a canale singolo, generalmente in formato PNG, in cui ogni valore di pixel rappresenta un ID di classe. I pixel con valore 255 vengono considerati "da ignorare" ed esclusi dal calcolo della loss. Il file YAML del dataset deve specificare i percorsi delle immagini e delle rispettive directory delle maschere. I dataset con etichette poligonali YOLO possono essere usati direttamente per l'addestramento; vengono convertiti in maschere al volo (vedi sotto Posso usare dati di segmentazione delle istanze). Per i dettagli sul formato, consulta la Guida ai dataset di segmentazione semantica. Tra i dataset supportati figurano Cityscapes e ADE20K. Puoi gestire ed etichettare i dataset semantici con l'annotazione di Ultralytics Platform.

Convalida#

Convalida l'accuratezza del modello YOLO26n-sem addestrato su un dataset di segmentazione semantica. Passa esplicitamente data affinché la convalida usi il file YAML del dataset desiderato.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-sem.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello personalizzato

# Convalida il modello
metrics = model.val(data="cityscapes.yaml")
metrics.miou  # media dell'intersezione sull'unione
metrics.pixel_accuracy  # accuratezza complessiva dei pixel

Predici#

Usa un modello YOLO26n-sem addestrato per eseguire predizioni sulle immagini.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-sem.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello personalizzato

# Esegui previsioni con il modello
results = model("https://ultralytics.com/images/bus.jpg")  # esegui una previsione su un’immagine

# Accedi ai risultati
for result in results:
    semantic_mask = result.semantic_mask.data  # mappa delle classi, forma (H,W), tipo intero selezionato in base al numero di classi

Consulta la pagina Previsione per i dettagli completi sulla modalità predict.

Output dei risultati#

La segmentazione semantica YOLO restituisce un oggetto Results per immagine. Ogni risultato memorizza un'unica mappa di classi densa per l'intera immagine, anziché un elenco di maschere degli oggetti. I pixel con la stessa classe prevista condividono lo stesso ID di classe, anche se appartengono a oggetti distinti.

AttributoTipoFormaDescrizione
result.semantic_maskSemanticMask(H,W)Mappa densa delle classi.
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)ID delle classi; il tipo di dato viene scelto in base al numero di classi.
result.masks--Nessuna maschera di istanza.
result.boxes--Nessun riquadro/valore di confidenza di istanza.

Per consultare i campi Results specifici di ogni attività, visita la sezione Risultati delle previsioni per attività.

Qualità dei contorni delle maschere

La segmentazione semantica prevede una mappa di classi densa, poi ridimensiona la mappa alla forma dell'immagine per la visualizzazione e l'uso a valle. Di conseguenza, le strutture molto sottili, come le linee di delimitazione delle corsie, le linee dei campi, i pali o i cavi, possono apparire a gradini se l'inferenza viene eseguita con un imgsz molto inferiore alla risoluzione originale dell'immagine. Se i contorni appaiono frastagliati, prova prima il modello PyTorch nativo .pt con un imgsz maggiore, come 1024, 1280 o il valore pratico più vicino alle dimensioni dell'immagine sorgente. Usa i modelli esportati solo dopo aver verificato che l'output .pt sia accettabile, perché gli input a risoluzione inferiore non possono recuperare i dettagli fini assenti dalla mappa di classi prevista.

Segmentazione delle istanze e segmentazione semantica#

AspettoSegmentazione delle istanze (task="segment")Segmentazione semantica (task="semantic")
Obiettivo della predizioneSegmentare separatamente ogni oggetto rilevatoAssegnare un ID di classe a ogni pixel
Campo dell'outputresult.masksresult.semantic_mask
Dati principaliresult.masks.dataresult.semantic_mask.data
Forma(N,H,W)(H,W)
Valori dei pixelValori delle maschere binarie: 0 o 1ID di classe: 0, 1, 2, ...
Tipo di datotorch.uint8torch.uint8
torch.int16
torch.int32
Oggetti della stessa classeMantenuti come istanze separateUniti nella stessa regione di classe
PoligoniSì, tramite result.masks.xy e result.masks.xynNessun output poligonale per impostazione predefinita
BBox e confidenzaSì, tramite result.boxesNessuna BBox o punteggio di confidenza per singola istanza
Uso tipicoConteggio, tracciamento, ritaglio e misurazione a livello di oggettoEtichettatura densa delle scene, aree percorribili, copertura del suolo e regioni mediche

Esporta#

Esporta un modello YOLO26n-sem in un altro formato, ad esempio ONNX, CoreML e così via.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-sem.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello personalizzato

# Esporta il modello
model.export(format="onnx")

I formati di esportazione disponibili per la segmentazione semantica YOLO26 sono elencati nella tabella seguente. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire predizioni o convalidare direttamente i modelli esportati, ad esempio yolo predict model=yolo26n-sem.onnx. Al termine dell'esportazione, vengono mostrati esempi d'uso per il tuo modello.

FormatoArgomento formatModelloMetadatiArgomenti
PyTorch-yolo26n-sem.pt✅-
TorchScripttorchscriptyolo26n-sem.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-sem.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-sem_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-sem.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-sem_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n-sem_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-sem_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-sem_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-sem_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-sem_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None restituisce per impostazione predefinita output grezzi per NMS esterno. Imposta nms=False per selezionare una head disponibile senza NMS; i formati non supportati utilizzano il proprio percorso di output nativo. Le voci nms qui sopra identificano i formati che possono integrare NMS con nms=True.

Consulta i dettagli completi di export nella pagina Esportazione.

Domande frequenti#

  • Per addestrare un modello di segmentazione semantica YOLO26 su un dataset personalizzato, devi preparare immagini di maschere PNG in cui il valore di ogni pixel rappresenta un ID di classe (0, 1, 2, ...) e i pixel con valore 255 vengono ignorati durante l'addestramento. Crea un file YAML del dataset che punti alle directory delle immagini e delle maschere, quindi addestra il modello:

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello YOLO26 di segmentazione semantica preaddestrato
    model = YOLO("yolo26n-sem.pt")
    
    # Addestra il modello
    results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=1024)

    Consulta la pagina Configurazione per altri argomenti disponibili.

  • La segmentazione di istanze e la segmentazione semantica sono entrambe attività a livello di pixel, ma differiscono per un aspetto fondamentale:

    • La segmentazione semantica assegna un'etichetta di classe a ogni pixel, ma non distingue i singoli oggetti appartenenti alla stessa classe. Ad esempio, in una scena tutte le auto condividono la stessa etichetta di classe.
    • La segmentazione di istanze identifica separatamente ogni singolo oggetto, producendo maschere distinte per ciascun oggetto anche quando appartengono alla stessa classe.

    La segmentazione semantica è particolarmente adatta ad attività di comprensione della scena, come la guida autonoma e la mappatura della copertura del suolo, mentre la segmentazione di istanze è preferibile quando è importante contare o tracciare i singoli oggetti.

  • Sì. Se il tuo dataset usa etichette poligonali Ultralytics YOLO (una .txt per immagine), ometti masks_dir dal file YAML del dataset e assicurati che nella directory principale del dataset, accanto alle immagini, non esista alcuna cartella masks/ (la sua sola presenza attiva la modalità con maschere PNG anche senza masks_dir impostato). Il caricatore converte quindi al volo i poligoni in maschere semantiche per ogni immagine. Per i dataset multiclasse (N > 1), viene aggiunta automaticamente una classe background aggiuntiva a names. Per i dataset a classe singola (N == 1), l'addestramento rimane a 1 classe: la classe dichiarata diventa 1 nella maschera e i pixel non coperti diventano 0. Consulta la guida ai dataset per la segmentazione semantica per maggiori dettagli.

  • Ultralytics YOLO26 include configurazioni integrate per diversi dataset di segmentazione semantica:

    • Cityscapes: scene stradali urbane con 19 classi, ampiamente utilizzate nella ricerca sulla guida autonoma.
    • ADE20K: un dataset di parsing delle scene su larga scala con 150 classi.

    Puoi usare anche qualsiasi dataset personalizzato che fornisca annotazioni con maschere PNG, in cui i valori dei pixel corrispondono agli ID delle classi.

  • Convalida un modello YOLO26 di segmentazione semantica preaddestrato usando il file YAML del dataset per la valutazione:

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello preaddestrato
    model = YOLO("yolo26n-sem.pt")
    
    # Convalida il modello
    metrics = model.val(data="cityscapes.yaml")
    print("Mean IoU:", metrics.miou)
    print("Pixel Accuracy:", metrics.pixel_accuracy)

    Questi passaggi ti forniranno metriche di convalida come l'intersezione media sull'unione (mIoU) e l'accuratezza dei pixel, misure standard per valutare le prestazioni della segmentazione semantica.

  • Esporta un modello YOLO26 di segmentazione semantica in formato ONNX usando Python o i comandi CLI:

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello preaddestrato
    model = YOLO("yolo26n-sem.pt")
    
    # Esporta il modello in formato ONNX
    model.export(format="onnx")

    Per maggiori dettagli sull'esportazione in vari formati, consulta la pagina Esportazione.

Commenti