Exportação TensorRT para Modelos YOLO11
A implementação de modelos de visão computacional em ambientes de alto desempenho pode exigir um formato que maximize a velocidade e a eficiência. Isso é especialmente verdadeiro quando você está implementando seu modelo em GPUs NVIDIA.
Ao usar o formato de exportação TensorRT, você pode aprimorar seus modelos Ultralytics YOLO11 para inferência rápida e eficiente no hardware NVIDIA. Este guia fornecerá passos fáceis de seguir para o processo de conversão e ajudará você a aproveitar ao máximo a tecnologia avançada da NVIDIA em seus projetos de aprendizado profundo.
TensorRT
TensorRT, desenvolvido pela NVIDIA, é um kit de desenvolvimento de software (SDK) avançado projetado para inferência de aprendizado profundo de alta velocidade. É adequado para aplicações em tempo real, como detecção de objetos.
Este kit de ferramentas otimiza modelos de aprendizado profundo para GPUs NVIDIA e resulta em operações mais rápidas e eficientes. Os modelos TensorRT passam por otimização TensorRT, que inclui técnicas como fusão de camadas, calibração de precisão (INT8 e FP16), gerenciamento dinâmico de memória de tensor e auto-ajuste de kernel. Converter modelos de aprendizado profundo para o formato TensorRT permite que os desenvolvedores percebam totalmente o potencial das GPUs NVIDIA.
O TensorRT é conhecido por sua compatibilidade com vários formatos de modelo, incluindo TensorFlow, PyTorch e ONNX, fornecendo aos desenvolvedores uma solução flexível para integrar e otimizar modelos de diferentes frameworks. Essa versatilidade permite a implantação eficiente de modelos em diversos ambientes de hardware e software.
Principais Características dos Modelos TensorRT
Os modelos TensorRT oferecem uma gama de recursos importantes que contribuem para sua eficiência e eficácia na inferência de aprendizado profundo de alta velocidade:
-
Calibração de Precisão: TensorRT oferece suporte à calibração de precisão, permitindo que os modelos sejam ajustados para requisitos de precisão específicos. Isso inclui suporte para formatos de precisão reduzida, como INT8 e FP16, que podem aumentar ainda mais a velocidade de inferência, mantendo níveis de precisão aceitáveis.
-
Fusão de Camadas: O processo de otimização do TensorRT inclui a fusão de camadas, onde várias camadas de uma rede neural são combinadas em uma única operação. Isso reduz a sobrecarga computacional e melhora a velocidade de inferência, minimizando o acesso à memória e a computação.
-
Gerenciamento Dinâmico de Memória de Tensor: O TensorRT gerencia eficientemente o uso de memória de tensor durante a inferência, reduzindo a sobrecarga de memória e otimizando a alocação de memória. Isso resulta em uma utilização mais eficiente da memória da GPU.
-
Ajuste Automático de Kernel: O TensorRT aplica o ajuste automático de kernel para selecionar o kernel de GPU mais otimizado para cada camada do modelo. Essa abordagem adaptativa garante que o modelo aproveite ao máximo o poder computacional das GPUs.
Opções de Implementação em TensorRT
Antes de analisarmos o código para exportar modelos YOLO11 para o formato TensorRT, vamos entender onde os modelos TensorRT são normalmente usados.
O TensorRT oferece diversas opções de implantação, e cada opção equilibra facilidade de integração, otimização de desempenho e flexibilidade de forma diferente:
- Implantação dentro do TensorFlow: Este método integra o TensorRT ao TensorFlow, permitindo que modelos otimizados sejam executados em um ambiente TensorFlow familiar. É útil para modelos com uma mistura de camadas suportadas e não suportadas, pois o TF-TRT pode lidar com elas de forma eficiente.
-
API de Runtime TensorRT Independente: Oferece controle granular, ideal para aplicações com desempenho crítico. É mais complexo, mas permite a implementação personalizada de operadores não suportados.
-
Servidor de Inferência NVIDIA Triton: Uma opção que suporta modelos de várias estruturas. Particularmente adequado para inferência na nuvem ou na borda, ele fornece recursos como execução simultânea de modelos e análise de modelos.
Exportando Modelos YOLO11 para TensorRT
Você pode melhorar a eficiência da execução e otimizar o desempenho convertendo modelos YOLO11 para o formato TensorRT.
Instalação
Para instalar o pacote necessário, execute:
Instalação
# Install the required package for YOLO11
pip install ultralytics
Para obter instruções detalhadas e práticas recomendadas relacionadas ao processo de instalação, consulte nosso guia de instalação do YOLO11. Ao instalar os pacotes necessários para o YOLO11, se você encontrar alguma dificuldade, consulte nosso guia de problemas comuns para obter soluções e dicas.
Utilização
Antes de se aprofundar nas instruções de uso, certifique-se de verificar a variedade de modelos YOLO11 oferecidos pela Ultralytics. Isso ajudará você a escolher o modelo mais adequado para os requisitos do seu projeto.
Utilização
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo11n.engine'
# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")
# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format
yolo export model=yolo11n.pt format=engine # creates 'yolo11n.engine''
# Run inference with the exported model
yolo predict model=yolo11n.engine source='https://ultralytics.com/images/bus.jpg'
Argumentos de Exportação
Argumento | Tipo | Padrão | Descrição |
---|---|---|---|
format |
str |
'engine' |
Formato de destino para o modelo exportado, definindo a compatibilidade com vários ambientes de implementação. |
imgsz |
int ou tuple |
640 |
Tamanho de imagem desejado para a entrada do modelo. Pode ser um inteiro para imagens quadradas ou uma tupla (height, width) para dimensões específicas. |
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. |
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. |
dynamic |
bool |
False |
Permite tamanhos de entrada dinâmicos, aumentando a flexibilidade no manuseio de diferentes dimensões de imagem. |
simplify |
bool |
True |
Simplifica o grafo do modelo com onnxslim , potencialmente melhorando o desempenho e a compatibilidade. |
workspace |
float ou None |
None |
Define o tamanho máximo do espaço de trabalho em GiB para otimizações do TensorRT, 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), essencial para um pós-processamento de detecção preciso e eficiente. |
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. |
data |
str |
'coco8.yaml' |
Caminho para o conjunto de dados arquivo de configuração (padrão: coco8.yaml ), essencial para a quantização. |
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. |
device |
str |
None |
Especifica o dispositivo para exportação: GPU (device=0 ), DLA para NVIDIA Jetson (device=dla:0 ou device=dla:1 ). |
Dica
Certifique-se de usar uma GPU com suporte CUDA ao exportar para TensorRT.
Para mais detalhes sobre o processo de exportação, visite a página de documentação da Ultralytics sobre exportação.
Exportando TensorRT com Quantização INT8
Exportar modelos Ultralytics YOLO usando TensorRT com precisão INT8 executa a quantização pós-treinamento (PTQ). O TensorRT usa calibração para PTQ, que mede a distribuição de ativações dentro de cada tensor de ativação enquanto o modelo YOLO processa a inferência em dados de entrada representativos e, em seguida, usa essa distribuição para estimar os valores de escala para cada tensor. Cada tensor de ativação que é um candidato para quantização tem uma escala associada que é deduzida por um processo de calibração.
Ao processar redes quantizadas implicitamente, o TensorRT usa INT8 oportunisticamente para otimizar o tempo de execução da camada. Se uma camada for executada mais rapidamente em INT8 e tiver escalas de quantização atribuídas em suas entradas e saídas de dados, um kernel com precisão INT8 será atribuído a essa camada; caso contrário, o TensorRT seleciona uma precisão de FP32 ou FP16 para o kernel, com base no que resultar em um tempo de execução mais rápido para essa camada.
Dica
É crítico garantir que o mesmo dispositivo que usará os pesos do modelo TensorRT para implantação seja usado para exportar com precisão INT8, pois os resultados da calibração podem variar entre os dispositivos.
Configurando a Exportação INT8
Os argumentos fornecidos ao usar export para um modelo Ultralytics YOLO irá grandemente influenciam o desempenho do modelo exportado. Eles também precisarão ser selecionados com base nos recursos do dispositivo disponíveis, no entanto, os argumentos padrão deve funcionam para a maioria GPUs discretas NVIDIA Ampere (ou mais recentes). O algoritmo de calibração utilizado é "MINMAX_CALIBRATION"
e você pode ler mais detalhes sobre as opções disponíveis no Guia do Desenvolvedor TensorRT. Os testes da Ultralytics descobriram que "MINMAX_CALIBRATION"
foi a melhor escolha e as exportações foram corrigidas para usar este algoritmo.
-
workspace
: Controla o tamanho (em GiB) da alocação de memória do dispositivo durante a conversão dos pesos do modelo.-
Ajuste o
workspace
valor de acordo com as suas necessidades de calibração e disponibilidade de recursos. Enquanto umworkspace
pode aumentar o tempo de calibração, mas permite que o TensorRT explore uma gama mais ampla de táticas de otimização, potencialmente melhorando o desempenho do modelo e precisão. Por outro lado, umworkspace
pode reduzir o tempo de calibração, mas pode limitar as estratégias de otimização, afetando a qualidade do modelo quantizado. -
O padrão é
workspace=None
, o que permitirá que o TensorRT aloque memória automaticamente; ao configurar manualmente, este valor pode precisar ser aumentado se a calibração falhar (sair sem aviso). -
O TensorRT irá reportar
UNSUPPORTED_STATE
durante a exportação se o valor paraworkspace
é maior que a memória disponível para o dispositivo, o que significa que o valor paraworkspace
deve ser diminuído ou definido paraNone
. -
Se
workspace
está definido com o valor máximo e a calibração falha/quebra, considere usarNone
para alocação automática ou reduzindo os valores paraimgsz
ebatch
para reduzir os requisitos de memória. -
Lembre-se que a calibração para INT8 é específica para cada dispositivo, pegar emprestado uma GPU "de ponta" para calibração pode resultar em baixo desempenho quando a inferência é executada em outro dispositivo.
-
-
batch
: O tamanho máximo do lote que será usado para inferência. Durante a inferência, lotes menores podem ser usados, mas a inferência não aceitará lotes maiores do que o especificado.
Nota
Durante a calibração, o dobro do batch
tamanho fornecido será usado. Usar pequenos batches pode levar a um dimensionamento impreciso durante a calibração. Isso ocorre porque o processo se ajusta com base nos dados que vê. Pequenos batches podem não capturar toda a gama de valores, levando a problemas com a calibração final, então o batch
o tamanho é dobrado automaticamente. Se nenhum tamanho de lote é especificado batch=1
, a calibração será executada em batch=1 * 2
para reduzir erros de escala de calibração.
A experimentação da NVIDIA os levou a recomendar o uso de pelo menos 500 imagens de calibração que sejam representativas dos dados para o seu modelo, com calibração de quantização INT8. Esta é uma diretriz e não uma difícil requisito, e você precisará experimentar o que é necessário para ter um bom desempenho para o seu conjunto de dados. Como os dados de calibração são necessários para a calibração INT8 com TensorRT, certifique-se de usar o data
argumento quando int8=True
para TensorRT e use data="my_dataset.yaml"
, que usará as imagens de validação para calibrar. Quando nenhum valor é passado para data
Com a exportação para TensorRT com quantização INT8, o padrão será usar um dos conjuntos de dados de exemplo "pequenos" com base na tarefa do modelo em vez de lançar um erro.
Exemplo
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
int8=True,
data="coco.yaml", # (4)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
- Exportações com eixos dinâmicos, isso será habilitado por padrão ao exportar com
int8=True
mesmo quando não definido explicitamente. Veja Argumentos de exportação para informações adicionais. - Define o tamanho máximo do lote de 8 para o modelo exportado, que calibra com
batch = 2 * 8
para evitar erros de escala durante a calibração. - Aloca 4 GiB de memória em vez de alocar todo o dispositivo para o processo de conversão.
- Usa o conjunto de dados COCO para calibração, especificamente as imagens usadas para validação (5.000 no total).
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml # creates 'yolov8n.engine''
# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
Cache de Calibração
O TensorRT irá gerar uma calibração .cache
que pode ser reutilizado para acelerar a exportação de futuros pesos do modelo usando os mesmos dados, mas isso pode resultar em uma calibração ruim quando os dados são muito diferentes ou se o batch
valor é alterado drasticamente. Nessas circunstâncias, o .cache
deve ser renomeado e movido para um diretório diferente ou excluído completamente.
Vantagens de usar YOLO com TensorRT INT8
-
Tamanho do modelo reduzido: A quantização de FP32 para INT8 pode reduzir o tamanho do modelo em 4x (em disco ou na memória), levando a tempos de download mais rápidos, menores requisitos de armazenamento e menor footprint de memória ao implementar um modelo.
-
Menor consumo de energia: Operações com precisão reduzida para modelos YOLO exportados em INT8 podem consumir menos energia em comparação com modelos FP32, especialmente para dispositivos alimentados por bateria.
-
Velocidades de inferência aprimoradas: O TensorRT otimiza o modelo para o hardware de destino, o que pode levar a velocidades de inferência mais rápidas em GPUs, dispositivos embarcados e aceleradores.
Nota sobre as Velocidades de Inferência
Pode-se esperar que as primeiras chamadas de inferência com um modelo exportado para TensorRT INT8 tenham tempos de pré-processamento, inferência e/ou pós-processamento mais longos do que o normal. Isso também pode ocorrer ao alterar imgsz
durante a inferência, especialmente quando imgsz
não é o mesmo que foi especificado durante a exportação (exportar imgsz
é definido como perfil "ótimo" do TensorRT).
Desvantagens de usar YOLO com TensorRT INT8
-
Diminuições nas métricas de avaliação: Usar uma precisão menor significará que
mAP
,Precision
,Recall
ou qualquer outra métrica usada para avaliar o desempenho do modelo provavelmente será um pouco pior. Veja o Seção de resultados de desempenho para comparar as diferenças emmAP50
emAP50-95
ao exportar com INT8 em uma pequena amostra de vários dispositivos. -
Tempos de desenvolvimento aumentados: Encontrar as configurações "ideais" para a calibração INT8 para o conjunto de dados e o dispositivo pode levar uma quantidade significativa de testes.
-
Dependência de Hardware: Os ganhos de calibração e desempenho podem ser altamente dependentes do hardware e os pesos do modelo são menos transferíveis.
Desempenho da Exportação do Ultralytics YOLO TensorRT
NVIDIA A100
Desempenho
Testado com Ubuntu 22.04.3 LTS, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
Consulte a Documentação de Detecção para exemplos de uso com estes modelos treinados em COCO, que incluem 80 classes pré-treinadas.
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prever | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prever | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
Consulte a Documentação de Segmentação para exemplos de uso com estes modelos treinados em COCO, que incluem 80 classes pré-treinadas.
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n-seg.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(M) |
mAPval 50-95(M) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|---|---|
FP32 | Prever | 0.62 | 0.61 | 0.68 | 8 | 640 | ||||
FP32 | COCOval | 0.63 | 0.52 | 0.36 | 0.49 | 0.31 | 1 | 640 | |
FP16 | Prever | 0.40 | 0.39 | 0.44 | 8 | 640 | ||||
FP16 | COCOval | 0.43 | 0.52 | 0.36 | 0.49 | 0.30 | 1 | 640 | |
INT8 | Prever | 0.34 | 0.33 | 0.37 | 8 | 640 | ||||
INT8 | COCOval | 0.36 | 0.46 | 0.32 | 0.43 | 0.27 | 1 | 640 |
Consulte a Documentação de Classificação para exemplos de uso com estes modelos treinados em ImageNet, que incluem 1000 classes pré-treinadas.
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n-cls.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
top-1 | top-5 | batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 0.26 | 0.25 | 0.28 | 8 | 640 | ||
FP32 | ImageNetval | 0.26 | 0.35 | 0.61 | 1 | 640 | |
FP16 | Prever | 0.18 | 0.17 | 0.19 | 8 | 640 | ||
FP16 | ImageNetval | 0.18 | 0.35 | 0.61 | 1 | 640 | |
INT8 | Prever | 0.16 | 0.15 | 0.57 | 8 | 640 | ||
INT8 | ImageNetval | 0.15 | 0.32 | 0.59 | 1 | 640 |
Consulte os Documentos de Estimativa de Pose para exemplos de uso com esses modelos treinados em COCO, que incluem 1 classe pré-treinada, "pessoa".
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n-pose.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(P) |
mAPval 50-95(P) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|---|---|
FP32 | Prever | 0.54 | 0.53 | 0.58 | 8 | 640 | ||||
FP32 | COCOval | 0.55 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
FP16 | Prever | 0.37 | 0.35 | 0.41 | 8 | 640 | ||||
FP16 | COCOval | 0.36 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
INT8 | Prever | 0.29 | 0.28 | 0.33 | 8 | 640 | ||||
INT8 | COCOval | 0.30 | 0.90 | 0.68 | 0.78 | 0.47 | 1 | 640 |
Consulte a Documentação de Detecção Orientada para exemplos de uso com estes modelos treinados em DOTAv1, que incluem 15 classes pré-treinadas.
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n-obb.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 0.52 | 0.51 | 0.59 | 8 | 640 | ||
FP32 | DOTAv1val | 0.76 | 0.50 | 0.36 | 1 | 640 | |
FP16 | Prever | 0.34 | 0.33 | 0.42 | 8 | 640 | ||
FP16 | DOTAv1val | 0.59 | 0.50 | 0.36 | 1 | 640 | |
INT8 | Prever | 0.29 | 0.28 | 0.33 | 8 | 640 | ||
INT8 | DOTAv1val | 0.32 | 0.45 | 0.32 | 1 | 640 |
GPUs de consumo
Desempenho de Detecção (COCO)
Testado com Windows 10.0.19045, python 3.10.9
, ultralytics==8.2.4
, tensorrt==10.0.0b6
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prever | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prever | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Testado com Windows 10.0.22631, python 3.11.9
, ultralytics==8.2.4
, tensorrt==10.0.1
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 1.76 | 1.69 | 1.87 | 8 | 640 | ||
FP32 | COCOval | 1.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prever | 0.86 | 0.75 | 1.00 | 8 | 640 | ||
FP16 | COCOval | 1.43 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prever | 0.80 | 0.75 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 1.35 | 0.47 | 0.33 | 1 | 640 |
Testado com Pop!_OS 22.04 LTS, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 2.84 | 2.84 | 2.85 | 8 | 640 | ||
FP32 | COCOval | 2.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prever | 1.09 | 1.09 | 1.10 | 8 | 640 | ||
FP16 | COCOval | 1.20 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prever | 0.75 | 0.74 | 0.75 | 8 | 640 | ||
INT8 | COCOval | 0.76 | 0.47 | 0.33 | 1 | 640 |
Dispositivos Embutidos
Desempenho de Detecção (COCO)
Testado com JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12
, ultralytics==8.2.16
, tensorrt==10.0.1
Nota
Tempos de inferência mostrados para mean
, min
(mais rápido), e max
(mais lento) para cada teste usando pesos pré-treinados yolov8n.engine
Precisão | Teste de avaliação | média (ms) |
mín | máx (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
tamanho (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Prever | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Prever | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Prever | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Informação
Consulte nosso guia de início rápido no NVIDIA Jetson com Ultralytics YOLO para saber mais sobre a configuração.
Métodos de avaliação
Expanda as seções abaixo para obter informações sobre como esses modelos foram exportados e testados.
Configurações de exportação
Consulte o modo de exportação para obter detalhes sobre os argumentos de configuração de exportação.
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, half=True)
# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
Loop de previsão
Consulte o modo de predição para obter informações adicionais.
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # batch=8 of the same image
verbose=False,
device="cuda",
)
Configuração de validação
Ver val
modo para saber mais sobre os argumentos de configuração de validação.
from ultralytics import YOLO
model = YOLO("yolov8n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)
Implantação de Modelos TensorRT YOLO11 Exportados
Tendo exportado com sucesso seus modelos Ultralytics YOLO11 para o formato TensorRT, agora você está pronto para implantá-los. Para obter instruções detalhadas sobre como implantar seus modelos TensorRT em várias configurações, consulte os seguintes recursos:
-
Implementar Ultralytics com um Servidor Triton: O nosso guia sobre como usar o Triton Inference da NVIDIA (anteriormente TensorRT Inference) Server especificamente para uso com modelos Ultralytics YOLO.
-
Implementando Redes Neurais Profundas com NVIDIA TensorRT: Este artigo explica como usar o NVIDIA TensorRT para implementar redes neurais profundas em plataformas de implementação baseadas em GPU de forma eficiente.
-
IA de Ponta a Ponta para PCs Baseados em NVIDIA: Implementação NVIDIA TensorRT: Esta publicação de blogue explica o uso do NVIDIA TensorRT para otimizar e implementar modelos de IA em PCs baseados em NVIDIA.
-
Repositório GitHub para NVIDIA TensorRT:: Este é o repositório oficial do GitHub que contém o código fonte e a documentação para NVIDIA TensorRT.
Resumo
Neste guia, focamos na conversão de modelos Ultralytics YOLO11 para o formato de modelo TensorRT da NVIDIA. Esta etapa de conversão é crucial para melhorar a eficiência e a velocidade dos modelos YOLO11, tornando-os mais eficazes e adequados para diversos ambientes de implantação.
Para obter mais informações sobre detalhes de uso, consulte a documentação oficial do TensorRT.
Se você está curioso sobre integrações adicionais do Ultralytics YOLO11, nossa página de guia de integração fornece uma extensa seleção de recursos informativos e insights.
FAQ
Como converto modelos YOLO11 para o formato TensorRT?
Para converter seus modelos Ultralytics YOLO11 para o formato TensorRT para inferência otimizada em NVIDIA GPU, siga estes passos:
-
Instale o pacote necessário:
pip install ultralytics
-
Exporte seu modelo YOLO11:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="engine") # creates 'yolo11n.engine' # Run inference model = YOLO("yolo11n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Para mais detalhes, visite o guia de instalação do YOLO11 e a documentação de exportação.
Quais são os benefícios de usar o TensorRT para modelos YOLO11?
Usar o TensorRT para otimizar modelos YOLO11 oferece vários benefícios:
- Velocidade de Inferência Mais Rápida: O TensorRT otimiza as camadas do modelo e usa calibração de precisão (INT8 e FP16) para acelerar a inferência sem sacrificar significativamente a precisão.
- Eficiência de Memória: O TensorRT gere a memória do tensor dinamicamente, reduzindo a sobrecarga e melhorando a utilização da memória da GPU.
- Fusão de Camadas: Combina várias camadas em operações únicas, reduzindo a complexidade computacional.
- Auto-ajuste de Kernel: Seleciona automaticamente kernels de GPU otimizados para cada camada do modelo, garantindo o máximo desempenho.
Para saber mais, explore a documentação oficial do TensorRT da NVIDIA e a nossa visão geral detalhada do TensorRT.
Posso usar quantização INT8 com TensorRT para modelos YOLO11?
Sim, você pode exportar modelos YOLO11 usando TensorRT com quantização INT8. Este processo envolve quantização pós-treinamento (PTQ) e calibração:
-
Exportar com INT8:
from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
-
Executar inferência:
from ultralytics import YOLO model = YOLO("yolov8n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
Para mais detalhes, consulte a seção exportando TensorRT com quantização INT8.
Como implemento modelos YOLO11 TensorRT em um NVIDIA Triton Inference Server?
A implementação de modelos YOLO11 TensorRT num Servidor de Inferência NVIDIA Triton pode ser feita utilizando os seguintes recursos:
- Implementar Ultralytics YOLOv8 com o Servidor Triton: Orientação passo a passo sobre como configurar e usar o Triton Inference Server.
- Documentação do Servidor de Inferência NVIDIA Triton: Documentação oficial da NVIDIA para opções e configurações de implantação detalhadas.
Esses guias ajudarão você a integrar modelos YOLOv8 de forma eficiente em vários ambientes de implantação.
Quais são as melhorias de desempenho observadas com os modelos YOLOv8 exportados para TensorRT?
As melhorias de desempenho com TensorRT podem variar dependendo do hardware utilizado. Aqui estão alguns benchmarks típicos:
-
NVIDIA A100:
- Inferência FP32: ~0,52 ms / imagem
- Inferência FP16: ~0,34 ms / imagem
- Inferência INT8: ~0,28 ms / imagem
- Ligeira redução no mAP com precisão INT8, mas melhoria significativa na velocidade.
-
GPUs de Consumo (por exemplo, RTX 3080):
- Inferência FP32: ~1,06 ms / imagem
- Inferência FP16: ~0,62 ms / imagem
- Inferência INT8: ~0,52 ms / imagem
Benchmarks de desempenho detalhados para diferentes configurações de hardware podem ser encontrados na seção de desempenho.
Para obter informações mais abrangentes sobre o desempenho do TensorRT, consulte a documentação da Ultralytics e os nossos relatórios de análise de desempenho.