Ultralytics YOLO27:

Segmentação Semântica com o YOLO da Ultralytics#

Semantic segmentation examples

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.

Dica

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.

Modelotamanho
(píxeis)
mIoUvalVelocidade
RTX3090 PyTorch
(ms)
parâmetros
(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
  • Os valores de mIoUval correspondem a um único modelo numa única escala no conjunto de validação Cityscapes.
    Reproduza com yolo 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 com yolo 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.

Modelotamanho
(píxeis)
mIoUvalVelocidade
RTX3090 PyTorch
(ms)
parâmetros
(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
  • Os valores de mIoUval correspondem a um único modelo numa única escala no conjunto de validação ADE20K.
    Reproduza com yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, substituindo yolo26n-sem-ade20k.pt pelo checkpoint yolo26*-sem-ade20k.pt pretendido.
  • As métricas de velocidade são calculadas como a média das imagens de validação ADE20K usando uma instância RTX3090.
    Reproduza com yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, substituindo yolo26n-sem-ade20k.pt pelo checkpoint yolo26*-sem-ade20k.pt pretendido.
  • 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.

Exemplo
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.

Exemplo
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

Previsão#

Use um modelo YOLO26n-sem treinado para executar previsões em imagens.

Exemplo
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 count

Consulta 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.

AtributoTipoFormaDescrição
result.semantic_maskSemanticMask(H,W)Mapa de classes denso.
result.semantic_mask.datatorch.uint8
torch.int16
torch.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.

Qualidade dos limites da máscara

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#

AspetoSegmentação de instâncias (task="segment")Segmentação semântica (task="semantic")
Objetivo da previsãoSegmentar cada objeto detetado separadamenteAtribuir um ID de classe a cada pixel
Campo de saídaresult.masksresult.semantic_mask
Dados principaisresult.masks.dataresult.semantic_mask.data
Forma(N,H,W)(H,W)
Valores dos pixelsValores de máscara binária: 0 ou 1IDs de classe: 0, 1, 2, ...
Dtypetorch.uint8torch.uint8
torch.int16
torch.int32
Objetos da mesma classeMantidos como instâncias separadasFundidos na mesma região de classe
PolígonosSim, através de result.masks.xy e result.masks.xynSem saída de polígonos por predefinição
Caixas e confiançaSim, através de result.boxesSem caixas ou pontuações de confiança por instância
Utilização típicaContagem, rastreamento, recorte, medição ao nível do objetoRotulagem 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.

Exemplo
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.

FormatoArgumento formatModeloMetadadosArgumentos
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-sem_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-sem.aimodelimgsz, 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:

    Exemplo
    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)

    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 .txt por imagem), omita masks_dir do YAML do conjunto de dados e certifique-se de que não existe nenhuma pasta masks/ junto às suas imagens na raiz do conjunto de dados (a sua simples presença ativa o modo de máscaras PNG, mesmo sem masks_dir definido). 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 classe background adicional é anexada automaticamente a names. Para conjuntos de dados de classe única (N == 1), o treino mantém-se em 1 classe — a classe declarada torna-se 1 na máscara e os pixels não cobertos tornam-se 0. 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:

    Exemplo
    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)

    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:

    Exemplo
    from 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.

Comentários