Ultralytics YOLO27:

Exportação de Modelos com Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introdução#

O objetivo final de treinar um modelo é implantá-lo para aplicações no mundo real. O modo de exportação no Ultralytics YOLO26 oferece uma gama versátil de opções para exportar o modelo treinado para diferentes formatos, tornando-o implantável em vários plataformas e dispositivos. Este guia abrangente visa conduzir-te pelas nuances da exportação de modelos, mostrando como alcançar máxima compatibilidade e desempenho.

Consulta a pré-visualização não lançada do YOLO27 para o suporte de exportação planeado.



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

Por que Escolher o Modo de Exportação do YOLO26?#

  • Versatilidade: Exporta para múltiplos formatos, incluindo ONNX, TensorRT, CoreML e muito mais.
  • Desempenho: Obtém até 5x de aceleração de GPU com TensorRT e 3x de aceleração de CPU com ONNX ou OpenVINO.
  • Compatibilidade: Torna o teu modelo universalmente implantável em inúmeros ambientes de hardware e software.
  • Facilidade de Uso: CLI simples e API Python para uma exportação de modelos rápida e direta.

Principais Recursos do Modo de Exportação#

Aqui estão algumas das funcionalidades de destaque:

  • Exportação com Um Clique: Comandos simples para exportar para diferentes formatos.
  • Exportação em Lote: Exporta modelos capazes de inferência em lote.
  • Inferência Otimizada: Os modelos exportados são otimizados para tempos de inferência mais rápidos.
  • Vídeos Tutoriais: Guias detalhados e tutoriais para uma experiência de exportação tranquila.
Dica
  • Exporta para ONNX ou OpenVINO para até 3x de aceleração de CPU.
  • Exporta para TensorRT para até 5x de aceleração de GPU.

Exemplos de utilização#

Exporta um modelo YOLO26n para um formato diferente como ONNX ou TensorRT. Consulta a seção de Argumentos abaixo para obter uma lista completa de argumentos de exportação.

Exemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

Argumentos#

Esta tabela detalha as configurações e opções disponíveis para exportar modelos YOLO para diferentes formatos. Essas configurações são cruciais para otimizar o desempenho, o tamanho e a compatibilidade do modelo exportado em vários plataformas e ambientes. A configuração adequada garante que o modelo esteja pronto para implantação na aplicação desejada com eficiência ideal.

