コンテンツへスキップ

Ultralytics YOLOv8 NVIDIA Jetson で DeepStream SDK を使用し、 TensorRT

この包括的なガイドでは、DeepStream SDKとTensorRT を使用してNVIDIA Jetsonデバイス上でUltralytics YOLOv8 を展開するための詳細なウォークスルーを提供します。ここでは、Jetsonプラットフォーム上で推論パフォーマンスを最大化するためにTensorRT を使用します。

NVIDIA Jetson の DeepStream

このガイドは、JetPackリリースJP5.1.3が動作するNVIDIA Jetson Orin NX 16GBベースのSeeed Studio reComputer J4012と、JetPackリリースJP4.6.4が動作するNVIDIA Jetson Nano 4GBベースのSeeed Studio reComputer J1020 v2の両方でテストされています。最新およびレガシーを含むすべてのNVIDIA Jetsonハードウェアラインアップで動作することが期待されます。

NVIDIA DeepStream とは?

NVIDIAのDeepStream SDKは、AIベースのマルチセンサー処理、ビデオ、オーディオ、画像理解のためのGStreamerベースの完全なストリーミング分析ツールキットです。ビジョンAI開発者、ソフトウェア・パートナー、新興企業、IVA(インテリジェント・ビデオ・アナリティクス)アプリやサービスを構築するOEMに最適です。ニューラルネットワークや、トラッキング、ビデオエンコード/デコード、ビデオレンダリングなどの複雑な処理タスクを組み込んだストリーム処理パイプラインを作成できるようになりました。これらのパイプラインにより、ビデオ、画像、センサーデータのリアルタイム分析が可能になります。DeepStreamのマルチプラットフォーム対応により、オンプレミス、エッジ、クラウドでビジョンAIアプリケーションとサービスをより迅速かつ容易に開発できます。

前提条件

このガイドに従う前に、次のことを行ってください。

チップ

このガイドでは、DeepStream SDKをJetsonデバイスにインストールする方法として、Debianパッケージを使用しています。レガシーバージョンのDeepStreamにアクセスするには、DeepStream SDK on Jetson (Archived)を参照してください。

DeepStream の設定 YOLOv8

ここでは、YOLO モデルの NVIDIA DeepStream SDK サポートを含むmarcoslucianops/DeepStream-YoloGitHub リポジトリを使用しています。marcoslucianops氏の貢献に感謝する!

  1. 依存関係をインストールする

    pip install cmake
    pip install onnxsim
    
  2. 次のリポジトリをクローンします

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Ultralytics YOLOv8 検出モデル (.pt) をYOLOv8 リリースからお好きなものをダウンロードしてください。ここではyolov8s.pt を使用します。

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

    また、カスタムで訓練されたYOLOv8 モデルを使用することもできる。

  4. モデルを ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    上記のコマンドに以下の引数を渡します

    DeepStream 6.0.1 の場合は、opset 12 以下を使用します。デフォルトの opset は 16 です。

    --opset 12
    

    推論サイズを変更するには (既定値: 640)

    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    

    1280 の例:

    -s 1280
    or
    -s 1280 1280
    

    簡略化するには、 ONNX モデル (DeepStream >= 6.0)

    --simplify
    

    動的バッチサイズ(DeepStream >= 6.1)を使用するには

    --dynamic
    

    静的なバッチ サイズを使用するには (batch-size = 4 の例)

    --batch 4
    
  5. インストールされているJetPackのバージョンに合わせてCUDAのバージョンを設定します

    JetPack 4.6.4 の場合:

    export CUDA_VER=10.2
    

    JetPack 5.1.3 の場合:

    export CUDA_VER=11.4
    
  6. ライブラリをコンパイルする

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. 編集 config_infer_primary_yoloV8.txt モデルに応じたファイル( YOLOv8s 80クラス)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. 編集 deepstream_app_config ファイル

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. ビデオソースを変更することもできます deepstream_app_config ファイル。ここでは、デフォルトのビデオファイルが読み込まれます

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

推論の実行

deepstream-app -c deepstream_app_config.txt

生成には長い時間がかかります TensorRT エンジンファイルを作成します。だからしばらくお待ちください。

YOLOv8 ディープストリーム

チップ

モデルをFP16の精度に変換する場合は、 model-engine-file=model_b1_gpu0_fp16.engine そして network-mode=2 中に config_infer_primary_yoloV8.txt

INT8キャリブレーション

INT8精度を推論に使用したい場合は、以下の手順を踏む必要がある。

  1. セット OPENCV 環境変数

    export OPENCV=1
    
  2. ライブラリをコンパイルする

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. COCOデータセットについては バル2017に移動する。 DeepStream-Yolo フォルダ

  4. キャリブレーション画像用の新しいディレクトリを作成します

    mkdir calibration
    
  5. 次のコマンドを実行して、COCOデータセットから1000枚のランダムな画像を選択してキャリブレーションを実行します

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

    NVIDIAは、良い精度を得るために少なくとも500枚の画像を推奨しています。この例では、より高い精度を得るために1000枚の画像が選ばれている(より多くの画像=より高い精度)。頭-1000から設定できます。例えば、2000枚の画像の場合、頭-2000とします。この処理には時間がかかります。

  6. を作成します。 calibration.txt 選択したすべての画像を含むファイル

    realpath calibration/*jpg > calibration.txt
    
  7. 環境変数の設定

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    INT8_CALIB_BATCH_SIZE値が高いほど、精度が高くなり、キャリブレーション速度が速くなります。GPUメモリに合わせて設定してください。

  8. 更新します。 config_infer_primary_yoloV8.txt ファイル

    より

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...
    

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...
    

推論の実行

deepstream-app -c deepstream_app_config.txt

マルチストリームのセットアップ

1 つのディープストリーム アプリケーションで複数のストリームを設定するには、 deepstream_app_config.txt ファイル

  1. 行と列を変更して、必要なストリームの数に応じてグリッド表示を作成します。たとえば、4 つのストリームの場合、2 行と 2 列を追加できます。

    [tiled-display]
    rows=2
    columns=2
    
  2. セット num-sources=4 そして、 uri 全4ストリームの

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

推論の実行

deepstream-app -c deepstream_app_config.txt
マルチストリームのセットアップ

ベンチマークの結果

次の表は、その方法をまとめたものです。 YOLOv8s モデルは異なる TensorRT NVIDIA Jetson Orin NX 640GBの入力サイズ640x16の精度レベル。

モデル名 精密 推論時間(ms/im) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

確認

このガイドは当初、Seeed Studio、Lakshantha、Elaineの友人によって作成されました。



作成日:2024-07-01 更新日:2024-07-01
作成者:lakshanthad(1)

コメント