Jetson AGX Xavier は TensorRT を実装して YOLOv4 を高速化します

前: Jetson AGX Xavier テスト YOLOv4

次へ: Jetson AGX Xavier に ROS をインストールする

I.はじめに

       以前、Xavier で YOLOv4 アルゴリズムをテストしたところ、検出速度が遅く、TensorRT を使用して高速化できることがわかりました。現在、多くの大物がそれを実装しています。この記事では、Github の JK Jung 著者のtensorrt_demosプロジェクトを使用して、yolov4 の検出速度を向上させます。

2. 準備を加速する

1. tensorrt_demos プロジェクトのクローンを作成します

git clone https://github.com/jkjung-avt/tensorrt_demos

2. 環境構築

①yolov5とTensorRTアクセラレーションの環境設定についての私の記事を参考に、python環境を設定し、yolov5envという名前の環境を取得します。

②pycudaとonnxをインストール

conda activate yolov5env
pip install  pycuda
pip install onnx==1.4.1

onnx の最新バージョンを使用しないように注意してください。エラーが報告されます。ここで pycuda のインストールに問題がある可能性があります。ソース コード インストールを使用することをお勧めします。私も最初は解き方を忘れていて、インストールに失敗したことしか覚えていません。関連する多くのチュートリアルがオンラインにあります。

3. プロジェクトをコンパイルする

/tensorrt_demos/plugins/ ディレクトリに入ります。

make -j8
或者
make

4. ファイルを生成する

  ①スクリプト修正     

       /tensorrt_demos/yolo/ ディレクトリに download_yolo.sh スクリプトがあります.スクリプトを開くと、スクリプトが YOLOv3 と YOLOv4 の多くのバージョンを含む cfg ファイルと weight ファイルをダウンロードし、関連ファイルを生成することがわかります.異なるサイズ。しかし、いくつかのファイルは必要ありません。また、国内のネットワークがブロックされやすいか、ダウンロードが遅いです。

       テストの便宜上、この記事では主に yolov4-tiny.weights と yolov4.weights を例として取り上げます。したがって、download_yolo.sh の一部の指示は削除されます. まず、事前にダウンロードされた yolov4-tiny.weights、yolov4-tiny.cfg、yolov4.weights、および yolov4.cfg ファイルをダウンロードします (ファイルが必要な場合は、プライベート メッセージを送信できます理由はわかりませんが、CSDN にアップロードされたファイルは自動的に課金されます) /tensorrt_demos/yolo/ ディレクトリに配置します。次に、download_yolo.sh スクリプトの内容を次のように変更します。

#!/bin/bash

set -e

echo
echo "Creating yolov4-tiny-288.cfg and yolov4-tiny-288.weights"
cat yolov4-tiny.cfg | sed -e '6s/batch=64/batch=1/' | sed -e '8s/width=416/width=288/' | sed -e '9s/height=416/height=288/' > yolov4-tiny-288.cfg
echo >> yolov4-tiny-288.cfg
ln -sf yolov4-tiny.weights yolov4-tiny-288.weights
echo "Creating yolov4-tiny-416.cfg and yolov4-tiny-416.weights"
cat yolov4-tiny.cfg | sed -e '6s/batch=64/batch=1/' > yolov4-tiny-416.cfg
echo >> yolov4-tiny-416.cfg
ln -sf yolov4-tiny.weights yolov4-tiny-416.weights

echo "Creating yolov4-288.cfg and yolov4-288.weights"
cat yolov4.cfg | sed -e '2s/batch=64/batch=1/' | sed -e '7s/width=608/width=288/' | sed -e '8s/height=608/height=288/' > yolov4-288.cfg
ln -sf yolov4.weights yolov4-288.weights
echo "Creating yolov4-416.cfg and yolov4-416.weights"
cat yolov4.cfg | sed -e '2s/batch=64/batch=1/' | sed -e '7s/width=608/width=416/' | sed -e '8s/height=608/height=416/' > yolov4-416.cfg
ln -sf yolov4.weights yolov4-416.weights
echo "Creating yolov4-608.cfg and yolov4-608.weights"
cat yolov4.cfg | sed -e '2s/batch=64/batch=1/' > yolov4-608.cfg
ln -sf yolov4.weights yolov4-608.weights

echo
echo "Done."

②スクリプトを実行して関連ファイルを生成します。 

sh download_yolo.sh

 完了すると、次のファイルが生成されます。

③onnxファイルとtensorrtエンジンファイルを生成

/tensorrt_demos/yolo/ ディレクトリでターミナルを開きます。

conda activate yolov5env

 例として yolov4-tiny-288 を取り上げます。

python yolo_to_onnx.py -m yolov4-tiny-288

上記のコードを実行すると、yolov4-tiny-288.onnx ファイルが生成されます。

次に実行します。

python onnx_to_tensorrt.py -m yolov4-tiny-288

yolov4-tiny-288.trt ファイルを生成します。この時点で、加速の準備手順はすべて終了です。

上記の例では、 yolov4-tiny-416.trt 、 yolov4-208.trt 、 yolov4-416.trt 、 yolov4-608.trt が生成できます。およびその他のドキュメント。

3. 実現の加速  

この記事では例として yolov4-tiny モデルを取り上げ、/tensorrt_demos/yolo/ ディレクトリに入ります。ターミナルを開きます。

conda activate yolov5env
python trt_yolo.py --usb 0 -m yolov4-tiny-288

python trt_yolo.py --usb 0 -m yolov4-608

テスト結果によると、640*480 の画像では、yolov4-tiny-288 モデルの検出速度は非常に高速ですが、検出精度が低く、冗長なフレームが発生していることがわかります。yolov4-608 の検出速度は、元のプロジェクトの 4 倍です。

4.まとめ

      ターゲット検出アルゴリズムは、実際のアプリケーションで高いリアルタイム性能を必要とします.しかし、現在多くのモバイル組込みデバイスは、計算能力が低く、処理速度が遅いため、TensoRT を使用することは、ディープラーニングのアプリケーションに大きな実用的意義があります.

       余談ですが、Xavier で YOLOv5 と YOLOv4 の検出コードを実行した後、個人的には、YOLOv5 の全体的な検出効果は YOLOv4 よりもわずかに優れていると感じています。

おすすめ

転載: blog.csdn.net/qq_40691868/article/details/117602902