ArgumentoTipoPredefiniçãoDescrição
formatstr'torchscript'Formato alvo do modelo exportado, como 'onnx', 'torchscript', 'engine' (TensorRT) ou outros. Cada formato permite a compatibilidade com diferentes ambientes de implementação.
namestrNoneNome do alvo de hardware para os formatos que exigem um: arquitetura Hailo ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; predefinido como 'hailo8l'), chip Rockchip RKNN (predefinido como 'rk3588'), SoC Huawei Ascend (um --soc_version CANN; predefinido como 'Ascend310B4') ou alvo Qualcomm QNN HTP (predefinido como '73'). É distinto do par de nomes de execução project/name utilizado por outros modos.
imgszint ou tuple640Tamanho de imagem pretendido para a entrada do modelo. Pode ser um inteiro para imagens quadradas (por exemplo, 640 para 640×640) ou uma tupla (height, width) para dimensões específicas. Quando não é fornecido, uma exportação reutiliza o tamanho de treino registado no checkpoint carregado: os checkpoints oficiais YOLO26 registam 768 para depth, 224 para classify, 1024 para OBB e 640 para as restantes tarefas, enquanto um fine-tune regista o imgsz com que foi treinado. Um modelo criado a partir de um YAML não tem tamanho de treino registado e utiliza 640.
kerasboolFalseAtiva a exportação para o formato Keras para TensorFlow SavedModel, proporcionando compatibilidade com o serving e as APIs do TensorFlow.
optimizeboolFalseAtiva uma otimização superior do compilador para DEEPX, reduzindo a latência da inferência e aumentando o tempo de compilação.
quantizeint ou strNonePrecisão de quantização: 16 (FP16, reduz o tamanho do modelo e pode acelerar a inferência em hardware compatível) ou 8 (INT8/PTQ, comprime ainda mais o modelo com perda mínima de precisão, principalmente para dispositivos de borda; precisa de calibração data/fraction); 32/não definido é FP32. Um ponto de verificação treinado com quantize=8 sempre exporta INT8: onnx e engine exportam a partir dos intervalos que ele carrega sem calibração, e outros formatos ou precisões são rejeitados. Os formatos de exportação que suportam precisão mista de peso/ativação também aceitam a notação 'w8a8'/'w16a16'/'w8a16'/'w8a32'. Substitui as opções obsoletas half/int8 (half=True16, int8=True8, ainda aceitas com um aviso de obsolescência). Apenas precisões suportadas pelo formato de destino são permitidas (veja abaixo).
dynamicboolFalsePermite tamanhos de entrada dinâmicos para exportações TorchScript, ONNX, OpenVINO, TensorRT e CoreML, aumentando a flexibilidade no processamento de dimensões de imagem variáveis.
simplifyboolTrueSimplifica o grafo ONNX intermédio com onnxslim para as exportações que criam um (consulta Formatos de exportação), podendo melhorar o desempenho e a compatibilidade com motores de inferência.
opsetintNoneEspecifica a versão do opset ONNX para as exportações que criam um grafo ONNX (consulta Formatos de exportação), garantindo compatibilidade com diferentes analisadores e runtimes ONNX. Se não for definida, utiliza a versão suportada mais recente.
workspacefloat ou NoneNoneDefine o tamanho máximo do workspace, em GiB, para otimizações do TensorRT, equilibrando a utilização de memória e o desempenho. Usa None para alocação automática pelo TensorRT até ao máximo do dispositivo.
nmsbool, opcionalNoneNone exporta previsões brutas de um para muitos para NMS externo; True incorpora NMS onde suportado; False seleciona o cabeçote sem NMS quando disponível. O NMS incorporado no CoreML suporta deteção, segmentação e pose com formas estáticas. Vê o guia de Deteção de Ponta a Ponta.
conffloatNoneLimite de confiança utilizado sempre que é gerado NMS durante a exportação: exportações nms=True; exportações de deteção Hailo não end-to-end; e exportações de deteção, pose e segmentação IMX, que forçam internamente nms=True. O valor predefinido é 0.25 quando não definido.
ioufloat0.7Limite de IoU utilizado sempre que é gerado NMS durante a exportação: exportações nms=True; exportações de deteção Hailo não end-to-end; e exportações de deteção, pose e segmentação IMX, que forçam internamente nms=True.
max_detint300Número máximo de deteções mantidas na saída do modelo exportado. Aplica-se a exportações nms=True em todos os formatos, exceto na deteção CoreML, cuja pipeline NMS nativa não tem limite de deteção, além das exportações de deteção de ponta a ponta sem NMS (YOLO26, YOLOv10, limitadas ao número de âncoras disponíveis) e das exportações de deteção, pose e segmento da IMX.
agnostic_nmsboolFalseAtiva o NMS independente da classe sempre que o NMS é gerado durante a exportação através do pipeline padrão nms=True, incluindo a própria etapa NMS do CoreML, suprimindo caixas sobrepostas com pontuações inferiores entre classes diferentes, em vez de apenas dentro da mesma classe. Não é respeitado pelas configurações NMS geradas pelo Hailo ou pelo IMX, que não têm uma opção independente da classe e permanecem cientes da classe independentemente desta flag. Também é incorporado nas exportações end-to-end sem NMS (YOLO26, YOLOv10), onde apenas impede que a mesma deteção apareça com vários rótulos de classe (duplicados IoU=1.0), não executando supressão baseada no limite de IoU entre caixas distintas.
batchint1Especifica o tamanho do batch de inferência do modelo exportado ou o número máximo de imagens que o modelo exportado processará simultaneamente no modo predict. Para exportações Edge TPU, é definido automaticamente como 1.
devicestrNoneEspecifica o dispositivo para a exportação: GPU (device=0), CPU (device=cpu), MPS para Apple silicon (device=mps), NPU Huawei Ascend (device=npu ou device=npu:0) ou DLA para NVIDIA Jetson (device=dla:0 ou device=dla:1). As exportações TensorRT utilizam automaticamente a GPU, mas o TensorRT 11.0 não suporta DLA.
verboseboolFalseEleva o registo do builder TensorRT para a severidade VERBOSE durante a exportação format='engine'. Os outros formatos de exportação ignoram esta opção.
datastrNoneCaminho para o YAML do conjunto de dados, essencial para a calibração de quantização INT8; a classificação, por sua vez, aceita um diretório de conjunto de dados ou um nome de conjunto de dados integrado. Se não for especificado com o INT8 ativado, a Ultralytics seleciona um conjunto de dados de calibração específico para a tarefa quando necessário, ou recorre ao conjunto de dados padrão para a tarefa do modelo. Um ponto de verificação treinado com quantize=8 carrega seus próprios intervalos INT8 e não precisa de dados de calibração.
splitstr'val'Divisão do dataset ('train', 'val' ou 'test') utilizada para criar o dataloader de calibração da quantização INT8 a partir de data.
fractionfloat, int ou list1.0Subconjunto do dataset utilizado para a calibração INT8: uma proporção, uma contagem de imagens ou valores [train, val, test]. 1 significa a divisão completa; inteiros superiores a 1 são contagens de imagens; e apenas a entrada de teste opcional aceita 0/0.0 para significar nenhum. As listas com dois itens deixam test completo.

