Exportação de Modelos com Ultralytics YOLO#
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.
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.
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.
| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
format | str | 'torchscript' | Formato alvo do modelo exportado, como 'onnx', 'torchscript', 'engine' (TensorRT) ou outros. Cada formato permite a compatibilidade com diferentes ambientes de implementação. |
name | str | None | Nome 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. |
imgsz | int ou tuple | 640 | Tamanho 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. |
keras | bool | False | Ativa a exportação para o formato Keras para TensorFlow SavedModel, proporcionando compatibilidade com o serving e as APIs do TensorFlow. |
optimize | bool | False | Ativa uma otimização superior do compilador para DEEPX, reduzindo a latência da inferência e aumentando o tempo de compilação. |
quantize | int ou str | None | Precisã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=True → 16, int8=True → 8, ainda aceitas com um aviso de obsolescência). Apenas precisões suportadas pelo formato de destino são permitidas (veja abaixo). |
dynamic | bool | False | Permite 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. |
simplify | bool | True | Simplifica 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. |
opset | int | None | Especifica 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. |
workspace | float ou None | None | Define 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. |
nms | bool, opcional | None | None 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. |
conf | float | None | Limite 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. |
iou | float | 0.7 | Limite 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_det | int | 300 | Nú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_nms | bool | False | Ativa 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. |
batch | int | 1 | Especifica 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. |
device | str | None | Especifica 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. |
verbose | bool | False | Eleva 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. |
data | str | None | Caminho 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. |
split | str | '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. |
fraction | float, int ou list | 1.0 | Subconjunto 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.
| Formato | Argumento format | Modelo | Metadados | Argumentos |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, 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.
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=FalseOpçõ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 solicitados | Valor canônico | Significado |
|---|---|---|
8, "8", "int8", "w8a8" | 8 | Pesos e ativações INT8 |
16, "16", "fp16", "w16a16" | 16 | Pesos e ativações FP16 |
32, "32", "fp32", "w32a32" | 32 | Exportaçã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:
| Formato | FP32 (32/não definido) | FP16 (16) | INT8 (8) | W8A16 ("w8a16") | Notas |
|---|---|---|---|---|---|
| PyTorch | ✅ | N/A | N/A | N/A | Formato nativo de treinamento/ponto de verificação. |
| TorchScript | ✅ | ✅ Apenas GPU | ❌ | ❌ | A exportação FP16 do TorchScript requer device=0; a exportação de CPU é FP32. |
| ONNX | ✅ | ✅ | ✅ | ❌ | O INT8 usa quantização estática e dados de calibração do ONNX Runtime. |
| OpenVINO | ✅ | ✅ | ✅ | ❌ | O INT8 usa quantização pós-treinamento do NNCF. |
| TensorRT | ✅ | ✅ | ✅ | ❌ | O 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 SavedModel | ✅ | ❌ | ✅ | ❌ | A exportação INT8 usa calibração do TensorFlow. |
| TF GraphDef | ✅ | ❌ | ❌ | ❌ | Sem conversão de precisão no momento da exportação. |
| Edge TPU | ❌ | ❌ | ✅ automático | ❌ | O Edge TPU requer INT8; ele é ativado automaticamente quando não definido. |
| PaddlePaddle | ✅ | ❌ | ❌ | ❌ | Sem conversão de precisão no momento da exportação. |
| MNN | ✅ | ✅ | ✅ | ❌ | O INT8 é a quantização de pesos através da conversão do MNN. |
| NCNN | ✅ | ✅ | ❌ | ❌ | Formato de tempo de execução móvel/embarcado. |
| IMX500 | ❌ | ❌ | ✅ automático | ✅ | O IMX500 requer quantização; o INT8 é ativado automaticamente quando não definido. |
| RKNN | ❌ | ✅ dependente do chip | ✅ | ❌ | RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B suportam FP16 ou INT8; as variantes RV1103/RV1106 são apenas INT8. |
| ExecuTorch | ✅ | ❌ | ❌ | ❌ | Sem conversão de precisão no momento da exportação. |
| Axelera | ❌ | ❌ | ✅ automático | ❌ | A exportação do Axelera requer INT8; ela é ativada automaticamente quando não definida. |
| DEEPX | ❌ | ❌ | ✅ automático | ❌ | A exportação do DEEPX requer INT8; ela é ativada automaticamente quando não definida. |
| Qualcomm QNN | ❌ | ❌ | ❌ | ✅ automático | A exportação do QNN HTP é fixa para pesos INT8 com ativações de 16 bits. |
| LiteRT | ✅ | ❌ | ✅ | ✅ | INT8 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ático | ❌ | A exportação para Hailo requer INT8; essa opção é ativada automaticamente quando não definida. |
| Huawei Ascend | ❌ | ✅ automático | ❌ | ❌ | As convoluções do Ascend AI Core aceitam apenas entradas FP16/INT8, portanto o ATC compila FP16; ele é ativado automaticamente quando não definido. |
| Core AI | ✅ | ✅ | ❌ | ❌ | FP32 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:
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 neededUsa 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:
| Modelo | Motor FP32 | Motor INT8 PTQ | Motor INT8 QAT |
|---|---|---|---|
yolo26n | 0.4032 | 0.3934 | 0.3935 |
yolo26s | 0.4794 | 0.4412 | 0.4711 |
yolo26m | 0.5269 | 0.4696 | 0.5137 |
yolo26l | 0.5440 | 0.4889 | 0.5307 |
yolo26x | 0.5701 | 0.5138 | 0.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.
Exemplofrom 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:
Exemplofrom 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 dequantizee 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=Truedurante a exportação:Exemplofrom 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,640ou(height, width)).quantize:Precisão da quantização, como8/"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 comnms=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 omax_det=300padrã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, enum_predictionsdepende 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), ondekeypoint_dimsdepende da especificação de pose (por exemplo, número de pontos-chave e se a confiança está incluída) enum_predictionsdepende 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=onnxe executa o ficheiro.onnxcom ONNX Runtime C++, ou exporta comformat=enginee 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 comnms=Falsepara deteções sem NMS moldadas(batch, max_det, 6), ounms=Truepara incorporar NMS em formatos suportados.Ao exportar com
quantize=16(FP16) ouquantize=8(INT8), a maioria dos tensores é convertida para menor precisão para reduzir o tamanho do modelo e melhorar o desempenho. No entanto, quandonms=Falseé ativado, o pós-processamento (incluindo índices de classe) é incorporado diretamente no grafo exportado.O tensor
output0conté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=Nonee executa o pós-processamento externamente.