Segmentação Semântica

Semantic segmentation examples

A segmentação semântica atribui um rótulo de classe a cada pixel em 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.

A saída de um modelo de segmentação semântica é um mapa de classes de altura por largura, onde cada valor de pixel corresponde a um ID de classe previsto. Isso torna a segmentação semântica ideal para tarefas de análise de cena, como direção autônoma, imagens médicas e mapeamento de cobertura do solo.

Dica

Use task=semantic ou a tarefa CLI yolo semantic para segmentação semântica. Os arquivos de modelo de segmentação semântica YOLO26 usam o sufixo -sem, como yolo26n-sem.pt.

Modelos

Modelos de segmentação semântica YOLO26 pré-treinados no conjunto de dados Cityscapes são mostrados abaixo.

Os modelos são baixados automaticamente da versão mais recente do Ultralytics no primeiro uso.

Modelotamanho
(pixels)
mIoUvalVelocidade
RTX3090 PyTorch
(ms)
parâmetros
(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
  • Os valores de mIoUval são para modelo único e escala única 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 com base na média das imagens de validação do Cityscapes usando uma instância Amazon EC2 P4d.
    Reproduza com yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • Os valores de Params e FLOPs são para o modelo fundido após model.fuse(), que combina camadas Conv e BatchNorm. Checkpoints pré-treinados mantêm a arquitetura de treinamento completa e podem exibir contagens maiores.

Treino

Treine o YOLO26n-sem no conjunto de dados Cityscapes8 por 100 épocas com tamanho de imagem 1024. Para uma lista completa de argumentos disponíveis, veja 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)

Veja os detalhes completos do modo train na página Treinar.

Formato do conjunto de dados

Os conjuntos de dados de segmentação semântica usam imagens de máscara de canal único, normalmente PNG, onde cada valor de pixel representa um ID de classe. Pixels com valor 255 são tratados como "ignorar" e excluídos do cálculo da perda. O YAML do conjunto de dados deve especificar os caminhos para as imagens e seus diretórios de máscara correspondentes. Veja o Guia de Conjunto de Dados de Segmentação Semântica para detalhes de formato. Os conjuntos de dados suportados incluem Cityscapes e ADE20K.

Validação

Valide a precisão do modelo YOLO26n-sem treinado em um 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

Prever

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  # height x width class map (torch.Tensor)

Veja os detalhes completos do modo predict na página Prever.

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 segmentação semântica YOLO26 estão na tabela abaixo. Você pode exportar para qualquer formato usando o argumento format, por exemplo, format='onnx' ou format='engine'. Você pode prever ou validar diretamente em modelos exportados, por exemplo, yolo predict model=yolo26n-sem.onnx. Exemplos de uso são mostrados para seu modelo após a conclusão da exportação.

FormatoArgumento formatModeloMetadadosArgumentos
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

Veja os detalhes completos de export na página Exportar.

Perguntas Frequentes

Como treino um modelo de segmentação semântica YOLO26 em um conjunto de dados personalizado?

Para treinar um modelo de segmentação semântica YOLO26 em um conjunto de dados personalizado, você precisa preparar imagens de máscara PNG onde cada valor de pixel representa um ID de classe (0, 1, 2, ...) e pixels com valor 255 são ignorados durante o treinamento. Crie um arquivo YAML de conjunto de dados apontando para seus diretórios de imagens e máscaras, então 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)

Verifique a página de Configuração para mais argumentos disponíveis.

Qual é a diferença entre segmentação de instâncias e segmentação semântica?

A segmentação de instâncias e a segmentação semântica são tarefas em nível de pixel, mas diferem de uma forma chave:

  • 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 em uma cena compartilham 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 cena, como direção autônoma e mapeamento de cobertura do solo, enquanto a segmentação de instâncias é preferida quando contar ou rastrear objetos individuais é importante.

Posso usar dados de segmentação de instâncias para treinar segmentação semântica?

Sim. Se o seu conjunto de dados usa rótulos de polígono Ultralytics YOLO (um .txt por imagem), omita masks_dir do YAML do conjunto de dados e o carregador converterá polígonos em máscaras semânticas por imagem instantaneamente. Para conjuntos de dados com várias classes (N > 1), uma classe background extra é adicionada automaticamente aos names. Para conjuntos de dados de classe única (N == 1), o treinamento permanece em 1 classe — sua classe declarada torna-se 1 na máscara e os pixels não cobertos tornam-se 0. Veja o Guia de Conjunto de Dados de Segmentação Semântica para detalhes.

Quais conjuntos de dados são suportados para segmentação semântica?

O Ultralytics YOLO26 oferece configurações integradas para vários conjuntos de dados de segmentação semântica:

  • Cityscapes: Cenas de rua urbanas com 19 classes, amplamente utilizadas para pesquisa de direção autônoma.
  • ADE20K: Um conjunto de dados de análise de cena em larga escala com 150 classes.

Você também pode usar qualquer conjunto de dados personalizado que forneça anotações de máscara PNG onde os valores de pixel correspondam aos IDs de classe.

Como valido um modelo de segmentação semântica YOLO26 pré-treinado?

Valide um modelo de segmentação semântica YOLO26 pré-treinado com o YAML do conjunto de dados usado para 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)

Essas etapas fornecerão métricas de validação como média da Interseção sobre União (mIoU) e precisão de pixel, que são medidas padrão para avaliar o desempenho da segmentação semântica.

Como posso exportar um modelo de segmentação semântica YOLO26 para o formato ONNX?

Exporte um modelo de segmentação semântica YOLO26 para o formato ONNX com Python ou comandos 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 mais detalhes sobre exportação para vários formatos, consulte a página Exportar.

Comentários