O ajuste desses parâmetros permite a personalização do processo de exportação para atender a requisitos específicos, como ambiente de implantação, restrições de hardware e metas de desempenho. Selecionar o formato e as configurações apropriados é essencial para alcançar o melhor equilíbrio entre tamanho do modelo, velocidade e precisão.

Formatos de exportação#

Os formatos de exportação disponíveis do YOLO26 estão na tabela abaixo. Podes exportar para qualquer formato usando o argumento format, ou seja, format='onnx' ou format='engine'. Podes prever ou validar diretamente em modelos exportados, ou seja, yolo predict model=yolo26n.onnx. Exemplos de uso são mostrados para o teu modelo após a conclusão da exportação. Os modelos também podem ser exportados diretamente do navegador na Ultralytics Platform sem qualquer configuração local.

FormatoArgumento formatModeloMetadadosArgumentos
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz, batch, quantize

nms=None por padrão utiliza saídas brutas para NMS externo. Define nms=False para selecionar uma cabeça livre de NMS disponível; os formatos não suportados recorrem ao seu caminho de saída nativo. As entradas nms acima identificam formatos que podem incorporar NMS com nms=True.

Instalação automática das dependências de exportação

A maioria dos formatos precisa de pacotes que não são instalados com ultralytics. Quando um estiver em falta, a exportação instala-o em tempo de execução com uv ou pip, e no Linux com apt para pacotes de sistema, como o compilador Edge TPU ou o Java para IMX. Para manter o ambiente fixo, por exemplo numa imagem de contentor, trabalho de CI ou serviço de produção, define YOLO_AUTOINSTALL=False. A exportação continua então a verificar os pacotes em falta e reporta-os, mas deixa o ambiente inalterado e falha até estes serem instalados.

export YOLO_AUTOINSTALL=False

Opções de Quantização#

Usa o argumento quantize para solicitar a precisão de exportação. Os valores de texto não diferenciam maiúsculas de minúsculas, e o Ultralytics padroniza os apelidos aceitos antes da exportação:

Valores solicitadosValor canônicoSignificado
8, "8", "int8", "w8a8"8Pesos e ativações INT8
16, "16", "fp16", "w16a16"16Pesos e ativações FP16
32, "32", "fp32", "w32a32"32Exportação FP32; o mesmo que não definido, exceto para Programas ML de NMS do CoreML, que usam FP16 por padrão
"w8a16""w8a16"Pesos INT8 com ativações de 16 bits (FP16; INT16 no LiteRT)
"w8a32""w8a32"Pesos INT8 com ativações FP32 (INT8 dinâmico do LiteRT, sem necessidade de calibração)

As flags legadas half=True e int8=True ainda são aceitas com avisos de descontinuação e são encaminhadas para quantize=16 e quantize=8.

Nem todo formato de exportação suporta todas as precisões. Solicitações explícitas de quantize produzem essa precisão ou falham antes da exportação:

