Compreender a deteção de ponta a ponta no Ultralytics YOLO26#
YOLO26 treina tanto um cabeçote um-para-muitos quanto um cabeçote um-para-um. A previsão e a validação utilizam o cabeçote um-para-muitos com Supressão Não Máxima (NMS) por padrão. Isso favorece a precisão usando os mesmos pesos treinados. Define nms=False para usar o cabeçote um-para-um mais rápido e sem NMS.
Um argumento controla a escolha entre previsão, validação, rastreamento, exportação e benchmarking:
nms | Previsão e validação | Exportação |
|---|---|---|
None (predefinição) | Cabeçote um-para-muitos; Ultralytics executa NMS | Saídas brutas um-para-muitos; o consumidor executa NMS |
True | O mesmo que None | Cabeçote um-para-muitos com NMS embutido onde suportado |
False | Cabeçote um-para-um sem supressão de IoU | Saídas um-para-um sem NMS onde suportado |
None significa que nenhum pós-processamento opcional está embutido no modelo. Ele não remove o processamento normal que converte as saídas do modelo em resultados de previsão ou métricas de validação. Classificação, segmentação semântica, profundidade e modelos sem cabeçotes de detecção selecionáveis mantêm o comportamento nativo da tarefa.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.predict("image.jpg") # one-to-many + NMS
metrics = model.val(data="coco.yaml") # one-to-many + NMS
results = model.predict("image.jpg", nms=False) # opt into NMS-free inference
results = model.predict("image.jpg", nms=None) # switch back to one-to-many + NMS
model.export(format="onnx") # raw one-to-many outputs
model.export(format="onnx", nms=True) # embed NMS
model.export(format="onnx", nms=False) # NMS-free one-to-one outputsComo funciona a deteção de ponta a ponta#
Ambos os cabeçotes compartilham o espinhaço e o pescoço e são otimizados durante o treinamento. O cabeçote um-para-muitos fornece múltiplas previsões candidatas por objeto; NMS remove detecções sobrepostas. O cabeçote um-para-um aprende a produzir uma única previsão por objeto. Selecionar o caminho de inferência não desativa a supervisão de cabeçote duplo. A validação durante o treinamento usa o cabeçote de inferência selecionado, portanto, a seleção de pontos de verificação e a parada antecipada seguem as mesmas previsões que a implantação.
| Cabeça | Saída de detecção antes do processamento externo | Processamento |
|---|---|---|
| Um-para-muitos (padrão) | (N, nc + 4, 8400) | Filtragem de confiança e NMS |
| Um-para-um | (N, 300, 6) | Filtragem de confiança; sem supressão de IoU |
Aqui N é o tamanho do lote, nc é o número de classes e 8400 é a contagem de candidatos em imgsz=640. As linhas de detecção um-para-um contêm [x1, y1, x2, y2, confidence, class_id]. Outras tarefas de detecção carregam saídas adicionais:
| Tarefa | Saída ponta a ponta | Dados extras |
|---|---|---|
| Deteção | (N, 300, 6) | — |
| Segmentação de instâncias | (N, 300, 6 + nm) e (N, nm, H, W) | Coeficientes de máscara e protótipos |
| Pose | (N, 300, 57) | 17 pontos-chave × 3 valores |
| OBB | (N, 300, 7) | Ângulo de rotação |
A fusão remove ramos de inferência não utilizados, bem como dobra as camadas Conv e BatchNorm. Mantém o ponto de verificação de treinamento original se precisares de alternar cabeçotes: a fusão não consegue reconstruir um ramo que já foi removido. Um modelo com apenas o seu cabeçote um-para-um restante mantém esse caminho disponível.
Saídas exportadas#
Os modelos de detecção YOLOv8, YOLO11 e YOLO26 exportam previsões brutas um-para-muitos por padrão. Exporta YOLO26 com nms=False para detecções sem NMS.
nms=None | nms=False | |
|---|---|---|
| Saída de detecção | (N, nc + 4, 8400) | (N, 300, 6) |
| Formato de caixa | xywh | xyxy |
| Pontuações | Uma pontuação por classe por candidato | Confiança e ID de classe por detecção |
| Processamento externo | Filtragem de confiança e NMS | Filtragem de confiança |
nms=True também produz detecções processadas, mas usa o cabeçote um-para-muitos e incorpora NMS tradicional. É útil quando o teu tempo de execução de implantação deve receber detecções sem implementar a própria supressão.
O gráfico de um modelo exportado determina as suas saídas. Passar nms ao carregá-lo não reconstrói o gráfico; exporta o ponto de verificação de origem com o valor nms desejado para selecionar o seu caminho de saída. A Ultralytics usa os metadados do artefato para evitar aplicar NMS duas vezes.
Compatibilidade dos formatos de exportação#
ONNX, TensorRT, CoreML, OpenVINO e vários outros formatos suportam exportações sem NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU e Qualcomm QNN retornam ao caminho um-para-muitos quando os seus operadores não suportam saída ponta a ponta. Os avisos de formato explicam o retorno.
- NMS embutido:
nms=Trueestá sujeito às restrições de tarefa, precisão e forma dinâmica de cada formato. Formatos sem suporte a NMS embutido exportam saídas nativas para processamento externo. - CoreML: O NMS embutido suporta detecção, segmentação e pose com formas estáticas. Usa
nms=Truepara modelos de detecção que precisam do pipeline NMS do Xcode Preview. - MNN: O NMS embutido suporta detecção e pose com
dynamic=False. - IMX: Detecção, segmentação de instâncias e pose requerem NMS embutido, selecionado automaticamente.
- Hailo: O YOLO26 usa tensores brutos com NMS do host por padrão;
nms=Falseseleciona o seu caminho um-para-um. A detecção YOLOv8/YOLO11 usa HailoRT NMS. - Quantização: As versões do TensorRT anteriores à 8.5.0, TensorRT 10.3.0 INT8 no JetPack 6, e LiteRT INT8 ou
w8a16retornam a saídas um-para-muitos.
Consulta os guia de integrações individuais para requisitos de hardware. Para tensores de saída FP16 completos, usa nms=None; os índices de classe ponta a ponta podem manter os tensores de saída em FP32 mesmo quando o modelo é quantizado.
Compromissos entre precisão e velocidade#
Os resultados COCO YOLO26 publicados mostram que o cabeçote um-para-muitos melhora o mAP de detecção em 0,6–0,8 pontos nas cinco escalas: por exemplo, 40,9 versus 40,1 para YOLO26n, e 57,5 versus 56,9 para YOLO26x. O cabeçote um-para-um evita a passagem de NMS e favorece a latência. Esses resultados motivam o padrão; eles não garantem um ganho em todos os conjuntos de dados.
As medidas de velocidade sem NMS publicadas usam nms=False. Compara a precisão e a latência usando a mesma seleção de cabeçotes, tamanho de imagem, precisão e hardware.
Perguntas frequentes#
Isto limita as detecções devolvidas pela predição e validação. Para exportações de ponta a ponta e com NMS incorporado, o limite faz parte do grafo, por isso reexporta para o alterares; a detecção com NMS incorporado do CoreML é a excepção e não tem limite de detecção. A saída de ponta a ponta pode conter menos candidatos quando a imagem fornece menos de
max_detâncoras.Sim, para
nms=Falseounms=Truecom o limite de detecção padrão. A forma sozinha não identifica qual cabeçote foi exportado. Uma exportação de detecção COCO bruta padrão tem normalmente a forma(1, 84, 8400)emimgsz=640.Sim. O mesmo argumento
nmsseleciona o cabeçote de detecção disponível para detecção, segmentação de instâncias, pose e OBB. Ele não substitui a reconstrução de máscaras, decodificação de pontos-chave, manuseio de caixas rotacionadas, probabilidades de classificação, mapas de classes semânticas ou decodificação de profundidade.