Ultralytics YOLO27:
Get Started

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:

nmsPredição e validaçãoExportar
None (padrão)Cabeça one-to-many; a Ultralytics executa NMSSaídas brutas one-to-many; o consumidor executa NMS
TrueIgual a NoneCabeça one-to-many com NMS incorporada quando há suporte
FalseCabeça one-to-one sem supressão por IoUSaí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.

Escolhe o caminho de saída
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 NMS

Como 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çaSaída de detecção antes do processamento externoProcessamento
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:

TarefaSaída de ponta a pontaDados 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=Nonenms=False
Saída de detecção(N, nc + 4, 8400)(N, 300, 6)
Formato das caixasxywhxyxy
PontuaçõesUma pontuação por classe e candidatoConfiança e ID da classe por detecção
Processamento externoFiltragem por confiança e NMSFiltragem 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=True está 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=True para 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=False seleciona 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 w8a16 recorrem 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=False ou nms=True com 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) em imgsz=640.

  • Sim. O mesmo argumento nms seleciona 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.

Comentários