FormatoFP32 (32/não definido)FP16 (16)INT8 (8)W8A16 ("w8a16")Notas
PyTorchN/AN/AN/AFormato nativo de treinamento/ponto de verificação.
TorchScript✅ Apenas GPUA exportação FP16 do TorchScript requer device=0; a exportação de CPU é FP32.
ONNXO INT8 usa quantização estática e dados de calibração do ONNX Runtime.
OpenVINOO INT8 usa quantização pós-treinamento do NNCF.
TensorRTO INT8 precisa de dados de calibração representativos.
CoreML✅¹O INT8 do CoreML é quantização de pesos; o W8A16 usa pesos INT8 com ativações FP16. ¹Programas ML de NMS não definidos usam FP16 por padrão.
TF SavedModelA exportação INT8 usa calibração do TensorFlow.
TF GraphDefSem conversão de precisão no momento da exportação.
Edge TPU✅ automáticoO Edge TPU requer INT8; ele é ativado automaticamente quando não definido.
PaddlePaddleSem conversão de precisão no momento da exportação.
MNNO INT8 é a quantização de pesos através da conversão do MNN.
NCNNFormato de tempo de execução móvel/embarcado.
IMX500✅ automáticoO IMX500 requer quantização; o INT8 é ativado automaticamente quando não definido.
RKNN✅ dependente do chipRK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B suportam FP16 ou INT8; as variantes RV1103/RV1106 são apenas INT8.
ExecuTorchSem conversão de precisão no momento da exportação.
Axelera✅ automáticoA exportação do Axelera requer INT8; ela é ativada automaticamente quando não definida.
DEEPX✅ automáticoA exportação do DEEPX requer INT8; ela é ativada automaticamente quando não definida.
Qualcomm QNN✅ automáticoA exportação do QNN HTP é fixa para pesos INT8 com ativações de 16 bits.
LiteRTINT8 estático (8) e "w8a16" (pesos int8 + ativações int16) usam dados de calibração; também suporta INT8 dinâmico "w8a32" (sem calibração). quantize=16 não é uma exportação separada; um modelo FP32 é executado em FP16 em tempo de execução através do delegado de GPU.
Hailo✅ automáticoA exportação para Hailo requer INT8; essa opção é ativada automaticamente quando não definida.
Huawei Ascend✅ automáticoAs convoluções do Ascend AI Core aceitam apenas entradas FP16/INT8, portanto o ATC compila FP16; ele é ativado automaticamente quando não definido.
Core AIFP32 por padrão ou um ativo FP16 .aimodel com quantize=16; sem caminho INT8.

Para exportações INT8 e W8A16, fornece dados de calibração representativos com data, como data="coco8.yaml", a menos que a integração de destino documente um comportamento padrão ou ativado automaticamente. O esquema "w8a32" (INT8 dinâmico) do LiteRT não precisa de dados de calibração.

Treinamento Consciente de Quantização#

As exportações INT8 acima são quantização pós-treinamento (PTQ): os intervalos são observados em uma única passada de calibração sobre data. O treinamento com consciência de quantização (QAT) em vez disso aprende pesos que toleram INT8 ajustando com falsa quantização no loop, o que recupera a precisão que apenas a calibração perde. Passa quantize=8 para train para ajustar um ponto de verificação pré-treinado, depois exporta-o normalmente:

Exemplo
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco.yaml",
    quantize=8,
    epochs=5,
    batch=64,
    optimizer="AdamW",
    lr0=0.00001,
    lrf=0.1,
    warmup_epochs=0.5,
    cos_lr=True,
    mosaic=0.0,
)
model.export(format="engine", quantize=8)  # ranges travel with the checkpoint, no calibration data needed

Usa uma taxa de aprendizado pequena ao ajustar um ponto de verificação pré-treinado. O treinamento consciente de quantização pode inicialmente reduzir a precisão, e o seu benefício sobre a quantização pós-treinamento depende do modelo, conjunto de dados e orçamento de treinamento. Valida o modelo exportado em relação tanto ao ponto de verificação original quanto a uma exportação quantizada pós-treinamento; as pontuações de falsa quantização durante o treinamento não estabelecem a precisão de implantação.

Quanto vale o QAT depende de quão bem a própria calibração do backend de exportação lida com o modelo. Os valores abaixo são mAP50-95 no COCO val2017, medidos com motores TensorRT 10.16 em imgsz=640 e lote 1, onde cada ponto de verificação QAT foi treinado com epochs=20 patience=3:

ModeloMotor FP32Motor INT8 PTQMotor INT8 QAT
yolo26n0.40320.39340.3935
yolo26s0.47940.44120.4711
yolo26m0.52690.46960.5137
yolo26l0.54400.48890.5307
yolo26x0.57010.51380.5527

