Ultralytics YOLO11 em NVIDIA Jetson usando DeepStream SDK e TensorRT
Ver: Como usar os modelos Ultralytics YOLO11 com NVIDIA Deepstream no Jetson Orin NX 🚀
Este guia abrangente fornece um passo a passo detalhado para implantar Ultralytics YOLO11 em NVIDIA dispositivos Jetson usando DeepStream SDK e TensorRT. Aqui usamos TensorRT para maximizar o desempenho da inferência na plataforma Jetson.
Nota
Este guia foi testado com o NVIDIA Jetson Orin Nano Super Developer Kit com a última versão estável do JetPack, JP6.1, Seeed Studio reComputer J4012 que se baseia no NVIDIA Jetson Orin NX 16GB com a versão JetPack do JP5.1.3 e Seeed Studio reComputer J1020 v2 que se baseia no NVIDIA Jetson Nano 4GB com a versão JetPack do JP4.6.4. Espera-se que funcione em toda a linha de hardware NVIDIA Jetson, incluindo o mais recente e o mais antigo.
O que é o NVIDIA DeepStream?
NVIDIAO DeepStream SDK da Microsoft é um kit de ferramentas completo de análise de streaming baseado no GStreamer para processamento multissensor baseado em IA, vídeo, áudio e compreensão de imagem. É ideal para desenvolvedores de IA de visão, parceiros de software, startups e OEMs que criam aplicativos e serviços de IVA (Intelligent Video Analytics). Agora é possível criar pipelines de processamento de fluxo que incorporam redes neurais e outras tarefas de processamento complexas, como rastreamento, codificação/decodificação de vídeo e renderização de vídeo. Esses pipelines permitem análises em tempo real de dados de vídeo, imagens e sensores. O suporte multiplataforma do DeepStream oferece uma maneira mais rápida e fácil de desenvolver aplicativos e serviços de IA de visão no local, na borda e na nuvem.
Pré-requisitos
Antes de começar a seguir este guia:
- Visite a nossa documentação, Guia de início rápido: NVIDIA Jetson com Ultralytics YOLO11 para configurar o seu dispositivo NVIDIA Jetson com Ultralytics YOLO11
-
Instale o DeepStream SDK de acordo com a versão do JetPack
- Para o JetPack 4.6.4, instale o DeepStream 6.0.1
- Para o JetPack 5.1.3, instale o DeepStream 6.3
- Para o JetPack 6.1, instale o DeepStream 7.1
Dica
Neste guia, usamos o método do pacote Debian para instalar o DeepStream SDK no dispositivo Jetson. Você também pode visitar a página DeepStream SDK on Jetson (Archived) para acessar versões antigas do DeepStream.
Configuração do DeepStream para YOLO11
Aqui, estamos usando o repositório do GitHub marcoslucianops/DeepStream-Yolo, que inclui o suporte do SDK do DeepStream NVIDIA para modelos YOLO . Agradecemos os esforços de marcoslucianops por suas contribuições!
-
Instalar Ultralytics com as dependências necessárias
cd ~ pip install -U pip git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e ".[export]" onnxslim
-
Clonar o repositório DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
Copiar o
export_yolo11.py
ficheiro deDeepStream-Yolo/utils
para o diretórioultralytics
pastacp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
Descarregar Ultralytics YOLO11 modelo de deteção (.pt) à sua escolha a partir das versõesYOLO11 . Aqui utilizamos o yolo11s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
Nota
Também é possível utilizar um modelo YOLO11 personalizado e treinado.
-
Converter o modelo em ONNX
python3 export_yolo11.py -w yolo11s.pt
Passe os argumentos abaixo para o comando acima
Para o DeepStream 5.1, remova o
--dynamic
arg e utilizaçãoopset
12 ou inferior. A predefiniçãoopset
é 17.--opset 12
Para alterar o tamanho da inferência (predefinição: 640)
-s SIZE --size SIZE -s HEIGHT WIDTH --size HEIGHT WIDTH
Exemplo para 1280:
-s 1280 or -s 1280 1280
Para simplificar o modelo ONNX (DeepStream >= 6.0)
--simplify
Para usar o tamanho de lote dinâmico (DeepStream >= 6.1)
--dynamic
Para utilizar um tamanho de lote estático (exemplo para tamanho de lote = 4)
--batch 4
-
Copiar o ficheiro gerado
.onnx
ficheiro modelo elabels.txt
para o ficheiroDeepStream-Yolo
pastacp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
Definir a versão de CUDA de acordo com a versão do JetPack instalada
Para JetPack 4.6.4:
export CUDA_VER=10.2
Para JetPack 5.1.3:
export CUDA_VER=11.4
Para o Jetpack 6.1:
export CUDA_VER=12.6
-
Compilar a biblioteca
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Editar o
config_infer_primary_yolo11.txt
de acordo com o seu modelo (para YOLO11s com 80 classes)[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
Editar o
deepstream_app_config
ficheiro... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
Também é possível alterar a fonte de vídeo em
deepstream_app_config
ficheiro. Aqui é carregado um ficheiro de vídeo predefinido... [source0] ... uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
Executar inferência
deepstream-app -c deepstream_app_config.txt
Nota
Demorará muito tempo a gerar o ficheiro do motor TensorRT antes de iniciar a inferência. Por isso, seja paciente.

Dica
Se pretender converter o modelo para a precisão FP16, basta definir model-engine-file=model_b1_gpu0_fp16.engine
e network-mode=2
no interior config_infer_primary_yolo11.txt
Calibração INT8
Se pretender utilizar a precisão INT8 para a inferência, deve seguir os passos seguintes
Nota
Atualmente, a INT8 não funciona com TensorRT 10.x. Esta secção do guia foi testada com TensorRT 8.x, que se espera que funcione.
-
Conjunto
OPENCV
variável de ambienteexport OPENCV=1
-
Compilar a biblioteca
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Para o conjunto de dados COCO, descarregar o val2017, extrair e passar para
DeepStream-Yolo
pasta -
Criar um novo diretório para as imagens de calibração
mkdir calibration
-
Execute o seguinte para selecionar 1000 imagens aleatórias do conjunto de dados COCO para executar a calibração
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do cp ${jpg} calibration/ done
Nota
NVIDIA recomenda pelo menos 500 imagens para obter uma boa precisão. Neste exemplo, são escolhidas 1000 imagens para obter uma melhor precisão (mais imagens = mais precisão). Pode definir a partir de head -1000. Por exemplo, para 2000 imagens, a cabeça é -2000. Este processo pode demorar muito tempo.
-
Criar o
calibration.txt
ficheiro com todas as imagens selecionadasrealpath calibration/*jpg > calibration.txt
-
Definir variáveis de ambiente
export INT8_CALIB_IMG_PATH=calibration.txt export INT8_CALIB_BATCH_SIZE=1
Nota
Valores mais elevados de INT8_CALIB_BATCH_SIZE resultarão numa maior precisão e numa velocidade de calibração mais rápida. Defina-o de acordo com a sua memória GPU .
-
Atualizar o
config_infer_primary_yolo11.txt
ficheiroDe
... model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table ... network-mode=0 ...
Para
... model-engine-file=model_b1_gpu0_int8.engine int8-calib-file=calib.table ... network-mode=1 ...
Executar inferência
deepstream-app -c deepstream_app_config.txt
Configuração de MultiStream
Ver: Como executar vários fluxos com DeepStream SDK no Jetson Nano usando Ultralytics YOLO11 🎉
Para configurar vários fluxos numa única aplicação deepstream, pode efetuar as seguintes alterações ao ficheiro deepstream_app_config.txt
ficheiro
-
Altere as linhas e as colunas para criar um ecrã de grelha de acordo com o número de fluxos que pretende ter. Por exemplo, para 4 fluxos, podemos adicionar 2 linhas e 2 colunas.
[tiled-display] rows=2 columns=2
-
Conjunto
num-sources=4
e acrescentaruri
de todos os 4 fluxos[source0] enable=1 type=3 uri=path/to/video1.jpg uri=path/to/video2.jpg uri=path/to/video3.jpg uri=path/to/video4.jpg num-sources=4
Executar inferência
deepstream-app -c deepstream_app_config.txt

Resultados de referência
Os seguintes testes de referência resumem o desempenho dos modelos YOLO11 em diferentes níveis de precisão TensorRT com um tamanho de entrada de 640x640 em NVIDIA Jetson Orin NX 16GB.
Gráfico de comparação

Tabela de comparação pormenorizada
Desempenho
Formato | Estado | Tempo de inferência (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 8.64 |
TensorRT (FP16) | ✅ | 5.27 |
TensorRT (INT8) | ✅ | 4.54 |
Formato | Estado | Tempo de inferência (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 14.53 |
TensorRT (FP16) | ✅ | 7.91 |
TensorRT (INT8) | ✅ | 6.05 |
Formato | Estado | Tempo de inferência (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 32.05 |
TensorRT (FP16) | ✅ | 15.55 |
TensorRT (INT8) | ✅ | 10.43 |
Formato | Estado | Tempo de inferência (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 39.68 |
TensorRT (FP16) | ✅ | 19.88 |
TensorRT (INT8) | ✅ | 13.64 |
Formato | Estado | Tempo de inferência (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 80.65 |
TensorRT (FP16) | ✅ | 39.06 |
TensorRT (INT8) | ✅ | 22.83 |
Agradecimentos
Este guia foi inicialmente criado pelos nossos amigos do Seeed Studio, Lakshantha e Elaine.
FAQ
Como posso configurar Ultralytics YOLO11 num dispositivo NVIDIA Jetson?
Para configurar Ultralytics YOLO11 em um dispositivo NVIDIA Jetson, primeiro é necessário instalar o SDK do DeepStream compatível com sua versão do JetPack. Siga o guia passo a passo em nosso Guia de início rápido para configurar seu NVIDIA Jetson para a implantação do YOLO11 .
Qual é a vantagem de utilizar TensorRT com YOLO11 em NVIDIA Jetson?
A utilização de TensorRT com YOLO11 optimiza o modelo para inferência, reduzindo significativamente a latência e melhorando a taxa de transferência em dispositivos Jetson NVIDIA . TensorRT fornece inferência de aprendizagem profunda de alto desempenho e baixa latência através da fusão de camadas, calibração de precisão e ajuste automático do kernel. Isto leva a uma execução mais rápida e eficiente, particularmente útil para aplicações em tempo real, como análise de vídeo e máquinas autónomas.
Posso executar Ultralytics YOLO11 com DeepStream SDK em diferentes hardwares NVIDIA Jetson?
Sim, o guia para implantação do Ultralytics YOLO11 com o DeepStream SDK e o TensorRT é compatível com toda a linha NVIDIA Jetson. Isso inclui dispositivos como o Jetson Orin NX 16GB com JetPack 5.1.3 e o Jetson Nano 4GB com JetPack 4.6.4. Consulte a secção Configuração do DeepStream para YOLO11 para obter passos detalhados.
Como posso converter um modelo YOLO11 para ONNX para DeepStream?
Para converter um modelo YOLO11 para o formato ONNX para implantação com o DeepStream, use o utils/export_yolo11.py
do script DeepStream-Yolo repositório.
Eis um exemplo de comando:
python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify
Para mais informações sobre a conversão de modelos, consulte a nossa secção de exportação de modelos.
Quais são as referências de desempenho para YOLO em NVIDIA Jetson Orin NX?
O desempenho dos modelos YOLO11 em NVIDIA Jetson Orin NX 16GB varia consoante os níveis de precisão TensorRT . Por exemplo, os modelos YOLO11s atingem:
- Precisão FP32: 14,6 ms/im, 68,5 FPS
- Precisão FP16: 7,94 ms/im, 126 FPS
- Precisão INT8: 5,95 ms/im, 168 FPS
Esses benchmarks destacam a eficiência e a capacidade de usar modelos YOLO11 otimizados para TensorRT no hardware NVIDIA Jetson. Para obter mais detalhes, consulte a nossa secção Resultados de benchmark.