Saltar para o conteúdo

Ultralytics YOLO11 em NVIDIA Jetson usando DeepStream SDK e TensorRT



Ver: Como executar vários fluxos com o DeepStream SDK no Jetson Nano usando Ultralytics YOLO11

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

DeepStream em NVIDIA Jetson

Nota

This guide has been tested with NVIDIA Jetson Orin Nano Super Developer Kit running the latest stable JetPack release of JP6.1, Seeed Studio reComputer J4012 which is based on NVIDIA Jetson Orin NX 16GB running JetPack release of JP5.1.3 and Seeed Studio reComputer J1020 v2 which is based on NVIDIA Jetson Nano 4GB running JetPack release of JP4.6.4. It is expected to work across all the NVIDIA Jetson hardware lineup including latest and legacy.

O que é o NVIDIA DeepStream?

NVIDIAO DeepStream SDK da Microsoft é um kit de ferramentas completo de análise de streaming baseado no GStreamer para processamento multissensor baseado em IA, vídeo, áudio e compreensão de imagem. É ideal para desenvolvedores de IA de visão, parceiros de software, startups e OEMs que criam aplicativos e serviços de IVA (Intelligent Video Analytics). Agora é possível 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 de dados de vídeo, imagens e sensores. O suporte multiplataforma do DeepStream oferece uma maneira mais rápida e fácil de desenvolver aplicativos e serviços de IA de 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 do pacote Debian para instalar o DeepStream SDK no dispositivo Jetson. Você também pode visitar a página DeepStream SDK on Jetson (Archived) para acessar 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 por suas contribuições!

  1. Install Ultralytics with necessary dependencies

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
    
  2. Clone the DeepStream-Yolo repository

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copy the export_yoloV8.py file from DeepStream-Yolo/utils directory to the ultralytics pasta

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    Nota

    export_yoloV8.py works for both YOLOv8 and YOLO11 models.

  4. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolo11s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    Nota

    Também é possível utilizar um modelo YOLO11 personalizado e treinado.

  5. Converter o modelo em ONNX

    python3 export_yoloV8.py -w yolo11s.pt
    

    Passe os argumentos abaixo para o comando acima

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

    --opset 12
    

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

    --batch 4
    
  6. Copy the generated .onnx model file and labels.txt file to the DeepStream-Yolo pasta

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Definir a versão de 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
    

    For Jetpack 6.1:

    export CUDA_VER=12.6
    
  8. Compilar a biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. Editar o config_infer_primary_yoloV8.txt file according to your model (for YOLO11s with 80 classes)

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

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  11. Também é possível alterar a fonte de vídeo em deepstream_app_config ficheiro. Aqui é carregado um ficheiro de vídeo predefinido

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

Executar inferência

deepstream-app -c deepstream_app_config.txt

Nota

Demorará muito tempo a gerar o ficheiro do motor TensorRT antes de iniciar a inferência. Por isso, seja paciente.

YOLO11 com deepstream

Dica

If you want to convert the model to FP16 precision, simply set model-engine-file=model_b1_gpu0_fp16.engine e network-mode=2 no interior config_infer_primary_yoloV8.txt

Calibração INT8

Se pretender utilizar a precisão INT8 para a inferência, deve seguir os passos seguintes

Nota

Currently INT8 does not work with TensorRT 10.x. This section of the guide has been tested with TensorRT 8.x which is expected to work.

  1. Conjunto 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, descarregar o val2017, extrair e passar para DeepStream-Yolo pasta

  4. Criar 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 executar a calibração

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
        cp ${jpg} calibration/; \
    done
    

    Nota

    NVIDIA recomenda pelo menos 500 imagens para obter uma boa precisão. Neste exemplo, são escolhidas 1000 imagens para obter uma melhor precisão (mais imagens = mais precisão). Pode definir a partir de head -1000. Por exemplo, para 2000 imagens, a cabeça é -2000. Este processo pode demorar muito tempo.

  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 elevados de INT8_CALIB_BATCH_SIZE resultarão numa maior precisão e numa velocidade de calibração mais rápida. Defina-o de acordo com a sua memória GPU .

  8. Atualizar 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 de MultiStream

Para configurar vários fluxos numa única aplicação deepstream, pode efetuar as seguintes alterações ao ficheiro deepstream_app_config.txt ficheiro

  1. Altere as linhas e as colunas para criar um ecrã de grelha de acordo com o número de fluxos que pretende ter. Por exemplo, para 4 fluxos, podemos adicionar 2 linhas e 2 colunas.

    [tiled-display]
    rows=2
    columns=2
    
  2. Conjunto num-sources=4 e acrescentar 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

The following benchmarks summarizes how YOLO11 models perform at different TensorRT precision levels with an input size of 640x640 on NVIDIA Jetson Orin NX 16GB.

Gráfico de comparação

Jetson DeepStream Benchmarks Chart

Tabela de comparação pormenorizada

Desempenho

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

Agradecimentos

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

FAQ

Como posso configurar Ultralytics YOLO11 num dispositivo NVIDIA Jetson?

Para configurar Ultralytics YOLO11 em um dispositivo NVIDIA Jetson, primeiro é necessário instalar o SDK do DeepStream 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 YOLO11 .

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

A utilização de TensorRT com YOLO11 optimiza o modelo para inferência, reduzindo significativamente a latência e melhorando a taxa de transferência em dispositivos Jetson NVIDIA . TensorRT fornece inferência de aprendizagem profunda de alto desempenho e baixa latência através da fusão de camadas, calibração de precisão e ajuste automático do kernel. Isto leva a 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 Ultralytics YOLO11 com DeepStream SDK em diferentes hardwares NVIDIA Jetson?

Sim, o guia para implantação do Ultralytics YOLO11 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 JetPack 5.1.3 e o Jetson Nano 4GB com JetPack 4.6.4. Consulte a secção Configuração do DeepStream para YOLO11 para obter passos detalhados.

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, use o utils/export_yoloV8.py do script DeepStream-Yolo repositório.

Eis um exemplo de comando:

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

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

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

The performance of YOLO11 models on NVIDIA Jetson Orin NX 16GB varies based on TensorRT precision levels. For example, YOLO11s models achieve:

  • FP32 Precision: 14.6 ms/im, 68.5 FPS
  • Precisão FP16: 7,94 ms/im, 126 FPS
  • INT8 Precision: 5.95 ms/im, 168 FPS

Esses benchmarks destacam a eficiência e a capacidade de usar modelos YOLO11 otimizados para TensorRT no hardware NVIDIA Jetson. Para obter mais detalhes, consulte a nossa secção Resultados de benchmark.

📅 Created 6 months ago ✏️ Updated 4 days ago

Comentários