Salta para o conteúdo

Ultralytics YOLO11 em NVIDIA Jetson usando DeepStream SDK e TensorRT



Observa: How to Run Multiple Streams with DeepStream SDK on Jetson Nano using Ultralytics YOLO11

This comprehensive guide provides a detailed walkthrough for deploying Ultralytics YOLO11 on NVIDIA Jetson devices using DeepStream SDK and TensorRT. Here we use TensorRT to maximize the inference performance on the Jetson platform.

DeepStream em NVIDIA Jetson

Nota

Este guia foi testado com o Seeed Studio reComputer J4012, que se baseia no NVIDIA Jetson Orin NX 16GB com a versão JetPack do JP5.1.3 e com o Seeed Studio reComputer J1020 v2, que se baseia no NVIDIA Jetson Nano 4GB com 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?

NVIDIA's DeepStream SDK is a complete streaming analytics toolkit based on GStreamer for AI-based multi-sensor processing, video, audio, and image understanding. It's ideal for vision AI developers, software partners, startups, and OEMs building IVA (Intelligent Video Analytics) apps and services. You can now create stream-processing pipelines that incorporate neural networks and other complex processing tasks like tracking, video encoding/decoding, and video rendering. These pipelines enable real-time analytics on video, image, and sensor data. DeepStream's multi-platform support gives you a faster, easier way to develop vision AI applications and services on-premise, at the edge, and in the cloud.

Pré-requisitos

Antes de começar a seguir este guia:

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 do DeepStream para YOLO11

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

  1. Instalar dependências

    pip install cmake
    pip install onnxsim
    
  2. Clone o seguinte repositório

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolov8s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    Nota

    You can also use a custom trained YOLO11 model.

  4. Converter modelo em ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Passe os argumentos abaixo para o comando acima

    Para DeepStream 6.0.1, use opset 12 ou inferior. O opset padrão é 16.

    --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 ONNX modelo (DeepStream >= 6,0)

    --simplify
    

    Para usar tamanho de lote dinâmico (DeepStream >= 6.1)

    --dynamic
    

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

    --batch 4
    
  5. Define 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
    
  6. Compilar a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Edite o config_infer_primary_yoloV8.txt arquivo de acordo com seu modelo (por YOLOv8s com 80 aulas)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Edite o deepstream_app_config ficheiro

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. Você também pode alterar a fonte de 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á muito tempo para gerar o TensorRT arquivo do mecanismo antes de iniciar a inferência. Então, por favor, seja paciente.

YOLO11 with deepstream

Dica

If you want to convert the model to FP16 precisão, simply set 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

  1. Definir OPENCV variável de ambiente

    export OPENCV=1
    
  2. Compilar a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Para o conjunto de dados COCO, descarrega o val2017, extrai e passa 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

    NVIDIA recommends at least 500 images to get a good accuracy. On this example, 1000 images are chosen to get better accuracy (more images = more accuracy). You can set it from head -1000. For example, for 2000 images, head -2000. This process can take a long time.

  6. Crie o calibration.txt arquivo 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 elevados de INT8_CALIB_BATCH_SIZE resultarão numa maior precisão e numa velocidade de calibração mais rápida. Define-o de acordo com a tua memória GPU .

  8. Atualize o config_infer_primary_yoloV8.txt ficheiro

    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

Para configurar vários streams em um único aplicativo deepstream, você pode fazer as seguintes alterações no arquivo deepstream_app_config.txt ficheiro

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

    [tiled-display]
    rows=2
    columns=2
    
  2. Definir num-sources=4 e adicione uri de todos os 4 fluxos

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

Executar inferência

deepstream-app -c deepstream_app_config.txt
Configuração de fluxo múltiplo

Resultados de referência

A tabela seguinte resume o desempenho dos modelos YOLOv8s em diferentes níveis de precisão TensorRT com um tamanho de entrada de 640x640 em NVIDIA Jetson Orin NX 16GB.

Nome do modeloPrecisãoTempo de inferência (ms/im)FPS
YOLOv8sFP3215.6364
FP167.94126
INT85.53181

Reconhecimentos

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

FAQ

Como é que configuro o Ultralytics YOLO11 num dispositivo NVIDIA Jetson?

To set up Ultralytics YOLO11 on an NVIDIA Jetson device, you first need to install the DeepStream SDK compatible with your JetPack version. Follow the step-by-step guide in our Quick Start Guide to configure your NVIDIA Jetson for YOLO11 deployment.

Qual é a vantagem de utilizar TensorRT com YOLO11 em NVIDIA Jetson?

Using TensorRT with YOLO11 optimizes the model for inference, significantly reducing latency and improving throughput on NVIDIA Jetson devices. TensorRT provides high-performance, low-latency deep learning inference through layer fusion, precision calibration, and kernel auto-tuning. This leads to faster and more efficient execution, particularly useful for real-time applications like video analytics and autonomous machines.

Posso executar o Ultralytics YOLO11 com o DeepStream SDK em diferentes hardwares NVIDIA Jetson?

Yes, the guide for deploying Ultralytics YOLO11 with the DeepStream SDK and TensorRT is compatible across the entire NVIDIA Jetson lineup. This includes devices like the Jetson Orin NX 16GB with JetPack 5.1.3 and the Jetson Nano 4GB with JetPack 4.6.4. Refer to the section DeepStream Configuration for YOLO11 for detailed steps.

Como posso converter um modelo YOLO11 para ONNX para DeepStream?

Para converter um modelo YOLO11 para o formato ONNX para implantação com o DeepStream, usa o utils/export_yoloV8.py do script do DeepStream-Yolo repositório.

Aqui tens um exemplo de comando:

python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify

Para mais informações sobre a conversão de modelos, consulta a nossa secção de exportação de modelos.

Quais são as referências de desempenho para YOLO em NVIDIA Jetson Orin NX?

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

  • Precisão FP32: 15,63 ms/im, 64 FPS
  • Precisão FP16: 7,94 ms/im, 126 FPS
  • Precisão INT8: 5,53 ms/im, 181 FPS

These benchmarks underscore the efficiency and capability of using TensorRT-optimized YOLO11 models on NVIDIA Jetson hardware. For further details, see our Benchmark Results section.

📅 C riado há 4 meses ✏️ Atualizado há 1 mês

Comentários