Ultralytics YOLO27:
Get Started

Ultralytics YOLO26 na NVIDIA Jetson usando DeepStream SDK e TensorRT#



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

Este guia abrangente apresenta uma explicação detalhada sobre como implementar o Ultralytics YOLO26 em dispositivos NVIDIA Jetson usando DeepStream SDK e TensorRT. Aqui, usamos TensorRT para maximizar o desempenho da inferência na plataforma Jetson.

Este guia explica a configuração do DeepStream para YOLO26, a calibração INT8, a configuração de vários fluxos e os resultados dos benchmarks.

NVIDIA DeepStream SDK on Jetson platform
Nota

Este guia foi testado com o NVIDIA Jetson Orin Nano Super Developer Kit executando a versão JetPack JP6.1, o Seeed Studio reComputer J4012, baseado no NVIDIA Jetson Orin NX de 16 GB e executando a versão JetPack JP5.1.3, e o Seeed Studio reComputer J1020 v2, baseado no NVIDIA Jetson Nano de 4 GB e executando a versão JetPack JP4.6.4. Espera-se que funcione em toda a linha de hardware NVIDIA Jetson, incluindo os modelos mais recentes e os mais antigos.

O que é o NVIDIA DeepStream?#

O DeepStream SDK da NVIDIA é um conjunto completo de ferramentas de análise de fluxos, baseado no GStreamer, para processamento multissensor com IA e compreensão de vídeo, áudio e imagens. É ideal para desenvolvedores de IA visual, parceiros de software, startups e fabricantes de equipamento original (OEMs) que criam aplicações e serviços de análise inteligente de vídeo (IVA). Agora, podes criar pipelines de processamento de fluxos que incorporam redes neurais e outras tarefas complexas de processamento, como rastreamento, codificação/descodificação de vídeo e renderização de vídeo. Esses pipelines permitem análises em tempo real de dados de vídeo, imagem e sensores. O suporte multiplataforma do DeepStream oferece uma forma mais rápida e fácil de desenvolver aplicações e serviços de IA visual localmente, na periferia da rede e na nuvem.

Pré-requisitos#

Antes de começares a seguir este guia:

Dica

Neste guia, usamos o método de pacote Debian para instalar o DeepStream SDK no dispositivo Jetson. Também podes consultar o DeepStream SDK no Jetson (arquivado) para aceder a versões antigas do DeepStream.

Configuração do DeepStream para YOLO26#

Aqui, usamos o repositório GitHub marcoslucianops/DeepStream-Yolo, que inclui suporte do NVIDIA DeepStream SDK para modelos YOLO. Agradecemos o trabalho e as contribuições de marcoslucianops!

  1. Instala o Ultralytics com as dependências necessárias

    pip install ultralytics onnx onnxslim
  2. Clona o repositório DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Transfere um modelo de deteção Ultralytics YOLO26 (.pt) à tua escolha do projeto YOLO26. Aqui, usamos yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Nota
  1. Converte o modelo para ONNX e escreve o ficheiro labels.txt de onde o DeepStream lê os nomes das classes

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # cria 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Argumentos de exportação

nms=False exporta a cabeça sem NMS, e agnostic_nms=True mantém uma única classe por deteção para que cluster-mode=4 (sem agrupamento) na configuração do DeepStream não desenhe duas vezes a mesma caixa. Adiciona imgsz=1280 para alterar o tamanho da inferência (predefinição: 640), batch=4 para um tamanho de lote de 4 (o lote exportado é estático, por isso tem de corresponder a batch-size na configuração do DeepStream) e opset=12 para TensorRT 8.2 ou anterior (DeepStream 6.0.1 e anteriores). Consulta a lista completa de argumentos de exportação.

  1. Copia o ficheiro de modelo gerado .onnx e o ficheiro labels.txt para a pasta DeepStream-Yolo

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Define 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

    Para o JetPack 7.1:

    export CUDA_VER=13.0
  3. Compila a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Edita o ficheiro config_infer_primary_yolo26.txt de acordo com o teu modelo (para YOLO26s com 80 classes)

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

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

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

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Também podes alterar a origem do vídeo no ficheiro deepstream_app_config. Aqui, é carregado um ficheiro de vídeo predefinido

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

Executa a inferência#

deepstream-app -c deepstream_app_config.txt
Nota

A geração do ficheiro do mecanismo TensorRT demorará bastante tempo antes de a inferência começar. Por isso, tem paciência.

YOLO26 with deepstream
Dica

Se quiseres converter o modelo para 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 quiseres usar precisão INT8 para a inferência, tens de seguir estes passos:

