Ultralytics YOLO27:

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:

nmsPrevisão e validaçãoExportação
None (predefinição)Cabeçote um-para-muitos; Ultralytics executa NMSSaídas brutas um-para-muitos; o consumidor executa NMS
TrueO mesmo que NoneCabeçote um-para-muitos com NMS embutido onde suportado
FalseCabeçote um-para-um sem supressão de IoUSaí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.

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)  # 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 outputs

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

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

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

Comentários