Entendendo a detecção de ponta a ponta na Ultralytics YOLO26#
YOLO26 treina uma cabeça one-to-many e uma cabeça one-to-one. Por padrão, a predição e a validação usam a cabeça one-to-many com supressão não máxima (NMS). Isso favorece a precisão usando os mesmos pesos treinados. Define nms=False para usar, em vez disso, a cabeça one-to-one mais rápida e sem NMS.
Um argumento controla a escolha em predição, validação, rastreamento, exportação e benchmarking:
nms | Predição e validação | Exportar |
|---|---|---|
None (padrão) | Cabeça one-to-many; a Ultralytics executa NMS | Saídas brutas one-to-many; o consumidor executa NMS |
True | Igual a None | Cabeça one-to-many com NMS incorporada quando há suporte |
False | Cabeça one-to-one sem supressão por IoU | Saídas one-to-one sem NMS quando há suporte |
None significa que nenhum pós-processamento opcional está incorporado ao modelo. Isso não remove o processamento normal que converte as saídas do modelo em resultados de predição ou métricas de validação. Classificação, segmentação semântica, profundidade e modelos sem cabeças 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) # optar por inferência sem NMS
results = model.predict("image.jpg", nms=None) # voltar para one-to-many + NMS
model.export(format="onnx") # saídas brutas one-to-many
model.export(format="onnx", nms=True) # incorporar NMS
model.export(format="onnx", nms=False) # saídas one-to-one sem NMSComo funciona a detecção de ponta a ponta#
As duas cabeças compartilham o backbone e o neck e são otimizadas durante o treinamento. A cabeça one-to-many fornece várias predições candidatas por objeto; NMS remove as detecções sobrepostas. A cabeça one-to-one aprende a gerar uma única predição por objeto. Selecionar o caminho de inferência não desativa a supervisão de cabeças duplas. A validação durante o treinamento usa a cabeça de inferência selecionada, portanto, a seleção de checkpoints e a parada antecipada seguem as mesmas predições da implantação.
| Cabeça | Saída de detecção antes do processamento externo | Processamento |
|---|---|---|
| One-to-many (padrão) | (N, nc + 4, 8400) | Filtragem por confiança e NMS |
| One-to-one | (N, 300, 6) | Filtragem por confiança; sem supressão por IoU |
Aqui, N é o tamanho do lote, nc é o número de classes e 8400 é a quantidade de candidatos em imgsz=640. As linhas de detecção one-to-one contêm [x1, y1, x2, y2, confidence, class_id]. Outras tarefas de detecção incluem saídas adicionais:
| Tarefa | Saída de ponta a ponta | Dados adicionais |
|---|---|---|
| Detecçã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 ramificações de inferência não utilizadas e também combina camadas Conv e BatchNorm. Mantém o checkpoint de treinamento original se precisares de alternar entre cabeças: a fusão não consegue reconstruir uma ramificação que já tenha sido removida. Um modelo que mantém apenas a cabeça one-to-one conserva esse caminho disponível.
Saídas exportadas#
Os modelos de detecção YOLOv8, YOLO11 e YOLO26 exportam predições brutas one-to-many por padrão. Exporta YOLO26 com nms=False para obter detecções sem NMS.
nms=None | nms=False | |
|---|---|---|
| Saída de detecção | (N, nc + 4, 8400) | (N, 300, 6) |
| Formato das caixas | xywh | xyxy |
| Pontuações | Uma pontuação por classe e candidato | Confiança e ID da classe por detecção |
| Processamento externo | Filtragem por confiança e NMS | Filtragem por confiança |
nms=True também produz detecções processadas, mas usa a cabeça one-to-many e incorpora o NMS tradicional. É útil quando o teu ambiente de implantação deve receber detecções sem implementar a supressão por conta própria.
O grafo de um modelo exportado determina as saídas. Passar nms ao carregá-lo não reconstrói o grafo; exporta o checkpoint de origem com o valor nms desejado para selecionar o 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 são compatíveis com exportações sem NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU e Qualcomm QNN recorrem ao caminho one-to-many quando os operadores não permitem saída de ponta a ponta. Os avisos do formato explicam essa alternativa.
- NMS incorporado:
nms=Trueestá sujeito às restrições de tarefa, precisão e formato dinâmico de cada formato. Os formatos sem suporte a NMS incorporado exportam saídas nativas para processamento externo. - CoreML: o NMS incorporado é compatível com detecção, segmentação e pose em formatos estáticos. Usa
nms=Truepara modelos de detecção que precisam do pipeline NMS do Xcode Preview. - MNN: o NMS incorporado é compatível com detecção e pose com
dynamic=False. - IMX: detecção, segmentação de instâncias e pose exigem NMS incorporado, selecionado automaticamente.
- Hailo: YOLO26 usa tensores brutos com NMS no host por padrão;
nms=Falseseleciona o caminho one-to-one. A detecção com YOLOv8/YOLO11 usa o NMS do HailoRT. - Quantização: versões do TensorRT anteriores à 8.5.0, TensorRT 10.3.0 INT8 no JetPack 6 e LiteRT INT8 ou
w8a16recorrem a saídas one-to-many.
Consulta os guias de integração individuais para saber os requisitos de hardware. Para obter tensores de saída FP16 completos, usa nms=None; os índices de classe de ponta a ponta podem manter os tensores de saída em FP32 mesmo quando o modelo está quantizado.
Compromissos entre precisão e velocidade#
Os resultados publicados do YOLO26 no COCO mostram que a cabeça one-to-many melhora o mAP de detecção em 0,6–0,8 pontos nas cinco escalas: por exemplo, 40,9 contra 40,1 para YOLO26n e 57,5 contra 56,9 para YOLO26x. A cabeça one-to-one evita a etapa NMS e favorece a latência. Esses resultados justificam o padrão, mas não garantem ganhos em todos os conjuntos de dados.
As medições de velocidade sem NMS publicadas usam nms=False. Compara a precisão e a latência usando a mesma seleção de cabeça, tamanho de imagem, precisão e hardware.
Perguntas frequentes#
Limita as detecções retornadas pela predição e validação. Nas exportações de ponta a ponta e com NMS incorporado, o limite faz parte do grafo, por isso é necessário exportar novamente para alterá-lo; o NMS incorporado à detecção CoreML é a exceção e não tem limite de detecções. A saída de ponta a ponta pode conter menos candidatos se a imagem fornecer menos âncoras do que
max_det.Sim, para
nms=Falseounms=Truecom o limite de detecções padrão. Só o formato não permite identificar qual cabeça foi exportada. Uma exportação padrão de detecção COCO bruta normalmente tem o formato(1, 84, 8400)emimgsz=640.Sim. O mesmo argumento
nmsseleciona a cabeça 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, a decodificação de pontos-chave, o tratamento de caixas rotacionadas, as probabilidades de classificação, os mapas de classes semânticas nem a decodificação de profundidade.