Ir para o conteúdo

Ultralytics YOLO26 em NVIDIA Jetson utilizando DeepStream SDK e TensorRT



Assista: Como usar modelos Ultralytics YOLO26 com NVIDIA Deepstream no Jetson Orin NX 🚀

Este guia abrangente oferece um passo a passo detalhado para implantar o Ultralytics YOLO26 em dispositivos NVIDIA Jetson utilizando DeepStream SDK e TensorRT. Aqui, utilizamos o TensorRT para maximizar o desempenho da inferência na plataforma Jetson.

SDK NVIDIA na plataforma Jetson

Nota

Este guia foi testado com o NVIDIA Jetson Orin Nano Super Developer Kit executando a versão JetPack estável mais recente do JP6.1, Seeed Studio reComputer J4012 que é baseado no NVIDIA Jetson Orin NX 16GB executando a versão JetPack do JP5.1.3 e 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 as versões mais recentes e legadas.

O que é NVIDIA DeepStream?

O DeepStream SDK da NVIDIA é um kit de ferramentas completo de análise de streaming baseado em GStreamer para processamento multi-sensor baseado em IA, vídeo, áudio e compreensão de imagem. É ideal para desenvolvedores de visão de IA, parceiros de software, startups e OEMs que criam aplicações e serviços de IVA (Intelligent Video Analytics). Agora você pode criar pipelines de processamento de stream 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 em dados de vídeo, imagem e sensor. O suporte multi-plataforma do DeepStream oferece uma maneira mais rápida e fácil de desenvolver aplicações e serviços de visão de IA on-premise, na borda e na nuvem.

Pré-requisitos

Antes de começar a seguir este guia:

Dica

Neste guia, utilizamos o método de pacote Debian para instalar o DeepStream SDK no dispositivo Jetson. Você também pode visitar o DeepStream SDK no Jetson (Arquivado) para acessar versões legadas do DeepStream.

Configuração do DeepStream para YOLO26

