Segmentação Semântica com o YOLO da Ultralytics#
A segmentação semântica atribui um rótulo de classe a cada pixel de uma imagem, produzindo um mapa de classes denso que cobre toda a cena. Ao contrário da segmentação de instâncias, que separa objetos individuais, a segmentação semântica agrupa todos os pixels da mesma classe, independentemente de quantos objetos distintos estejam presentes.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
A saída de um modelo de segmentação semântica é um único mapa de classes com altura por largura, no qual o valor de cada pixel corresponde a um ID de classe previsto. Isso torna a segmentação semântica ideal para tarefas de interpretação de cenas, como condução autónoma, imagiologia médica e mapeamento da cobertura do solo.
Use a tarefa task=semantic ou a tarefa yolo semantic da CLI para segmentação semântica. Os ficheiros de modelo de segmentação semântica YOLO26 usam o sufixo -sem, como em yolo26n-sem.pt.
Modelos#
Os modelos de segmentação semântica YOLO26 pré-treinados no conjunto de dados Cityscapes são apresentados abaixo.
Os modelos são descarregados automaticamente da versão mais recente da Ultralytics na primeira utilização.
| Modelo | tamanho (píxeis) | mIoUval | Velocidade RTX3090 PyTorch (ms) | parâmetros (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 23.8 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 91.0 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 305.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.8 | 388.2 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.1 | 866.9 |
- Os valores de mIoUval correspondem a um único modelo numa única escala no conjunto de validação Cityscapes.
Reproduza comyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - As métricas de velocidade são calculadas como a média das imagens de validação Cityscapes usando uma instância RTX3090.
Reproduza comyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Os valores de Params e FLOPs correspondem ao modelo fundido após
model.fuse(), que combina as camadas Conv e BatchNorm. Os checkpoints pré-treinados mantêm toda a arquitetura de treinamento e podem apresentar contagens maiores.
Os modelos de segmentação semântica YOLO26 pré-treinados no conjunto de dados ADE20K são apresentados abaixo.
Os modelos são descarregados automaticamente da versão mais recente da Ultralytics na primeira utilização.
| Modelo | tamanho (píxeis) | mIoUval | Velocidade RTX3090 PyTorch (ms) | parâmetros (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.5 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.5 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.4 | 59.6 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.2 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.4 |
- Os valores de mIoUval correspondem a um único modelo numa única escala no conjunto de validação ADE20K.
Reproduza comyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, substituindoyolo26n-sem-ade20k.ptpelo checkpointyolo26*-sem-ade20k.ptpretendido. - As métricas de velocidade são calculadas como a média das imagens de validação ADE20K usando uma instância RTX3090.
Reproduza comyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, substituindoyolo26n-sem-ade20k.ptpelo checkpointyolo26*-sem-ade20k.ptpretendido. - Os valores de Params e FLOPs correspondem ao modelo fundido após
model.fuse(), que combina as camadas Conv e BatchNorm. Os checkpoints pré-treinados mantêm toda a arquitetura de treinamento e podem apresentar contagens maiores.
Consulta a pré-visualização não lançada do YOLO27 para obter resultados preliminares do mIoU no Cityscapes.
Treinar#
Treine YOLO26n-sem no conjunto de dados Cityscapes8 durante 100 épocas, com um tamanho de imagem de 1024. Para obter a lista completa dos argumentos disponíveis, consulte a página de Configuração.
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)Consulte os detalhes completos do modo train na página Treino. Os modelos de segmentação semântica também podem ser treinados com o treino na cloud da Ultralytics Platform.
Formato do dataset#
Os conjuntos de dados de segmentação semântica usam imagens de máscaras de canal único, normalmente PNG, nas quais o valor de cada pixel representa um ID de classe. Os pixels com valor 255 são tratados como "ignore" e excluídos do cálculo da perda. O YAML do conjunto de dados deve especificar os caminhos para as imagens e para os diretórios de máscaras correspondentes. Consulte o Guia de Conjuntos de Dados de Segmentação Semântica para obter detalhes sobre o formato. Os conjuntos de dados suportados incluem Cityscapes e ADE20K. Pode gerir e anotar conjuntos de dados semânticos com a anotação da Ultralytics Platform.
Validação#
Valide a precisão do modelo YOLO26n-sem treinado num conjunto de dados de segmentação semântica. Passe data explicitamente para que a validação use o YAML do conjunto de dados pretendido.
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 accuracyPrevisão#
Use um modelo YOLO26n-sem treinado para executar previsões em imagens.
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 countConsulta todos os detalhes do modo predict na página Predict.
Saída dos resultados#
A segmentação semântica YOLO devolve um objeto Results por imagem. Cada resultado armazena um mapa de classes denso para a
imagem completa, em vez de uma lista de máscaras de objetos. Os pixels com a mesma classe prevista partilham o mesmo ID de classe, mesmo quando
pertencem a objetos separados.
| Atributo | Tipo | Forma | Descrição |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | Mapa de classes denso. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | IDs de classe; dtype selecionado pela quantidade de classes. |
result.masks | - | - | Sem máscaras de instâncias. |
result.boxes | - | - | Sem caixas/confianças de instância. |
result.masks.xy | - | - | Sem polígonos por predefinição. |
Para consultar os campos Results específicos da tarefa em todas as tarefas, vê a secção Resultados de Previsão por Tarefa.
A segmentação semântica prevê um mapa de classes denso e, em seguida, redimensiona esse mapa de volta para as dimensões da imagem para visualização e
utilização posterior. Estruturas muito finas, como marcações de faixa, linhas de campo, postes ou fios, podem, por isso, parecer
escadeadas quando a inferência é executada com um imgsz muito inferior à resolução da imagem original. Se os limites parecerem
irregulares, volte a testar primeiro o modelo PyTorch nativo .pt com um imgsz maior, como 1024, 1280 ou o valor
prático mais próximo do tamanho da imagem de origem. Use modelos exportados apenas depois de confirmar que a saída .pt é aceitável,
pois entradas de resolução inferior não conseguem recuperar detalhes finos que não estavam presentes no mapa de classes previsto.
Segmentação de instâncias vs. segmentação semântica#
| Aspeto | Segmentação de instâncias (task="segment") | Segmentação semântica (task="semantic") |
|---|---|---|
| Objetivo da previsão | Segmentar cada objeto detetado separadamente | Atribuir um ID de classe a cada pixel |
| Campo de saída | result.masks | result.semantic_mask |
| Dados principais | result.masks.data | result.semantic_mask.data |
| Forma | (N,H,W) | (H,W) |
| Valores dos pixels | Valores de máscara binária: 0 ou 1 | IDs de classe: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| Objetos da mesma classe | Mantidos como instâncias separadas | Fundidos na mesma região de classe |
| Polígonos | Sim, através de result.masks.xy e result.masks.xyn | Sem saída de polígonos por predefinição |
| Caixas e confiança | Sim, através de result.boxes | Sem caixas ou pontuações de confiança por instância |
| Utilização típica | Contagem, rastreamento, recorte, medição ao nível do objeto | Rotulagem densa de cenas, área transitável, cobertura do solo, regiões médicas |
Exportação#
Exporte um modelo YOLO26n-sem para um formato diferente, como ONNX, CoreML, etc.
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")Os formatos de exportação disponíveis para a segmentação semântica YOLO26 encontram-se na tabela abaixo. Pode exportar para qualquer formato usando o argumento format, ou seja, format='onnx' ou format='engine'. Pode fazer previsões ou validações diretamente em modelos exportados, por exemplo, com yolo predict model=yolo26n-sem.onnx. Os exemplos de utilização do seu modelo são apresentados após a conclusão da exportação.
| Formato | Argumento format | Modelo | Metadados | Argumentos |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
nms=None por padrão utiliza saídas brutas para NMS externo. Define nms=False para selecionar uma cabeça livre de NMS disponível; os formatos não suportados recorrem ao seu caminho de saída nativo. As entradas nms acima identificam formatos que podem incorporar NMS com nms=True.
Consulta todos os detalhes de export na página Export.
Perguntas frequentes#
Para treinar um modelo de segmentação semântica YOLO26 num conjunto de dados personalizado, precisa de preparar imagens de máscaras PNG em que o valor de cada pixel representa um ID de classe (0, 1, 2, ...) e os pixels com valor 255 são ignorados durante o treino. Crie um ficheiro YAML do conjunto de dados que aponte para os diretórios das imagens e das máscaras e, em seguida, treine o modelo:
Exemplofrom 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)Consulta a página de Configuração para veres mais argumentos disponíveis.
A segmentação de instâncias e a segmentação semântica são ambas tarefas ao nível dos pixels, mas diferem num aspeto fundamental:
- A segmentação semântica atribui um rótulo de classe a cada pixel, mas não distingue entre objetos individuais da mesma classe. Por exemplo, todos os carros numa cena partilham o mesmo rótulo de classe.
- A segmentação de instâncias identifica cada objeto individual separadamente, produzindo máscaras distintas para cada objeto, mesmo que pertençam à mesma classe.
A segmentação semântica é mais adequada para tarefas de compreensão de cenas, como condução autónoma e mapeamento da cobertura do solo, enquanto a segmentação de instâncias é preferível quando é importante contar ou rastrear objetos individuais.
Sim. Se o seu conjunto de dados usar rótulos de polígonos Ultralytics YOLO (um
.txtpor imagem), omitamasks_dirdo YAML do conjunto de dados e certifique-se de que não existe nenhuma pastamasks/junto às suas imagens na raiz do conjunto de dados (a sua simples presença ativa o modo de máscaras PNG, mesmo semmasks_dirdefinido). Em seguida, o carregador converte os polígonos em máscaras semânticas por imagem durante a execução. Para conjuntos de dados multiclasse (N > 1), uma classebackgroundadicional é anexada automaticamente anames. Para conjuntos de dados de classe única (N == 1), o treino mantém-se em 1 classe — a classe declarada torna-se1na máscara e os pixels não cobertos tornam-se0. Consulte o Guia de Conjuntos de Dados de Segmentação Semântica para obter detalhes.Ultralytics YOLO26 fornece configurações integradas para vários conjuntos de dados de segmentação semântica:
- Cityscapes: Cenas de ruas urbanas com 19 classes, amplamente utilizadas na investigação sobre condução autónoma.
- ADE20K: Um conjunto de dados de interpretação de cenas em grande escala com 150 classes.
Também pode usar qualquer conjunto de dados personalizado que forneça anotações de máscaras PNG, nas quais os valores dos pixels correspondam a IDs de classe.
Valide um modelo de segmentação semântica YOLO26 pré-treinado com o YAML do conjunto de dados usado para a avaliação:
Exemplofrom 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)Estes passos fornecerão métricas de validação, como a interseção média sobre a união (mIoU) e a precisão por pixel, que são medidas padrão para avaliar o desempenho da segmentação semântica.
Exporte um modelo de segmentação semântica YOLO26 para o formato ONNX com comandos Python ou da CLI:
Exemplofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Export the model to ONNX format model.export(format="onnx")Para obter mais detalhes sobre a exportação para vários formatos, consulta a página Export.