Ultralytics YOLOv8 no NVIDIA Jetson usando DeepStream SDK e TensorRT
Este guia abrangente fornece um passo a passo detalhado para implantar Ultralytics YOLOv8 em dispositivos NVIDIA Jetson usando DeepStream SDK e TensorRT. Aqui usamos TensorRT para maximizar o desempenho da inferência na plataforma Jetson.
Nota
Este guia foi testado tanto com o Seeed Studio reComputer J4012, que é baseado no NVIDIA Jetson Orin NX 16GB executando a versão JetPack do JP5.1.3, quanto com o Seeed Studio reComputer J1020 v2, que é baseado no NVIDIA Jetson Nano 4GB executando 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 legado.
O que é NVIDIA DeepStream?
O DeepStream SDK da NVIDIA é um kit de ferramentas completo de análise de streaming baseado no GStreamer para processamento multissensor baseado em AI, vídeo, áudio e compreensão de imagem. É ideal para desenvolvedores de AI de visão, parceiros de software, startups e OEMs que criam aplicativos e serviços de IVA (Intelligent Video Analytics). Agora podes criar pipelines de processamento de fluxo que incorporam redes neurais e outras tarefas de processamento complexas, como rastreio, 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:
- Visita a nossa documentação, Guia de Início Rápido: NVIDIA Jetson com Ultralytics YOLOv8 para configurar o teu dispositivo NVIDIA Jetson com Ultralytics YOLOv8
-
Instala o DeepStream SDK de acordo com a versão do JetPack
- Para o JetPack 4.6.4, instala o DeepStream 6.0.1
- Para o JetPack 5.1.3, instala o DeepStream 6.3
Dica
Neste guia, usamos o método do pacote Debian para instalar o DeepStream SDK no dispositivo Jetson. Também podes visitar a página DeepStream SDK on Jetson (Archived) para aceder a versões antigas do DeepStream.
Configuração DeepStream para YOLOv8
Aqui estamos a utilizar o repositório marcoslucianops/DeepStream-Yolo GitHub que inclui o suporte NVIDIA DeepStream SDK para modelos YOLO . Agradecemos os esforços de marcoslucianops pelas suas contribuições!
-
Instalar dependências
-
Clone o seguinte repositório
-
Descarrega Ultralytics YOLOv8 modelo de deteção (.pt) à tua escolha a partir das versõesYOLOv8 . Aqui utilizamos yolov8s.pt.
Nota
Também podes utilizar um modelo YOLOv8 personalizado e treinado.
-
Converter modelo em ONNX
Passe os argumentos abaixo para o comando acima
Para DeepStream 6.0.1, use opset 12 ou inferior. O opset padrão é 16.
Para alterar o tamanho da inferência (padrão: 640)
Exemplo para 1280:
Para simplificar o ONNX modelo (DeepStream >= 6,0)
Para usar tamanho de lote dinâmico (DeepStream >= 6.1)
Para usar tamanho de lote estático (exemplo para tamanho de lote = 4)
-
Defina a versão CUDA de acordo com a versão do JetPack instalada
Para JetPack 4.6.4:
Para JetPack 5.1.3:
-
Compilar a biblioteca
-
Edite o
config_infer_primary_yoloV8.txt
arquivo de acordo com seu modelo (por YOLOv8s com 80 aulas) -
Edite o
deepstream_app_config
ficheiro -
Você também pode alterar a fonte de vídeo em
deepstream_app_config
arquivo. Aqui um arquivo de vídeo padrão é carregado
Executar inferência
Nota
Levará muito tempo para gerar o TensorRT arquivo do mecanismo antes de iniciar a inferência. Então, por favor, seja paciente.
Dica
Se você deseja converter o modelo para precisão FP16, basta definir model-engine-file=model_b1_gpu0_fp16.engine
e network-mode=2
dentro config_infer_primary_yoloV8.txt
Calibração INT8
Se quiseres utilizar a precisão INT8 para a inferência, tens de seguir os passos seguintes
-
Definir
OPENCV
variável de ambiente -
Compilar a biblioteca
-
Para o conjunto de dados COCO, descarrega o val2017, extrai e passa para
DeepStream-Yolo
pasta -
Crie um novo diretório para imagens de calibração
-
Execute o seguinte para selecionar 1000 imagens aleatórias do conjunto de dados COCO para executar a calibração
Nota
A NVIDIA recomenda pelo menos 500 imagens para obteres uma boa precisão. Neste exemplo, escolheste 1000 imagens para obteres uma melhor precisão (mais imagens = mais precisão). Podes definir a partir de head -1000. Por exemplo, para 2000 imagens, coloca a cabeça -2000. Este processo pode demorar muito tempo.
-
Crie o
calibration.txt
arquivo com todas as imagens selecionadas -
Definir variáveis de ambiente
Nota
Valores mais altos de INT8_CALIB_BATCH_SIZE resultarão em mais precisão e velocidade de calibração mais rápida. Configure-o de acordo com a memória da sua GPU.
-
Atualize o
config_infer_primary_yoloV8.txt
ficheiroDe
Para
Executar inferência
Configuração MultiStream
Para configurar vários streams em um único aplicativo deepstream, você pode fazer as seguintes alterações no arquivo deepstream_app_config.txt
ficheiro
-
Altere as linhas e colunas para construir uma exibição em grade de acordo com o número de fluxos que você deseja ter. Por exemplo, para 4 fluxos, podemos adicionar 2 linhas e 2 colunas.
-
Definir
num-sources=4
e adicioneuri
de todos os 4 fluxos
Executar inferência
Resultados de referência
A tabela a seguir resume como YOLOv8s modelos funcionam em diferentes TensorRT níveis de precisão com um tamanho de entrada de 640x640 em NVIDIA Jetson Orin NX 16GB.
Nome do modelo | Precisão | Tempo de inferência (ms/im) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
Reconhecimentos
Este guia foi criado inicialmente por nossos amigos do Seeed Studio, Lakshantha e Elaine.