Aqui estamos usando o repositório GitHub marcoslucianops/DeepStream-Yolo, que inclui suporte ao NVIDIA DeepStream SDK para modelos YOLO. Agradecemos os esforços de marcoslucianops por suas contribuições!

  1. 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
    
  2. Clone o repositório DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copiar o export_yolo26.py ficheiro de DeepStream-Yolo/utils diretório para o ultralytics pasta

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
    
  4. Baixe o modelo de detecção Ultralytics YOLO26 (.pt) de sua escolha em YOLO26 releases. Aqui, usamos yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
    

    Nota

    Você também pode usar um modelo YOLO26 treinado sob medida.

  5. Converter modelo para ONNX

    python3 export_yolo26.py -w yolo26s.pt
    

    Passe os argumentos abaixo para o comando acima

    Para DeepStream 5.1, remova o --dynamic arg e use opset 12 ou inferior. O padrão opset é 17.

    --opset 12
    

    Para alterar o tamanho da inferência (padrã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 usar o tamanho de lote estático (exemplo para tamanho de lote = 4)

    --batch 4
    
  6. Copiar o gerado .onnx arquivo de modelo e labels.txt ficheiro para o DeepStream-Yolo pasta

    cp yolo26s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Defina a versão do 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 JetPack 6.1:

    export CUDA_VER=12.6
    
  8. Compile a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. Editar o config_infer_primary_yolo26.txt arquivo de acordo com seu modelo (para YOLO26s com 80 classes)

    [property]
    ...
    onnx-file=yolo26s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. Editar o deepstream_app_config arquivo

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
    
  11. Você também pode alterar a fonte do vídeo em deepstream_app_config arquivo. Aqui, um arquivo de vídeo padrão é carregado

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
    

Executar Inferência

deepstream-app -c deepstream_app_config.txt

Nota

Levará um longo tempo para gerar o arquivo de engine TensorRT antes de iniciar a inferência. Portanto, por favor, seja paciente.

YOLO26 com deepstream

Dica

Se você quiser 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_yolo26.txt

Calibração INT8

Se você deseja usar a precisão INT8 para inferência, você precisa seguir os passos abaixo:

Nota

Atualmente, o INT8 não funciona com o TensorRT 10.x. Esta seção do guia foi testada com o TensorRT 8.x, que deve funcionar.

  1. Definir OPENCV variável de ambiente

    export OPENCV=1
    
  2. Compile a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Para o conjunto de dados COCO, baixe o val2017, extraia e mova para DeepStream-Yolo pasta

  4. Crie um novo diretório para imagens de calibração

    mkdir calibration
    
  5. 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

    A NVIDIA recomenda pelo menos 500 imagens para obter uma boa precisão. Neste exemplo, 1000 imagens são escolhidas para obter uma melhor precisão (mais imagens = mais precisão). Você pode configurá-lo em head -1000. Por exemplo, para 2000 imagens, head -2000. Este processo pode demorar muito.

  6. Criar o calibration.txt ficheiro com todas as imagens selecionadas

    realpath calibration/*jpg > calibration.txt
    
  7. Definir variáveis de ambiente

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Nota

    Valores mais altos de INT8_CALIB_BATCH_SIZE resultarão em mais precisão e maior velocidade de calibração. Defina-o de acordo com a memória da sua GPU.

  8. Atualize o config_infer_primary_yolo26.txt arquivo

    De

    ...
    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 MultiStream



Assista: Como executar múltiplos streams com DeepStream SDK no Jetson Nano usando Ultralytics YOLO26 🎉

Para configurar vários fluxos em uma única aplicação DeepStream, faça as seguintes alterações no deepstream_app_config.txt arquivo:

  1. Altere as linhas e colunas para construir uma exibição em grade de acordo com o número de streams que você deseja ter. Por exemplo, para 4 streams, podemos adicionar 2 linhas e 2 colunas.

    [tiled-display]
    rows=2
    columns=2
    
  2. Definir num-sources=4 e adicione o uri entradas para todos os quatro 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
Configuração de streaming com várias câmaras DeepStream

Resultados de Benchmark

Os benchmarks a seguir resumem o desempenho dos modelos YOLO26 em diferentes níveis de precisão do TensorRT com um tamanho de entrada de 640x640 no NVIDIA Jetson Orin NX 16GB.

Gráfico de Comparação

Benchmarks de desempenho NVIDIA DeepStream

Tabela de Comparação Detalhada

Desempenho

FormatoStatusTempo de inferência (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54
FormatoStatusTempo de inferência (ms/im)
TensorRT (FP32)14.53
TensorRT (FP16)7.91
TensorRT (INT8)6.05
FormatoStatusTempo de inferência (ms/im)
TensorRT (FP32)32.05
TensorRT (FP16)15.55
TensorRT (INT8)10.43
FormatoStatusTempo de inferência (ms/im)
TensorRT (FP32)39.68
TensorRT (FP16)19.88
TensorRT (INT8)13.64
FormatoStatusTempo de inferência (ms/im)
TensorRT (FP32)80.65
TensorRT (FP16)39.06
TensorRT (INT8)22.83

Agradecimentos

Este guia foi inicialmente criado por nossos amigos da Seeed Studio, Lakshantha e Elaine.

FAQ

Como configuro o Ultralytics YOLO26 em um dispositivo NVIDIA Jetson?

Para configurar o Ultralytics YOLO26 em um dispositivo NVIDIA Jetson, você precisa primeiro instalar o DeepStream SDK 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 YOLO26.

Qual é o benefício de usar TensorRT com YOLO26 no NVIDIA Jetson?

A utilização do TensorRT com YOLO26 otimiza o modelo para inferência, reduzindo significativamente a latência e melhorando o throughput em dispositivos NVIDIA Jetson. O TensorRT oferece inferência de deep learning de alto desempenho e baixa latência através da fusão de camadas, calibração de precisão e autoajuste de kernel. Isso resulta em 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 o Ultralytics YOLO26 com DeepStream SDK em diferentes hardwares NVIDIA Jetson?

Sim, o guia para implantar o Ultralytics YOLO26 com o DeepStream SDK e 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 seção Configuração do DeepStream para YOLO26 para obter etapas detalhadas.

Como posso converter um modelo YOLO26 para ONNX para DeepStream?

Para converter um modelo YOLO26 para o formato ONNX para implantação com DeepStream, use o utils/export_yolo26.py script de DeepStream-Yolo repositório.

Aqui está um comando de exemplo:

python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

Para obter mais detalhes sobre a conversão de modelos, consulte a nossa seção de exportação de modelos.

Quais são os benchmarks de desempenho para YOLO no NVIDIA Jetson Orin NX?

O desempenho dos modelos YOLO26 no NVIDIA Jetson Orin NX 16GB varia com base nos níveis de precisão do TensorRT. Por exemplo, os modelos YOLO26s alcançam:

  • 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 YOLO26 otimizados com TensorRT em hardware NVIDIA Jetson. Para mais detalhes, consulte nossa seção de Resultados de Benchmark.



📅 Criado há 1 ano ✏️ Atualizado há 5 dias
glenn-jocherRizwanMunawarlakshanthadpderrengermiles-deans-ultralyticsY-T-GUltralyticsAssistantMatthewNoyce

Comentários