Nota

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

  1. Define a variável de ambiente OPENCV

    export OPENCV=1
  2. Compila a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Para o conjunto de dados COCO, transfere o val2017, extrai-o e move-o para a pasta DeepStream-Yolo

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

    mkdir calibration
  5. Executa o seguinte para selecionar 1000 imagens aleatórias do conjunto de dados COCO para 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, são selecionadas 1000 imagens para obter maior precisão (mais imagens = maior precisão). Podes definir esse valor com head -1000. Por exemplo, para 2000 imagens, usa head -2000. Este processo pode demorar bastante tempo.

  1. Cria o ficheiro calibration.txt com todas as imagens selecionadas

    realpath calibration/*jpg > calibration.txt
  2. Define as 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 resultam em maior precisão e numa calibração mais rápida. Define o valor de acordo com a memória da tua GPU.

  1. Atualiza o ficheiro 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
    ...

Executa a inferência INT8#

Executa o mesmo comando para criar o mecanismo INT8 e iniciar a inferência:

deepstream-app -c deepstream_app_config.txt

Configuração de vários fluxos#



Assista: Como executar inferência em vários fluxos com Ultralytics YOLO26 usando NVIDIA DeepStream no Jetson Orin 🚀

Para configurar vários fluxos numa única aplicação DeepStream, faz as seguintes alterações no ficheiro deepstream_app_config.txt:

  1. Altera as linhas e as colunas para criar uma grelha de visualização de acordo com o número de fluxos pretendido. Por exemplo, para 4 fluxos, podemos adicionar 2 linhas e 2 colunas.

    [tiled-display]
    rows=2
    columns=2
  2. Adiciona um grupo [sourceN] separado para cada fluxo, cada um com o 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

Executa a inferência com vários fluxos#

Executa o mesmo comando para iniciar todos os fluxos na visualização em mosaico:

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

Resultados dos benchmarks#

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

Gráfico comparativo#

NVIDIA Jetson DeepStream performance benchmarks

Tabela comparativa 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 pelos nossos amigos da Seeed Studio, Lakshantha e Elaine.

Perguntas frequentes#

  • Para configurar o Ultralytics YOLO26 num dispositivo NVIDIA Jetson, primeiro tens de instalar o DeepStream SDK compatível com a tua versão do JetPack. Segue o guia passo a passo do nosso Guia de início rápido para configurar o NVIDIA Jetson para a implementação do YOLO26.

  • Usar TensorRT com YOLO26 otimiza o modelo para inferência, reduzindo significativamente a latência e melhorando o débito em dispositivos NVIDIA Jetson. O TensorRT proporciona inferência de aprendizagem profunda de alto desempenho e baixa latência através da fusão de camadas, da calibração de precisão e da otimização automática de kernels. Isto permite 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.

  • Sim, o guia para implementar o Ultralytics YOLO26 com DeepStream SDK e TensorRT é compatível com toda a linha NVIDIA Jetson. Isto inclui dispositivos como o Jetson Orin NX de 16 GB com JetPack 5.1.3 e o Jetson Nano de 4 GB com JetPack 4.6.4. Consulta a secção Configuração do DeepStream para YOLO26 para ver as instruções detalhadas.

  • Exporta o modelo com a cabeça sem NMS usando o exportador Ultralytics e escreve o ficheiro labels.txt de onde o DeepStream lê os nomes das classes:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # cria 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    Adiciona opset=12 para TensorRT 8.2 ou anterior (DeepStream 6.0.1 e anteriores). Para mais detalhes sobre a conversão de modelos, consulta a nossa secção de exportação de modelos.

  • Para executar inferência INT8, calibra o modelo com um conjunto representativo de imagens e muda a configuração do DeepStream para o modo INT8. Transfere as imagens COCO val2017, seleciona cerca de 1000 imagens de calibração, define as variáveis de ambiente INT8_CALIB_IMG_PATH e INT8_CALIB_BATCH_SIZE e, em seguida, atualiza config_infer_primary_yolo26.txt com model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table e network-mode=1. Consulta a secção Calibração INT8 para ver todas as etapas. Atualmente, INT8 requer TensorRT 8.x.

  • Para processar vários fluxos numa única aplicação DeepStream, edita o ficheiro deepstream_app_config.txt para adicionar uma grelha de visualização em mosaico e listar cada URI de origem. Define rows e columns em [tiled-display] para criar a grelha, adiciona um grupo [sourceN] separado por fluxo, com os seus próprios uri e num-sources=1, e ajusta a grelha ao número de fluxos. Consulta a secção Configuração de vários fluxos para ver um exemplo completo.

  • O desempenho dos modelos YOLO11 no NVIDIA Jetson Orin NX de 16 GB varia consoante 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

    Esses benchmarks destacam a eficiência e a capacidade de usar modelos YOLO11 otimizados para TensorRT no hardware NVIDIA Jetson. Para mais detalhes, consulta a seção Resultados dos benchmarks.

Comentários