Segmentazione semantica

Semantic segmentation examples

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

L'output di un modello di segmentazione semantica è una singola mappa di classe altezza-per-larghezza in cui ogni valore di pixel corrisponde a un ID di classe predetto. Questo rende la segmentazione semantica ideale per compiti di analisi della scena come la guida autonoma, l'imaging medico e la mappatura del suolo.

Suggerimento

Usa task=semantic o il comando CLI yolo semantic per la segmentazione semantica. I file dei modelli di segmentazione semantica YOLO26 utilizzano il suffisso -sem, come yolo26n-sem.pt.

Modelli

I modelli di segmentazione semantica YOLO26 preaddestrati sul dataset Cityscapes sono mostrati di seguito.

I modelli vengono scaricati automaticamente dall'ultima release di Ultralytics al primo utilizzo.

Modellodimensione
(pixel)
mIoUvalVelocità
RTX3090 PyTorch
(ms)
parametri
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.622.7
YOLO26s-sem1024 × 204880.88.4 ± 0.06.588.8
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3304.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.9384.7
YOLO26x-sem1024 × 204883.648.9 ± 0.240.2861.7
  • I valori mIoUval si riferiscono al modello singolo a scala singola sul set di validazione di Cityscapes.
    Riproducili con yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Le metriche di velocità sono calcolate come media sulle immagini di validazione di Cityscapes utilizzando un'istanza Amazon EC2 P4d.
    Riproducile con yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • I valori di Parametri e FLOPs si riferiscono al modello fuso dopo model.fuse(), che unisce i livelli Conv e BatchNorm. I checkpoint preaddestrati mantengono l'intera architettura di addestramento e potrebbero mostrare conteggi più elevati.

Addestra

Addestra YOLO26n-sem sul dataset Cityscapes8 per 100 epoche con dimensione immagine 1024. Per un elenco completo degli argomenti disponibili, consulta la pagina Configurazione.

Esempio
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.yaml")  # build a new model from YAML
model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Vedi i dettagli completi della modalità train nella pagina Addestramento.

Formato del dataset

I dataset di segmentazione semantica utilizzano immagini maschera a canale singolo, tipicamente PNG, in cui ogni valore di pixel rappresenta un ID di classe. I pixel con valore 255 vengono trattati come "ignore" ed esclusi dal calcolo della loss. Il YAML del dataset dovrebbe specificare i percorsi alle immagini e alle relative directory delle maschere. Consulta la Guida ai dataset di segmentazione semantica per i dettagli sul formato. I dataset supportati includono Cityscapes e ADE20K.

Valida

Valida l'accuratezza del modello YOLO26n-sem addestrato su un dataset di segmentazione semantica. Passa data esplicitamente in modo che la validazione utilizzi il YAML del dataset previsto.

Esempio
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou  # mean Intersection over Union
metrics.pixel_accuracy  # overall pixel accuracy

Predizione

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

Esempio
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    semantic_mask = result.semantic_mask.data  # height x width class map (torch.Tensor)

Vedi i dettagli completi della modalità predict nella pagina Predizione.

Esporta

Esporta un modello YOLO26n-sem in un formato diverso come ONNX, CoreML, ecc.

Esempio
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

I formati di esportazione disponibili per la segmentazione semantica YOLO26 sono riportati nella tabella seguente. Puoi esportare in qualsiasi formato utilizzando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi effettuare predizioni o validazioni direttamente sui modelli esportati, ad esempio yolo predict model=yolo26n-sem.onnx. Esempi di utilizzo sono mostrati per il tuo modello una volta completata l'esportazione.

FormatoArgomento formatModelloMetadatiArgomenti
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, batch, device
TF Litetfliteyolo26n-sem.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-sem_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-sem_deepx_model/imgsz, int8, data, optimize, device

Vedi i dettagli completi dell'export nella pagina Esportazione.

FAQ

Come posso addestrare un modello di segmentazione semantica YOLO26 su un dataset personalizzato?

Per addestrare un modello di segmentazione semantica YOLO26 su un dataset personalizzato, devi preparare immagini maschera PNG in cui ogni valore di 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 tue directory di immagini e maschere, quindi addestra il modello:

Esempio
from ultralytics import YOLO

# Load a pretrained YOLO26 semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train the model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)

Controlla la pagina Configurazione per altri argomenti disponibili.

Qual è la differenza tra segmentazione di istanze e segmentazione semantica?

La segmentazione di istanze e la segmentazione semantica sono entrambe attività a livello di pixel ma differiscono in modo chiave:

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

La segmentazione semantica è più adatta per compiti di comprensione della scena come la guida autonoma e la mappatura del suolo, mentre la segmentazione di istanze è preferibile quando è importante contare o tracciare singoli oggetti.

Posso usare dati di segmentazione di istanze per addestrare la segmentazione semantica?

Sì. Se il tuo dataset utilizza etichette poligono Ultralytics YOLO (un .txt per immagine), ometti masks_dir dal YAML del dataset e il caricatore convertirà i poligoni in maschere semantiche per immagine al volo. Per i dataset multi-classe (N > 1) viene aggiunta automaticamente un'ulteriore classe background ai names. Per i dataset a classe singola (N == 1) l'addestramento rimane a 1 classe — la tua classe dichiarata diventa 1 nella maschera e i pixel non coperti diventano 0. Vedi la Guida ai dataset di segmentazione semantica per i dettagli.

Quali dataset sono supportati per la segmentazione semantica?

Ultralytics YOLO26 fornisce configurazioni integrate per diversi dataset di segmentazione semantica:

  • Cityscapes: Scene stradali urbane con 19 classi, ampiamente utilizzate per la ricerca sulla guida autonoma.
  • ADE20K: Un dataset di analisi della scena su larga scala con 150 classi.

Puoi anche utilizzare qualsiasi dataset personalizzato che fornisca annotazioni di maschera PNG in cui i valori dei pixel corrispondono agli ID di classe.

Come posso validare un modello di segmentazione semantica YOLO26 preaddestrato?

Valida un modello di segmentazione semantica YOLO26 preaddestrato con il YAML del dataset utilizzato per la valutazione:

Esempio
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-sem.pt")

# Validate the model
metrics = model.val(data="cityscapes.yaml")
print("Mean IoU:", metrics.miou)
print("Pixel Accuracy:", metrics.pixel_accuracy)

Questi passaggi ti forniranno metriche di validazione come la media dell'Intersection over Union (mIoU) e l'accuratezza dei pixel, che sono misure standard per valutare le prestazioni della segmentazione semantica.

Come posso esportare un modello di segmentazione semantica YOLO26 in formato ONNX?

Esporta un modello di segmentazione semantica YOLO26 in formato ONNX con comandi Python o CLI:

Esempio
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-sem.pt")

# Export the model to ONNX format
model.export(format="onnx")

Per ulteriori dettagli sull'esportazione in vari formati, fai riferimento alla pagina Esportazione.

Commenti