TensorRT 、DeepStream SDKを使用してNVIDIA Jetsonにデプロイする。
このガイドでは、学習済みモデルを NVIDIA Jetson Platform にデプロイし、TensorRT と DeepStream SDK を使用して推論を実行する方法を説明します。ここでは、TensorRT を使用して、Jetson プラットフォームでの推論パフォーマンスを最大化します。
ハードウェアの検証
本ガイドは、以下のJetsonデバイスでテスト・検証しています。
始める前に
このガイドに必要なCUDA、TensorRT 、DeepStream SDKが含まれているため、JetPack SDKとすべてのSDKコンポーネント、およびDeepStream SDKがJetsonデバイスに正しくインストールされていることを確認してください。
JetPack SDKは、ハードウェアアクセラレーションによるAIアットザエッジ開発のための完全な開発環境を提供します。すべてのJetsonモジュールと開発者キットはJetPack SDKでサポートされています。
設置方法は大きく分けて2つある、
- SDカードイメージ方式
- NVIDIA SDK マネージャーの方法
NVIDIA公式ウェブサイトから非常に詳細なインストールガイドを見つけることができます。上記のreComputer J1010と reComputer J2021に対応するガイドも見つかります。
必要なパッケージのインストール
- ステップ1.Jetsonデバイスの端末にアクセスし、pipをインストールしてアップグレードする。
- ステップ2.以下のレポをクローンする。
- ステップ 3. requirements.txtを開く
- ステップ5.以下の行を編集する。ここでまずiを押して編集モードに入る。ESCキーを押し、:wqと入力して保存して終了する。
注: torch と torchvision は後でインストールするので、今は除外している。
- ステップ 6.以下の依存関係をインストールする。
- ステップ7.必要なパッケージをインストールする
PyTorch とトーチビジョンをインストールする
pipからPyTorch とTorchvisionをインストールすることはできません。なぜなら、これらはARM aarch64アーキテクチャをベースとするJetsonプラットフォーム上で動作する互換性がないからです。そのため、ビルド済みのPyTorch pip wheelを手動でインストールし、ソースからTorchvisionをコンパイル/インストールする必要がある。
PyTorch 、トーチビジョンへのリンクにアクセスするには、このページをご覧ください。
JetPack 4.6以上でサポートされているバージョンの一部をご紹介します。
PyTorch v1.10.0
JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1)Python 3.6に対応しています。
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
PyTorch v1.12.0
JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0)Python 3.8でサポートされています。
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
ステップ1. torch 、JetPackのバージョンに合わせて以下の形式でインストールしてください。
例えば、ここではJP4.6.1を使用しているので、PyTorch v1.10.0を選択します。
cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- ステップ2.インストールしたPyTorch のバージョンに応じて torchvision をインストールする。例えば、PyTorch v1.10.0を選択した場合、Torchvision v0.11.1を選択する必要があります。
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install
PyTorch バージョンに応じてインストールする必要があるtorchvisionの対応バージョン一覧です:
- PyTorch v1.10 - トーチビジョン v0.11.1
- PyTorch v1.12 - トーチビジョン v0.13.0
のDeepStream構成YOLOv5
- ステップ1.以下のレポをクローンする。
- ステップ 2. gen_wts_yoloV5.pyをDeepStream-Yolo/utils から以下のディレクトリにコピーします。 yolov5ディレクトリにコピーします。
- ステップ3. yolov5 リポジトリで、YOLOv5 リリースからptファイルをダウンロードする(YOLOv5s 6.1の例)。
- ステップ4. cfgファイルとwtsファイルを生成する。
注:推論サイズを変更するには(デフォルト:640)
- ステップ 5.生成されたcfgファイルとwtsファイルをDeepStream-Yoloフォルダにコピーします。
- ステップ 6. DeepStream-Yoloフォルダを開き、ライブラリをコンパイルします。
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
- ステップ 7.お使いのモデルに合わせて、config_infer_primary_yoloV5.txtファイルを編集します。
- ステップ8. deepstream_app_configファイルを編集します。
- ステップ9. deepstream_app_configファイルでビデオソースを変更します。ここでは、以下のようにデフォルトのビデオファイルが読み込まれます。
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
推論を実行する
上記の結果は、Jetson Xavier NXで FP32と YOLOv5s 640x640で実行したものです。FPSは 約30であることがわかります。
INT8キャリブレーション
INT8精度を推論に使用したい場合は、以下の手順を踏む必要がある。
- ステップ 1.OpenCVをインストールする
- ステップ 2.OpenCVをサポートしたnvdsinfer_custom_impl_Yoloライブラリをコンパイル/再コンパイルする。
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
-
ステップ 3.COCO データセットについては、val2017 をダウンロードし、解凍してDeepStream-Yoloフォルダに移動します。
-
ステップ4.キャリブレーション画像用の新しいディレクトリを作成します。
- ステップ5.以下を実行し、COCOデータセットから1000枚のランダム画像を選択し、キャリブレーションを実行する。
注:NVIDIAは、良い精度を得るために少なくとも500枚の画像を推奨しています。この例では、より高い精度を得るために1000枚の画像を選択しています(より多くの画像=より高い精度)。INT8_CALIB_BATCH_SIZE 値を高くすると、精度が上がり、キャリブレーション速度が速くなります。GPU メモリに応じて設定してください。head -1000 から設定できます。たとえば、2000 画像の場合、-2000 頭を設定します。この処理には時間がかかります。
- ステップ6.選択したすべての画像を含むcalibration.txtファイルを作成します。
- ステップ7.環境変数を設定する
- ステップ 8. config_infer_primary_yoloV5.txtファイルを更新します。
より
へ
- ステップ9.推論を実行する
上記の結果は、Jetson Xavier NXと INT8、YOLOv5s 640x640で実行したものです。FPSは 約60であることがわかります。
ベンチマーク結果
以下の表は、Jetson Xavier NXでの各モデルのパフォーマンスをまとめたものです。
モデル名 | 精密 | 推論サイズ | 推論時間 (ms) | FPS |
---|---|---|---|---|
YOLOv5s | FP32 | 320x320 | 16.66 | 60 |
FP32 | 640x640 | 33.33 | 30 | |
INT8 | 640x640 | 16.66 | 60 | |
YOLOv5n | FP32 | 640x640 | 16.66 | 60 |
追加
このチュートリアルはseeed @lakshanthadの友人とElaineによって書かれました。