O QAT custa 0,008 a 0,017 de mAP50-95 em relação ao FP32 em toda a gama, enquanto a quantização pós-treinamento custa 0,010 em yolo26n e 0,038 a 0,057 nos modelos maiores. Portanto, o QAT quase não traz ganhos no modelo menor, onde a calibração já funciona bem, e 0,030 a 0,044 no restante. Espera valores diferentes em outro conjunto de dados, formato de exportação ou versão do TensorRT, e mede os teus.

Os modelos de treinamento consciente de quantização requerem compile=False; os módulos quantizados do ModelOpt não suportam torch.compile.

As convoluções de saída final da cabeça são deixadas deliberadamente em float para limitar a perda de precisão do INT8; o TensorRT habilita a precisão mista FP16 para suas camadas não quantizadas. O QAT é executado através do NVIDIA TensorRT Model Optimizer, instalado automaticamente no primeiro uso, e o ponto de verificação resultante precisa dele instalado para ser carregado. Esses intervalos viajam com o ponto de verificação e as exportações de onnx e engine os emitem como nós Q/DQ; outros formatos leem a calibração em vez disso e rejeitam um ponto de verificação QAT.

E agora?#

Encontra o guia de integração do teu destino de implantação — ONNX, TensorRT, CoreML e muito mais estão na lista completa de integrações — para saber como executar o modelo exportado.

