Segmentazione semantica#
La segmentazione semantica assegna un'etichetta di classe a ogni pixel in 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.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
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 previsto. Questo rende la segmentazione semantica ideale per attività di analisi della scena come la guida autonoma, l'imaging medico e la mappatura della copertura del suolo.
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, 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.
| Modello | dimensione (pixel) | mIoUval | Velocità RTX3090 PyTorch (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 22.7 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 88.8 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 304.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.9 | 384.7 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.2 | 861.7 |
- I valori mIoUval si riferiscono a modelli singoli a scala singola sul set di validazione Cityscapes.
Riproduci conyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Le metriche di velocità sono calcolate come media sulle immagini di validazione Cityscapes usando un'istanza RTX3090.
Riproduci conyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - I valori Params e FLOPs si riferiscono al modello fuso dopo
model.fuse(), che unisce i livelli Conv e BatchNorm. I checkpoint preaddestrati mantengono l'architettura di training completa e potrebbero mostrare conteggi più elevati.
I modelli di segmentazione semantica YOLO26 preaddestrati sul dataset ADE20K sono mostrati di seguito.
I modelli vengono scaricati automaticamente dall'ultima release di Ultralytics al primo utilizzo.
| Modello | dimensione (pixel) | mIoUval | Velocità RTX3090 PyTorch (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3,9 ± 0,2 | 1.6 | 4,4 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4,2 ± 0,3 | 6.5 | 17,4 |
| YOLO26m-sem-ade20k | 640 | 47,4 | 4,7 ± 0,3 | 14.3 | 59,5 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8,3 ± 0,2 | 17.9 | 75,0 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9,9 ± 0,3 | 40.2 | 168,1 |
- I valori di mIoUval sono per modello singolo a scala singola sul set di convalida di ADE20K.
Riproduci conyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, sostituendoyolo26n-sem-ade20k.ptcon il checkpointyolo26*-sem-ade20k.ptdesiderato. - Le metriche di Speed sono calcolate come media sulle immagini di validazione ADE20K utilizzando un'istanza RTX3090.
Riproducile conyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, sostituendoyolo26n-sem-ade20k.ptcon il checkpointyolo26*-sem-ade20k.ptdesiderato. - I valori Params e FLOPs si riferiscono al modello fuso dopo
model.fuse(), che unisce i livelli Conv e BatchNorm. I checkpoint preaddestrati mantengono l'architettura di training completa e potrebbero mostrare conteggi più elevati.
Addestramento#
Addestra YOLO26n-sem sul dataset Cityscapes8 per 100 epoche con una dimensione immagine di 1024. Per un elenco completo degli argomenti disponibili, consulta la pagina Configurazione.
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)Consulta i dettagli completi della modalità train nella pagina Train. I modelli di segmentazione semantica possono anche essere addestrati con Ultralytics Platform cloud training.
Formato del dataset#
I dataset di segmentazione semantica utilizzano immagini con maschera a canale singolo, tipicamente PNG, dove ogni valore di pixel rappresenta un ID di classe. I pixel con valore 255 vengono trattati come "ignore" ed esclusi dal calcolo della perdita. Il YAML del dataset dovrebbe specificare i percorsi delle immagini e le relative directory delle maschere. Consulta la Semantic Segmentation Dataset Guide per i dettagli sul formato. I dataset supportati includono Cityscapes e ADE20K. Puoi gestire ed etichettare i dataset semantici con Ultralytics Platform annotation.
Valutazione#
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.
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 accuracyPrevisione#
Usa un modello YOLO26n-sem addestrato per eseguire predizioni sulle immagini.
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 # class map, shape (H,W), integer dtype selected by class countVedi tutti i dettagli della modalità predict nella pagina Predict.
Output dei risultati#
La segmentazione semantica YOLO restituisce un oggetto Results per immagine. Ogni risultato archivia una mappa di classe densa per l'intera immagine invece di un elenco di maschere di oggetti. I pixel con la stessa classe prevista condividono lo stesso ID di classe, anche quando appartengono a oggetti separati.
| Attributo | Tipo | Forma | Descrizione |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | Mappa delle classi densa. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | ID di classe; dtype selezionato in base al conteggio delle classi. |
result.masks | - | - | Nessuna maschera di istanza. |
result.boxes | - | - | Nessun box/confidenza di istanza. |
result.masks.xy | - | - | Nessun poligono predefinito. |
Per i campi Results specifici per ogni attività, vedi la sezione Predizioni dei Risultati per Attività.
La segmentazione semantica predice una mappa di classe densa, che viene poi ridimensionata alla forma dell'immagine originale per la visualizzazione e l'uso a valle. Strutture molto sottili, come segnaletica orizzontale, linee di campo, pali o cavi, possono quindi apparire scalettate quando l'inferenza viene eseguita a un imgsz molto inferiore rispetto alla risoluzione dell'immagine originale. Se i contorni appaiono frastagliati, prova innanzitutto il modello nativo PyTorch .pt con un imgsz maggiore, come 1024, 1280 o il valore più vicino possibile alla dimensione dell'immagine sorgente. Usa i modelli esportati solo dopo aver confermato che l'output .pt sia accettabile, poiché input a bassa risoluzione non possono recuperare dettagli fini che non erano presenti nella mappa di classe predetta.
Segmentazione di istanze vs semantica#
| Aspetto | Segmentazione di istanze (task="segment") | Segmentazione semantica (task="semantic") |
|---|---|---|
| Obiettivo della predizione | Segmenta ogni oggetto rilevato separatamente | Assegna un ID di classe a ogni pixel |
| Campo di output | result.masks | result.semantic_mask |
| Dati principali | result.masks.data | result.semantic_mask.data |
| Forma | (N,H,W) | (H,W) |
| Valori dei pixel | Valori della maschera binaria: 0 o 1 | ID di classe: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| Oggetti della stessa classe | Mantenuti come istanze separate | Uniti nella stessa regione di classe |
| Poligoni | Sì, tramite result.masks.xy e result.masks.xyn | Nessun output di poligoni per impostazione predefinita |
| Box e confidenza | Sì, tramite result.boxes | Nessun box o punteggio di confidenza per istanza |
| Uso tipico | Conteggio, tracciamento, ritaglio, misurazione a livello di oggetto | Etichettatura densa della scena, area transitabile, copertura del suolo, regioni mediche |
Esportazione#
Esporta un modello YOLO26n-sem in un formato diverso come ONNX, CoreML, ecc.
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 nella tabella sottostante. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi predire o validare 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.
| Formato | Argomento format | Modello | Metadati | Argomenti |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
Vedi i dettagli completi dell'export nella pagina Export.
FAQ#
Come addestro 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 con 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 punta alle directory delle immagini e delle maschere, quindi addestra il modello:
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 ulteriori 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 un aspetto 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 ogni oggetto anche se appartengono alla stessa classe.
La segmentazione semantica è più adatta per attività di comprensione della scena come la guida autonoma e la mappatura della copertura del suolo, mentre la segmentazione di istanze è preferibile quando conta il conteggio o il tracciamento dei singoli oggetti.
Posso usare dati di segmentazione di istanze per addestrare la segmentazione semantica?#
Sì. Se il tuo dataset utilizza etichette poligonali Ultralytics YOLO (un .txt per immagine), ometti masks_dir dal YAML del dataset e assicurati che non esista alcuna cartella masks/ accanto alle tue immagini nella root del dataset (la sua sola presenza attiva la modalità maschera PNG anche senza masks_dir impostato). Il caricatore converte quindi i poligoni in maschere semantiche per immagine al volo. Per i dataset multi-classe (N > 1) viene aggiunta automaticamente una classe background extra 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. Consulta la Guida al 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 di scene su larga scala con 150 classi.
Puoi anche utilizzare qualsiasi dataset personalizzato che fornisca annotazioni di maschera PNG dove i valori dei pixel corrispondono agli ID di classe.
Come convalido un modello di segmentazione semantica YOLO26 preaddestrato?#
Valida un modello di segmentazione semantica YOLO26 preaddestrato con il YAML del dataset utilizzato per la valutazione:
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'intersezione sull'unione (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:
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, consulta la pagina Export.