Ultralytics YOLO27:

Ultralytics YOLO26 na NVIDIA Jetson usando DeepStream SDK e TensorRT#



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

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

Este guia aborda a configuração do DeepStream para YOLO26, a calibração INT8, a configuração de vários streams e os 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, a JP6.1, o Seeed Studio reComputer J4012, baseado no NVIDIA Jetson Orin NX de 16 GB e executando a versão JP5.1.3 do JetPack, e o Seeed Studio reComputer J1020 v2, baseado no NVIDIA Jetson Nano de 4 GB e executando a versão JP4.6.4 do JetPack. Espera-se que funcione em toda a linha de hardware NVIDIA Jetson, incluindo os modelos mais recentes e os legados.

O que é o NVIDIA DeepStream?#

O DeepStream SDK da NVIDIA é um kit de ferramentas completo de análise de streams baseado no GStreamer para processamento multissensor orientado por IA, compreensão de vídeo, áudio e imagens. É ideal para desenvolvedores de IA para visão, parceiros de software, startups e OEMs que desenvolvem aplicações e serviços de IVA (análise de vídeo inteligente). Agora, você pode criar pipelines de processamento de streams que incorporam redes neurais e outras tarefas complexas de processamento, 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, imagem e sensores. O suporte multiplataforma do DeepStream oferece uma maneira mais rápida e fácil de desenvolver aplicações e serviços de IA para visão 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 instalação por pacote Debian do DeepStream SDK no dispositivo Jetson. Você também pode consultar o DeepStream SDK no Jetson (arquivado) para acessar versões legadas do DeepStream.

Configuração do DeepStream para YOLO26#

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

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

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

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Transfira um modelo de deteção Ultralytics YOLO26 (.pt) à sua escolha a partir do projeto YOLO26. Aqui, usamos o 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 a partir do qual o DeepStream lê os nomes das classes

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates '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 uma caixa duas vezes. 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, pelo que deve corresponder a batch-size na configuração do DeepStream) e opset=12 para TensorRT 8.2 ou anterior (DeepStream 6.0.1 e anterior). Vê os export arguments para a lista completa.

  1. Copie o ficheiro de modelo .onnx gerado e o ficheiro 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 instalada do JetPack

    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. Compile a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Edite o ficheiro config_infer_primary_yolo26.txt de acordo com o seu 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 centralizado e é executado sem NMS. Para obter a melhor precisão, adicione o seguinte à secção [property] de config_infer_primary_yolo26.txt:

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

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Você também pode alterar a fonte de 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

Execute a inferência#

deepstream-app -c deepstream_app_config.txt
Nota

A geração do ficheiro do mecanismo TensorRT demorará bastante tempo antes do início da inferência. Portanto, aguarde com paciência.

YOLO26 with deepstream
Dica

Se 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 quiser usar a precisão INT8 para a inferência, você precisa seguir os passos abaixo:

Nota

Atualmente, INT8 não funciona com o TensorRT 10.x. Esta secção do guia foi testada com o TensorRT 8.x, que deverá 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, transfira o val2017, extraia-o e mova-o para a pasta DeepStream-Yolo

  4. Crie um novo diretório para as 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, são escolhidas 1000 imagens para obter uma precisão melhor (mais imagens = mais precisão). Você pode definir esse valor a partir de head -1000. Por exemplo, para 2000 imagens, use head -2000. Este processo pode demorar bastante tempo.

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

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

  1. Atualize 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
    ...

Execute a inferência INT8#

Execute 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 streams#



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

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

  1. Altere as linhas e as colunas para criar uma apresentação em grelha de acordo com o número de streams que você pretende ter. Por exemplo, para 4 streams, podemos adicionar 2 linhas e 2 colunas.

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

Execute a inferência em vários streams#

Execute o mesmo comando para iniciar todos os streams na apresentação lado a lado:

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

Resultados de benchmark#

Os benchmarks seguintes 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 de 16 GB. 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
FormatoEstadoTempo de inferência (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Agradecimentos#

Este guia foi criado originalmente pelos nossos amigos da Seeed Studio, Lakshantha e Elaine.

Perguntas frequentes#

  • Para configurar o Ultralytics YOLO26 num dispositivo NVIDIA Jetson, primeiro você precisa instalar o DeepStream SDK compatível com a sua versão do JetPack. Siga o passo a passo no nosso Guia de início rápido para configurar a sua 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 throughput em dispositivos NVIDIA Jetson. O TensorRT oferece inferência de deep learning de alto desempenho e baixa latência por meio da fusão de camadas, calibração de precisão e ajuste automático de kernels. Isso resulta numa 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 o DeepStream SDK e o TensorRT é compatível com toda a linha NVIDIA Jetson. Isso 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. Consulte a secção Configuração do DeepStream para YOLO26 para obter instruções detalhadas.

  • Exporta o modelo com a cabeça sem NMS utilizando o exportador Ultralytics, e escreve o ficheiro labels.txt a partir do qual o DeepStream lê os nomes das classes:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates '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 anterior). Para mais detalhes sobre a conversão de modelos, consulta a nossa model export section.

  • Para executar a inferência INT8, calibre o modelo num conjunto representativo de imagens e altere a configuração do DeepStream para o modo INT8. Transfira as imagens val2017 do COCO, 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 secção Calibração INT8 para ver todos os passos. Atualmente, INT8 requer o TensorRT 8.x.

  • Para processar vários streams numa única aplicação DeepStream, edite o ficheiro deepstream_app_config.txt para adicionar uma grelha de apresentação lado a lado e listar cada URI de origem. Defina rows e columns em [tiled-display] para criar a grelha, adicione um grupo [sourceN] separado por stream com o seu próprio uri e num-sources=1 e ajuste a grelha para se adequar ao número de streams. Consulte a secção Configuração de vários streams para ver um exemplo completo.

  • O desempenho dos modelos YOLO11 no NVIDIA Jetson Orin NX de 16 GB 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 pelo TensorRT no hardware NVIDIA Jetson. Para obter mais detalhes, consulte a nossa secção Resultados de benchmark.

Comentários