YOLO Vision 2026:

Ultralytics YOLO26 no NVIDIA Jetson usando DeepStream SDK e TensorRT#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Este guia abrangente fornece um passo a passo detalhado para implantar o Ultralytics YOLO26 em dispositivos NVIDIA Jetson usando o DeepStream SDK e o TensorRT. Aqui usamos o TensorRT para maximizar o desempenho de inferência na plataforma Jetson.

Este guia aborda a configuração do DeepStream para o YOLO26, calibração INT8, configuração de múltiplos fluxos e resultados de benchmark.

NVIDIA DeepStream SDK on Jetson platform
Nota

Este guia foi testado com o NVIDIA Jetson Orin Nano Super Developer Kit executando a versão estável mais recente do JetPack JP6.1, Seeed Studio reComputer J4012, que é baseado no NVIDIA Jetson Orin NX 16GB executando a versão do JetPack JP5.1.3, e Seeed Studio reComputer J1020 v2, que é baseado no NVIDIA Jetson Nano 4GB executando a versão do JetPack JP4.6.4. Espera-se que funcione em toda a linha de hardware da NVIDIA Jetson, incluindo as versões mais recentes e legadas.

O que é o NVIDIA DeepStream?#

O DeepStream SDK da NVIDIA é um kit de ferramentas de análise de streaming completo baseado no GStreamer para processamento multissensor baseado em IA, compreensão de vídeo, áudio e imagem. É ideal para desenvolvedores de visão computacional por IA, parceiros de software, startups e OEMs que criam aplicativos e serviços de IVA (Análise Inteligente de Vídeo). Agora você pode 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 em dados de vídeo, imagem e sensores. O suporte multiplataforma do DeepStream oferece uma maneira mais rápida e fácil de desenvolver aplicativos e serviços de visão computacional por IA no local, na borda e na nuvem.

Pré-requisitos#

Antes de começar a seguir este guia:

Dica

Neste guia, usamos 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 do GitHub marcoslucianops/DeepStream-Yolo, que inclui suporte do NVIDIA DeepStream SDK para modelos YOLO. Agradecemos os esforços de marcoslucianops por suas contribuições!

  1. Instale o 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. Copie o arquivo export_yolo26.py do diretório DeepStream-Yolo/utils para a pasta ultralytics

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

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Nota
  1. Converta o modelo para ONNX

    python3 export_yolo26.py -w yolo26s.pt
Passe os argumentos abaixo para o comando acima

Para o DeepStream 5.1, remova o argumento --dynamic e use opset 12 ou inferior. O opset padrão é 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 tamanho de lote (batch-size) dinâmico (DeepStream >= 6.1)

--dynamic

Para usar tamanho de lote (batch-size) estático (exemplo para batch-size = 4)

--batch 4
  1. Copie o arquivo de modelo .onnx gerado e o arquivo labels.txt para a pasta DeepStream-Yolo

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Defina a versão do CUDA de acordo com a versão do JetPack instalada

    Para o JetPack 4.6.4:

    export CUDA_VER=10.2

    Para o JetPack 5.1.3:

    export CUDA_VER=11.4

    Para o JetPack 6.1:

    export CUDA_VER=12.6
  3. Compile a biblioteca

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

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
Configurações de precisão do YOLO26

O YOLO26 redimensiona a entrada com preenchimento central e executa sem NMS. Para obter a melhor precisão, adicione o seguinte à seção [property] de config_infer_primary_yolo26.txt:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Edite o arquivo deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Você também pode alterar a fonte de vídeo no arquivo deepstream_app_config. 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 tempo para gerar o arquivo de mecanismo TensorRT antes de iniciar a inferência. Portanto, por favor, seja paciente.

YOLO26 with deepstream
Dica

Se você quiser converter o modelo para a precisão FP16, basta definir model-engine-file=model_b1_gpu0_fp16.engine e network-mode=2 dentro de config_infer_primary_yolo26.txt

Calibração INT8#

