コンテンツへスキップ

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つある、

  1. SDカードイメージ方式
  2. NVIDIA SDK マネージャーの方法

NVIDIA公式ウェブサイトから非常に詳細なインストールガイドを見つけることができます。上記のreComputer J1010と reComputer J2021に対応するガイドも見つかります。

必要なパッケージのインストール

  • ステップ1.Jetsonデバイスの端末にアクセスし、pipをインストールしてアップグレードする。
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • ステップ2.以下のレポをクローンする。
git clone https://github.com/ultralytics/yolov5
  • ステップ 3. requirements.txtを開く
cd yolov5
vi requirements.txt
  • ステップ5.以下の行を編集する。ここでまずiを押して編集モードに入る。ESCキーを押し、:wqと入力して保存して終了する。
# torch>=1.8.0
# torchvision>=0.9.0

注: torch と torchvision は後でインストールするので、今は除外している。

  • ステップ 6.以下の依存関係をインストールする。
sudo apt install -y libfreetype6-dev
  • ステップ7.必要なパッケージをインストールする
pip3 install -r requirements.txt

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に対応しています。

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でサポートされています。

wget <URL> -O <file_name>
pip3 install <file_name>

例えば、ここでは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.以下のレポをクローンする。
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • ステップ 2. gen_wts_yoloV5.pyDeepStream-Yolo/utils から以下のディレクトリにコピーします。 yolov5ディレクトリにコピーします。
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • ステップ3. yolov5 リポジトリで、YOLOv5 リリースからptファイルをダウンロードする(YOLOv5s 6.1の例)。
cd yolov5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
  • ステップ4. cfgファイルとwtsファイルを生成する。
python3 gen_wts_yoloV5.py -w yolov5s.pt

:推論サイズを変更するには(デフォルト:640)

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

Example for 1280:

-s 1280
or
-s 1280 1280
  • ステップ 5.生成されたcfgファイルとwtsファイルをDeepStream-Yoloフォルダにコピーします。
cp yolov5s.cfg ~/DeepStream-Yolo
cp yolov5s.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ファイルを編集します。
[property]
...
custom-network-config=yolov5s.cfg
model-file=yolov5s.wts
...
  • ステップ8. deepstream_app_configファイルを編集します。
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.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
YOLOv5 ディープストリームFP32

上記の結果は、Jetson Xavier NXで FP32と YOLOv5s 640x640で実行したものです。FPSは 約30であることがわかります。

INT8キャリブレーション

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

  • ステップ 1.OpenCVをインストールする
sudo apt-get install libopencv-dev
  • ステップ 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.キャリブレーション画像用の新しいディレクトリを作成します。

mkdir calibration
  • ステップ5.以下を実行し、COCOデータセットから1000枚のランダム画像を選択し、キャリブレーションを実行する。
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
    cp ${jpg} calibration/; \
done

注:NVIDIAは、良い精度を得るために少なくとも500枚の画像を推奨しています。この例では、より高い精度を得るために1000枚の画像を選択しています(より多くの画像=より高い精度)。INT8_CALIB_BATCH_SIZE 値を高くすると、精度が上がり、キャリブレーション速度が速くなります。GPU メモリに応じて設定してください。head -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
  • ステップ 8. config_infer_primary_yoloV5.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
...
  • ステップ9.推論を実行する
deepstream-app -c deepstream_app_config.txt
YOLOv5 ディープストリームINT8付き

上記の結果は、Jetson Xavier NXと INT8YOLOv5s 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によって書かれました。



作成日:2023-11-12 更新日:2024-01-07
作成者:glenn-jocher(5)

コメント