Segmentação de instâncias com Ultralytics YOLO#
A segmentação de instâncias vai além da deteção de objetos: consiste em identificar objetos individuais numa imagem e segmentá-los do restante da imagem.
O resultado de um modelo de segmentação de instâncias é um conjunto de máscaras ou contornos que delineiam cada objeto na imagem, juntamente com rótulos de classe e pontuações de confiança para cada objeto. A segmentação de instâncias é útil quando precisas de saber não só onde estão os objetos numa imagem, mas também qual é a sua forma exata.
Assista: Execute a segmentação com um modelo Ultralytics YOLO pré-treinado em Python.
Os modelos YOLO26 Segment usam o sufixo -seg, por exemplo, yolo26n-seg.pt, e são pré-treinados no COCO.
Modelos#
Os modelos YOLO26 Segment pré-treinados no conjunto de dados COCO são apresentados abaixo.
Os modelos são transferidos automaticamente da versão mais recente do Ultralytics na primeira utilização.
| Modelo | tamanho (pixels) | mAPcaixa 50-95(e2e) | mAPmáscara 50-95(e2e) | Velocidade CPU ONNX (ms) | Velocidade T4 TensorRT10 (ms) | parâmetros (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.3 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.5 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.7 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 140.1 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 314.0 |
- Os valores mAPval correspondem a um único modelo e escala no conjunto de dados COCO val2017.
Reproduz comyolo segment val data=coco.yaml device=0 nms=False - Velocidade média nas imagens de COCO val com ONNX em CPU e TensorRT10 numa GPU NVIDIA T4.
Reproduz os resultados comyolo segment val data=coco.yaml batch=1 device=0|cpu nms=False - Os valores de Params e FLOPs referem-se a modelos fundidos após a fusão de Conv/BatchNorm e a remoção do ramo de deteção não utilizado. Os pontos de controlo pré-treinados mantêm a arquitetura de treino completa e podem apresentar contagens superiores.
Estes checkpoints segmentam as 80 classes do COCO. Para segmentar categorias fora dessa lista sem voltar a treinar, consulta o YOLOE, que recebe as classes como um prompt de texto, um exemplo visual ou um vocabulário integrado.
Consulta a prévia não lançada do YOLO27 para ver resultados preliminares de caixas e máscaras no COCO.
Treinar#
Treina YOLO26n-seg no conjunto de dados COCO8-seg durante 100 épocas, com um tamanho de imagem de 640. Para ver a lista completa de argumentos disponíveis, consulta a página de Configuração.
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n-seg.yaml") # crie um novo modelo a partir de YAML
model = YOLO("yolo26n-seg.pt") # carregue um modelo pré-treinado (recomendado para treinamento)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # crie a partir de YAML e transfira os pesos
# Treinar o modelo
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Consulta a página Treino para ver todos os detalhes do modo train. Também podes treinar modelos de segmentação com o treino na nuvem da Ultralytics Platform.
Formato do conjunto de dados#
Encontras informações detalhadas sobre o formato de conjunto de dados de segmentação YOLO no Guia de conjuntos de dados. Para converter um conjunto de dados COCO JSON existente para o formato YOLO, usa a função integrada convert_coco com use_segments=True, conforme descrito no guia de conversão de COCO para YOLO. Também podes criar máscaras de segmentação com a anotação da Ultralytics Platform, usando ferramentas de polígonos e anotação inteligente com tecnologia SAM.
Validar#
Valida a precisão do modelo YOLO26n-seg treinado. Não precisas de argumentos, pois model mantém os dados de treino data e os argumentos como atributos do modelo: path/to/best.pt do exemplo de Treino valida o modelo no COCO8-seg. Os pesos oficiais registam um caminho para o conjunto de dados de treino que não existe na tua máquina, por isso recorrem ao valor predefinido da tarefa coco8-seg.yaml e apresentam um aviso. Passa data para validar noutro conjunto de dados.
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n-seg.pt") # carrega um modelo oficial
model = YOLO("path/to/best.pt") # carregar um modelo personalizado
# Valida o modelo
metrics = model.val() # não são necessários argumentos; o conjunto de dados e as definições são guardados
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # uma lista que contém mAP50-95(B) para cada categoria
metrics.box.image_metrics # dicionário de métricas por imagem para det, com precisão, revocação, F1, TP, FP e FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # uma lista que contém mAP50-95(M) para cada categoria
metrics.seg.image_metrics # dicionário de métricas por imagem para seg, com precisão, revocação, F1, TP, FP e FNPrever#
Usa um modelo YOLO26n-seg treinado para fazer predições em imagens.
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n-seg.pt") # carrega um modelo oficial
model = YOLO("path/to/best.pt") # carregar um modelo personalizado
# Faz previsões com o modelo
results = model("https://ultralytics.com/images/bus.jpg") # faz uma previsão numa imagem
# Acede aos resultados
for result in results:
xy = result.masks.xy # polígonos de máscara em coordenadas de píxeis
xyn = result.masks.xyn # polígonos de máscara normalizados
masks = result.masks.data # máscaras binárias, forma (N,H,W), dtype torch.uint8Consulta os detalhes completos do modo predict na página Previsão.
Saída dos resultados#
A segmentação de instâncias do YOLO devolve um objeto Results por imagem. Cada resultado armazena predições ao nível do objeto, em que cada instância detetada tem a sua própria máscara binária, classe, confiança e caixa.
| Atributo | Tipo | Formato | Descrição |
|---|---|---|---|
result.masks | Masks | (N) | Máscaras de instância. |
result.masks.data | torch.uint8 | (N,H,W) | Máscaras binárias, com valores 0 ou 1. |
result.masks.xy | np.float32 | list[(P,2)] | Polígonos em pixels. |
result.masks.xyn | np.float32 | list[(P,2)] | Polígonos normalizados. |
result.boxes | Boxes | (N) | Caixas/classes/confianças de instância. |
result.boxes.cls | torch.float32 | (N,) | IDs de classe; converta para int para obter os nomes. |
Para ver os campos Results específicos de cada tarefa, consulta a secção Resultados da previsão por tarefa.
Segmentação de instâncias vs. segmentação semântica#
A segmentação de instâncias segmenta ao nível do objeto: dois carros produzem duas máscaras, duas caixas e duas pontuações de confiança. A segmentação semântica classifica ao nível do píxel: esses mesmos carros tornam-se píxeis com o mesmo ID de classe num único mapa de classes do tamanho da imagem, sem caixas, pontuações de confiança ou lista de polígonos predefinida por objeto. Consulta a comparação campo a campo na página de segmentação semântica.
Exportar#
Exporta um modelo YOLO26n-seg para outro formato, como ONNX, CoreML, etc.
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n-seg.pt") # carrega um modelo oficial
model = YOLO("path/to/best.pt") # carregar um modelo personalizado
# Exporta o modelo
model.export(format="onnx")Os formatos de exportação disponíveis para YOLO26-seg estão na tabela abaixo. Podes exportar para qualquer formato usando o argumento format, por exemplo, format='onnx' ou format='engine'. Podes fazer predições ou validações diretamente nos modelos exportados, por exemplo, yolo predict model=yolo26n-seg.onnx. Os exemplos de utilização do teu modelo são apresentados após a conclusão da exportação.
O CoreML suporta NMS incorporado (nms=True) para deteção, segmentação de instâncias e pose com formas estáticas. As exportações de segmentação predefinidas (nms=None) deixam o NMS a cargo do consumidor.
| Formato | Argumento format | Modelo | Metadados | Argumentos |
|---|---|---|---|---|
| PyTorch | - | yolo26n-seg.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-seg.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-seg.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-seg_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-seg.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-seg.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-seg.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-seg_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-seg_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-seg.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-seg_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-seg_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-seg_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-seg_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-seg_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-seg_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-seg_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-seg_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None usa por predefinição saídas brutas para NMS externo. Define nms=False para selecionar uma cabeça sem NMS disponível; os formatos não suportados recorrem ao respetivo caminho de saída nativo. As entradas nms acima identificam os formatos que podem incorporar NMS com nms=True.
Consulte os detalhes completos de export na página Exportação.
Perguntas frequentes#
Para treinar um modelo de segmentação YOLO26 num conjunto de dados personalizado, primeiro tens de preparar o conjunto de dados no formato de segmentação YOLO. Podes usar o utilitário integrado
convert_cocopara converter conjuntos de dados COCO JSON. Quando o conjunto de dados estiver pronto, podes treinar o modelo com comandos Python ou CLI:Exemplofrom ultralytics import YOLO # Carrega um modelo YOLO26 Segment pré-treinado model = YOLO("yolo26n-seg.pt") # Treinar o modelo results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)Consulta a página de Configuração para ver mais argumentos disponíveis.
A deteção de objetos identifica e localiza objetos numa imagem, desenhando caixas delimitadoras à sua volta; já a segmentação de instâncias não só identifica as caixas delimitadoras, como também delineia a forma exata de cada objeto. Os modelos de segmentação de instâncias YOLO26 fornecem máscaras ou contornos que delineiam cada objeto detetado, o que é especialmente útil em tarefas nas quais é importante conhecer a forma precisa dos objetos, como imagiologia médica ou condução autónoma.
O Ultralytics YOLO26 é um modelo de última geração, reconhecido pela sua elevada precisão e desempenho em tempo real, o que o torna ideal para tarefas de segmentação de instâncias. Os modelos YOLO26 Segment são pré-treinados no conjunto de dados COCO, garantindo um desempenho robusto com vários tipos de objetos. Além disso, o YOLO suporta funcionalidades de treino, validação, predição e exportação com integração perfeita, o que o torna muito versátil para aplicações de investigação e industriais.
É simples carregar e validar um modelo de segmentação YOLO pré-treinado. Eis como podes fazê-lo com Python e CLI:
Exemplofrom ultralytics import YOLO # Carregar um modelo pré-treinado model = YOLO("yolo26n-seg.pt") # Valida o modelo metrics = model.val() print("Mean Average Precision for boxes:", metrics.box.map) print("Mean Average Precision for masks:", metrics.seg.map)Estes passos fornecem métricas de validação, como Precisão média média (mAP), essenciais para avaliar o desempenho do modelo.
É simples exportar um modelo de segmentação YOLO para o formato ONNX, usando comandos Python ou CLI:
Exemplofrom ultralytics import YOLO # Carregar um modelo pré-treinado model = YOLO("yolo26n-seg.pt") # Exporta o modelo para o formato ONNX model.export(format="onnx")Para mais detalhes sobre a exportação para vários formatos, consulta a página Exportação.