Se você deseja usar 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. Defina a variável de ambiente OPENCV

    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 a pasta DeepStream-Yolo

  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 realizar 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 melhor precisão (mais imagens = mais precisão). Você pode configurá-lo com head -1000. Por exemplo, para 2000 imagens, head -2000. Esse processo pode demorar um pouco.

  1. Crie o arquivo calibration.txt com todas as imagens selecionadas

    realpath calibration/*jpg > calibration.txt
  2. Defina 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 maior precisão e velocidade de calibração mais rápida. Defina de acordo com a memória da sua GPU.

  1. Atualize o arquivo config_infer_primary_yolo26.txt

    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 INT8#

Execute o mesmo comando para construir o motor INT8 e iniciar a inferência:

deepstream-app -c deepstream_app_config.txt

Configuração MultiStream#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Para configurar vários fluxos sob um único aplicativo DeepStream, faça as seguintes alterações no arquivo deepstream_app_config.txt:

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

    [tiled-display]
    rows=2
    columns=2
  2. Adicione um grupo [sourceN] separado para cada fluxo, cada um com seu próprio uri e num-sources=1.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Executar inferência Multi-Stream#

Execute o mesmo comando para iniciar todos os fluxos na exibição em grade:

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Resultados de benchmark#

Os seguintes benchmarks resumem o desempenho dos modelos YOLO11 em diferentes níveis de precisão do TensorRT com um tamanho de entrada de 640x640 no NVIDIA Jetson Orin NX 16GB. O YOLO26 usa o mesmo fluxo de trabalho de exportação e inferência do DeepStream descrito acima.

Gráfico de comparação#

NVIDIA Jetson DeepStream performance benchmarks

Tabela de comparação detalhada#

Desempenho
FormatoStatusTempo de inferência (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Agradecimentos#

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

FAQ#

  • Para configurar o Ultralytics YOLO26 em um dispositivo NVIDIA Jetson, primeiro você precisa instalar o DeepStream SDK compatível com a sua versão do JetPack. Siga o guia passo a passo em nosso Guia de Início Rápido para configurar o seu NVIDIA Jetson para a implantação do YOLO26.

  • O uso do TensorRT com o YOLO26 otimiza o modelo para inferência, reduzindo significativamente a latência e melhorando a taxa de transferência em dispositivos NVIDIA Jetson. O TensorRT fornece inferência de deep learning de alto desempenho e baixa latência por meio de fusão de camadas, calibração de precisão e auto-ajuste de kernels. Isso leva a uma execução mais rápida e eficiente, o que é particularmente útil para aplicativos em tempo real, como análise de vídeo e máquinas autônomas.

  • Sim, o guia para implantar o Ultralytics YOLO26 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 o JetPack 5.1.3 e o Jetson Nano 4GB com o JetPack 4.6.4. Consulte a seção Configuração do DeepStream para o YOLO26 para ver as etapas detalhadas.

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

    Aqui está um exemplo de comando:

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

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

  • Para executar a inferência INT8, calibre o modelo em um conjunto de imagens representativo e altere a configuração do DeepStream para o modo INT8. Baixe as imagens do COCO val2017, selecione cerca de 1000 imagens de calibração, defina as variáveis de ambiente INT8_CALIB_IMG_PATH e INT8_CALIB_BATCH_SIZE e, em seguida, atualize config_infer_primary_yolo26.txt com model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table e network-mode=1. Consulte a seção Calibração INT8 para ver todas as etapas. O INT8 atualmente requer o TensorRT 8.x.

  • Para processar múltiplos fluxos em um único aplicativo DeepStream, edite o arquivo deepstream_app_config.txt para adicionar uma grade de exibição em mosaico e listar cada URI de origem. Defina rows e columns em [tiled-display] para construir a grade, adicione um grupo [sourceN] separado por fluxo com seu próprio uri e num-sources=1, e ajuste a grade para se adequar ao número de fluxos. Consulte a seção Configuração de Múltiplos Fluxos para ver um exemplo completo.

  • O desempenho dos modelos YOLO11 no NVIDIA Jetson Orin NX 16GB varia de acordo com os níveis de precisão do TensorRT. Por exemplo, os modelos YOLO11s alcançam:

    • Precisão FP32: 14,53 ms/im, 68,8 FPS
    • Precisão FP16: 7,91 ms/im, 126 FPS
    • Precisão INT8: 6,05 ms/im, 165 FPS

    Estes benchmarks destacam a eficiência e a capacidade de usar modelos YOLO11 otimizados para TensorRT em hardware NVIDIA Jetson. Para mais detalhes, consulte nossa seção de Resultados de Benchmark.

Comentários