Perguntas frequentes#

  • Exportar um modelo YOLO26 para o formato ONNX é simples com o Ultralytics. Ele fornece métodos em Python e CLI para exportar modelos.

    Exemplo
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load an official model
    model = YOLO("path/to/best.pt")  # load a custom-trained model
    
    # Export the model
    model.export(format="onnx")

    Para mais detalhes sobre o processo, incluindo opções avançadas como o tratamento de diferentes tamanhos de entrada, consulta o guia de integração do ONNX.

  • Usar o TensorRT para exportação de modelos oferece melhorias significativas de desempenho. Modelos YOLO26 exportados para o TensorRT podem alcançar até 5x de aceleração de GPU, tornando-o ideal para aplicações de inferência em tempo real.

    • Versatilidade: Otimiza modelos para uma configuração de hardware específica.
    • Velocidade: Alcança inferência mais rápida através de otimizações avançadas.
    • Compatibilidade: Integra-se perfeitamente com o hardware da NVIDIA.

    Para saber mais sobre como integrar o TensorRT, consulta o guia de integração do TensorRT.

  • A quantização INT8 é uma excelente maneira de comprimir o modelo e acelerar a inferência, especialmente em dispositivos de ponta. Eis como podes ativar a quantização INT8:

    Exemplo
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Load a model
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    A quantização INT8 pode ser aplicada a formatos como ONNX, TensorRT, OpenVINO, CoreML e Rockchip RKNN. Para resultados ótimos de quantização, fornece um conjunto de dados representativo usando o parâmetro data. Consulta as Opções de Quantização para valores aceitos de quantize e formatos suportados.

  • O tamanho de entrada dinâmico permite que o modelo exportado lide com dimensões de imagem variadas, proporcionando flexibilidade e otimizando a eficiência de processamento para diferentes casos de uso. Ao exportar para formatos como ONNX ou TensorRT, ativar o tamanho de entrada dinâmico garante que o modelo possa se adaptar a diferentes formatos de entrada perfeitamente.

    Para ativar esse recurso, usa a flag dynamic=True durante a exportação:

    Exemplo
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="onnx", dynamic=True)

    O dimensionamento de entrada dinâmico é particularmente útil para aplicações onde as dimensões de entrada podem variar, como processamento de vídeo ou ao lidar com imagens de diferentes fontes.

  • Compreender e configurar os argumentos de exportação é crucial para otimizar o desempenho do modelo:

    • format: O formato de destino para o modelo exportado (por exemplo, onnx, torchscript, saved_model).
    • imgsz: Tamanho de imagem desejado para a entrada do modelo (por exemplo, 640 ou (height, width)).
    • quantize: Precisão da quantização, como 8/"int8", 16/"fp16", 32/"fp32", ou os esquemas mistos de pesos e ativações "w8a16" e "w8a32" (INT8 dinâmico do LiteRT) em formatos suportados. Consulta as Opções de Quantização.
    • optimize: Ativa maior otimização do compilador para exportações do DEEPX.

    Para implantação em plataformas de hardware específicas, considera usar formatos de exportação especializados como TensorRT para GPUs NVIDIA, CoreML para dispositivos Apple, ou Edge TPU para dispositivos Google Coral.

  • Quando exportas um modelo YOLO para formatos como ONNX ou TensorRT, a estrutura do tensor de saída depende da tarefa do modelo. Compreender essas saídas é importante para implementações de inferência personalizadas.

    Para modelos de detecção YOLO26 (por exemplo, yolo26n.pt) exportados com nms=False, os formatos suportados produzem saída sem NMS modelada como (batch_size, max_detections, 6) com valores de [x1, y1, x2, y2, confidence, class_id]. Com o max_det=300 padrão, isso é comumente (batch_size, 300, 6). Alguns formatos restritos recorrem automaticamente ao layout de saída tradicional quando operadores de ponta a ponta não são suportados.

    Por padrão (nms=None), modelos de detecção, incluindo YOLO26, exportam previsões brutas de um para muitos: a saída é tipicamente um único tensor moldado como (batch_size, 4 + num_classes, num_predictions), onde os canais representam coordenadas de caixa mais pontuações por classe, e num_predictions depende da resolução de entrada de exportação (e pode ser dinâmica). O End-to-End Detection guide aborda quais formatos mantêm a saída de ponta a ponta.

    Para modelos de segmentação (por exemplo, yolo26n-seg.pt), normalmente obterás duas saídas: o primeiro tensor com o formato de (batch_size, 4 + num_classes + mask_dim, num_predictions) (caixas, pontuações de classe e coeficientes de máscara) e o segundo tensor com o formato de (batch_size, mask_dim, proto_h, proto_w), contendo protótipos de máscara usados com os coeficientes para gerar máscaras de instâncias. Os tamanhos dependem da resolução de entrada de exportação (e podem ser dinâmicos).

    Para modelos de pose (por exemplo, yolo26n-pose.pt), o tensor de saída tem tipicamente o formato de (batch_size, 4 + num_classes + keypoint_dims, num_predictions), onde keypoint_dims depende da especificação de pose (por exemplo, número de pontos-chave e se a confiança está incluída) e num_predictions depende da resolução de entrada de exportação (e pode ser dinâmico).

    Os exemplos nos Exemplos de inferência ONNX demonstram como processar essas saídas para cada tipo de modelo.

  • O Ultralytics atualmente não fornece uma API de inferência C++ dedicada para modelos YOLO. Para implantações em C++, exporta o modelo para um formato de tempo de execução como ONNX, TensorRT, TorchScript ou MNN e, em seguida, carrega o artefato exportado com a API C++ nativa desse tempo de execução.

    Por exemplo, exporta um modelo de detecção com yolo export model=yolo26n.pt format=onnx e executa o ficheiro .onnx com ONNX Runtime C++, ou exporta com format=engine e executa o motor TensorRT a partir de uma aplicação C++ TensorRT. Quando utilizas pós-processamento C++ personalizado, corresponde o layout do tensor de saída para a tua tarefa e definições de exportação; as exportações de deteção YOLO26 padrão retornam tensores de previsão brutos que requerem NMS externo. Exporta com nms=False para deteções sem NMS moldadas (batch, max_det, 6), ou nms=True para incorporar NMS em formatos suportados.

  • Ao exportar com quantize=16 (FP16) ou quantize=8 (INT8), a maioria dos tensores é convertida para menor precisão para reduzir o tamanho do modelo e melhorar o desempenho. No entanto, quando nms=False é ativado, o pós-processamento (incluindo índices de classe) é incorporado diretamente no grafo exportado.

    O tensor output0 contém índices de classe, que são representados internamente como valores de ponto flutuante. O FP16 não consegue representar com fiabilidade valores inteiros acima de 2048 devido à sua precisão de mantissa limitada. Para evitar potencial perda de precisão ou IDs de classe incorretos, output0 é intencionalmente mantido em FP32.

    Este comportamento é esperado e também se aplica a exportações de menor precisão ou quantizadas onde a fidelidade do índice de classe deve ser preservada.

    Se forem necessárias saídas completas em FP16, exporta com nms=None e executa o pós-processamento externamente.

Comentários