Exportação de Modelos com Ultralytics YOLO
Introdução
O objetivo final de treinar um modelo é implementá-lo para aplicações no mundo real. O modo de exportação no Ultralytics YOLO11 oferece uma gama versátil de opções para exportar seu modelo treinado para diferentes formatos, tornando-o implementável em várias plataformas e dispositivos. Este guia abrangente tem como objetivo orientá-lo pelas nuances da exportação de modelos, mostrando como alcançar o máximo de compatibilidade e desempenho.
Assista: Como Exportar um Modelo Ultralytics YOLO Treinado Personalizado e Executar Inferência ao Vivo na Webcam.
Por que escolher o modo de exportação do YOLO11?
- Versatilidade: Exporta para vários formatos, incluindo ONNX, TensorRT, CoreML e muito mais.
- Desempenho: Obtenha até 5x de aceleração da GPU com TensorRT e 3x de aceleração da CPU com ONNX ou OpenVINO.
- Compatibilidade: Torne seu modelo universalmente implementável em vários ambientes de hardware e software.
- Facilidade de Uso: CLI e API python simples para exportação de modelo 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: Exporte 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 e tutoriais detalhados para uma experiência de exportação tranquila.
Dica
Exemplos de uso
Exporte um modelo YOLO11n para um formato diferente, como ONNX ou TensorRT. Consulte a seção Argumentos abaixo para obter uma lista completa de argumentos de exportação.
Exemplo
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom trained model
# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
Argumentos
Esta tabela detalha as configurações e opções disponíveis para exportar modelos YOLO para diferentes formatos. Estas configurações são cruciais para otimizar o desempenho, o tamanho e a compatibilidade do modelo exportado em várias plataformas e ambientes. Uma configuração adequada garante que o modelo esteja pronto para ser implementado na aplicação pretendida com ótima eficiência.
Argumento | Tipo | Padrão | Descrição |
---|---|---|---|
format |
str |
'torchscript' |
Formato de destino para o modelo exportado, como 'onnx' , 'torchscript' , 'engine' (TensorRT), ou outros. Cada formato permite compatibilidade com diferentes ambientes de implantação. |
imgsz |
int ou tuple |
640 |
Tamanho de imagem desejado 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. |
keras |
bool |
False |
Permite a exportação para o formato Keras para TensorFlow SavedModel, proporcionando compatibilidade com o serviço e as APIs do TensorFlow. |
optimize |
bool |
False |
Aplica otimização para dispositivos móveis ao exportar para TorchScript, potencialmente reduzindo o tamanho do modelo e melhorando o desempenho de inferência. Não é compatível com o formato NCNN ou dispositivos CUDA. |
half |
bool |
False |
Ativa a quantização FP16 (meia precisão), reduzindo o tamanho do modelo e potencialmente acelerando a inferência em hardware suportado. Não é compatível com a quantização INT8 ou exportações somente para CPU para ONNX. |
int8 |
bool |
False |
Ativa a quantização INT8, comprimindo ainda mais o modelo e acelerando a inferência com perda mínima de precisão, principalmente para dispositivos de borda. Quando usado com TensorRT, realiza a quantização pós-treinamento (PTQ). |
dynamic |
bool |
False |
Permite tamanhos de entrada dinâmicos para exportações ONNX, TensorRT e OpenVINO, aumentando a flexibilidade no manuseio de diferentes dimensões de imagem. Automaticamente definido para True ao usar TensorRT com INT8. |
simplify |
bool |
True |
Simplifica o grafo do modelo para exportações ONNX com onnxslim , potencialmente melhorando o desempenho e a compatibilidade com os mecanismos de inferência. |
opset |
int |
None |
Especifica a versão do ONNX opset para compatibilidade com diferentes analisadores e tempos de execução ONNX. Se não for definido, usa a versão mais recente suportada. |
workspace |
float ou None |
None |
Define o tamanho máximo do espaço de trabalho em GiB para TensorRT otimizações, equilibrando o uso de memória e o desempenho. Use None para alocação automática pelo TensorRT até ao máximo do dispositivo. |
nms |
bool |
False |
Adiciona a Supressão Não Máxima (NMS) ao modelo exportado quando suportado (ver Formatos de Exportação), melhorando a eficiência do pós-processamento de detecção. Não disponível para modelos end2end. |
batch |
int |
1 |
Especifica o tamanho do lote de inferência do modelo de exportação ou o número máximo de imagens que o modelo exportado processará simultaneamente em predict modo. Para exportações Edge TPU, isso é automaticamente definido como 1. |
device |
str |
None |
Especifica o dispositivo para exportação: GPU (device=0 CPU (device=cpu ), MPS para Apple silicon (device=mps ) ou DLA para NVIDIA Jetson (device=dla:0 ou device=dla:1 ). As exportações do TensorRT usam GPU automaticamente. |
data |
str |
'coco8.yaml' |
Caminho para o conjunto de dados arquivo de configuração (padrão: coco8.yaml ), essencial para a calibração da quantização INT8. Se não for especificado com o INT8 habilitado, um conjunto de dados padrão será atribuído. |
fraction |
float |
1.0 |
Especifica a fração do conjunto de dados a ser usada para a calibração da quantização INT8. Permite calibrar em um subconjunto do conjunto de dados completo, útil para experimentos ou quando os recursos são limitados. Se não for especificado com INT8 habilitado, o conjunto de dados completo será usado. |
Ajustar estes parâmetros permite a personalização do processo de exportação para atender a requisitos específicos, como ambiente de implementação, restrições de hardware e metas de desempenho. Selecionar o formato e as configurações apropriadas é 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 YOLO11 disponíveis estão na tabela abaixo. Você pode exportar para qualquer formato usando o format
argumento, ou seja, format='onnx'
ou format='engine'
. Você pode prever ou validar diretamente em modelos exportados, ou seja, yolo predict model=yolo11n.onnx
Exemplos de uso são mostrados para seu modelo após a conclusão da exportação.
Formato | format Argumento |
Modelo | Metadados | Argumentos |
---|---|---|---|---|
PyTorch | - | yolo11n.pt |
✅ | - |
TorchScript | torchscript |
yolo11n.torchscript |
✅ | imgsz , half , optimize , nms , batch , device |
ONNX | onnx |
yolo11n.onnx |
✅ | imgsz , half , dynamic , simplify , opset , nms , batch , device |
OpenVINO | openvino |
yolo11n_openvino_model/ |
✅ | imgsz , half , dynamic , int8 , nms , batch , data , fraction , device |
TensorRT | engine |
yolo11n.engine |
✅ | imgsz , half , dynamic , simplify , workspace , int8 , nms , batch , data , fraction , device |
CoreML | coreml |
yolo11n.mlpackage |
✅ | imgsz , half , int8 , nms , batch , device |
TF SavedModel | saved_model |
yolo11n_saved_model/ |
✅ | imgsz , keras , int8 , nms , batch , device |
TF GraphDef | pb |
yolo11n.pb |
❌ | imgsz , batch , device |
TF Lite | tflite |
yolo11n.tflite |
✅ | imgsz , half , int8 , nms , batch , data , fraction , device |
TF Edge TPU | edgetpu |
yolo11n_edgetpu.tflite |
✅ | imgsz , device |
TF.js | tfjs |
yolo11n_web_model/ |
✅ | imgsz , half , int8 , nms , batch , device |
PaddlePaddle | paddle |
yolo11n_paddle_model/ |
✅ | imgsz , batch , device |
MNN | mnn |
yolo11n.mnn |
✅ | imgsz , batch , int8 , half , device |
NCNN | ncnn |
yolo11n_ncnn_model/ |
✅ | imgsz , half , batch , device |
IMX500 | imx |
yolo11n_imx_model/ |
✅ | imgsz , int8 , data , fraction , device |
RKNN | rknn |
yolo11n_rknn_model/ |
✅ | imgsz , batch , name , device |
FAQ
Como exporto um modelo YOLO11 para o formato ONNX?
Exportar um modelo YOLO11 para o formato ONNX é simples com a Ultralytics. Ela oferece métodos em Python e CLI para exportar modelos.
Exemplo
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom trained model
# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
Para obter mais detalhes sobre o processo, incluindo opções avançadas, como lidar com diferentes tamanhos de entrada, consulte o guia de integração ONNX.
Quais são os benefícios de usar o TensorRT para exportar modelos?
Usar o TensorRT para exportação de modelos oferece melhorias de desempenho significativas. Os modelos YOLO11 exportados para TensorRT podem alcançar uma aceleração de GPU de até 5x, tornando-o ideal para aplicações de inferência em tempo real.
- Versatilidade: Otimize modelos para uma configuração de hardware específica.
- Velocidade: Alcance uma inferência mais rápida através de otimizações avançadas.
- Compatibilidade: Integre-se perfeitamente com o hardware da NVIDIA.
Para saber mais sobre a integração do TensorRT, consulte o guia de integração do TensorRT.
Como habilito a quantização INT8 ao exportar meu modelo YOLO11?
A quantização INT8 é uma excelente forma de comprimir o modelo e acelerar a inferência, especialmente em dispositivos de borda. Veja como você pode ativar a quantização INT8:
Exemplo
from ultralytics import YOLO
model = YOLO("yolo11n.pt") # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.pt format=engine int8=True # export TensorRT model with INT8 quantization
A quantização INT8 pode ser aplicada a vários formatos, como TensorRT, OpenVINO, e CoreML. Para resultados de quantização ideais, forneça um conjunto de dados usando o data
parâmetro.
Por que o tamanho de entrada dinâmico é importante ao exportar modelos?
O tamanho de entrada dinâmico permite que o modelo exportado lide com diferentes dimensões de imagem, proporcionando flexibilidade e otimizando a eficiência do processamento para diferentes casos de uso. Ao exportar para formatos como ONNX ou TensorRT, habilitar o tamanho de entrada dinâmico garante que o modelo possa se adaptar a diferentes formatos de entrada perfeitamente.
Para habilitar este recurso, use a dynamic=True
flag durante a exportação:
Exemplo
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.pt 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.
Quais são os principais argumentos de exportação a serem considerados para otimizar o desempenho do modelo?
Entender 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
,tensorflow
).imgsz:
Tamanho de imagem desejado para a entrada do modelo (ex:640
ou(height, width)
).half:
Ativa a quantização FP16, reduzindo o tamanho do modelo e potencialmente acelerando a inferência.optimize:
Aplica otimizações específicas para ambientes móveis ou com restrições.int8:
Ativa a quantização INT8, altamente benéfica para IA de ponta implantações.
Para implementação em plataformas de hardware específicas, considere usar formatos de exportação especializados como TensorRT para GPUs NVIDIA, CoreML para dispositivos Apple ou Edge TPU para dispositivos Google Coral.