tensorrt を使用して、yolov5 などのターゲット検出モデルを Jetson nx にデプロイします (非常に詳細)

目次


0. 序文

Jetson Xavier NX は、nvidia が開発した超小型 (わずか 70mm*45mm) AI スーパーコンピューターで、組み込みシステムやエッジ システムに適しています。
NVIDIA® Jetson Xavier™ NX は、スーパーコンピューターのパフォーマンスをエッジ システムに提供するスモール フォーム ファクター システム オン モジュール (SOM) です。最大 21 TOPS の高速化されたコンピューティング能力により、最新のニューラル ネットワークを並列実行し、完全な AI システムの要件である複数の高解像度センサーからのデータを処理できます。Jetson Xavier NX は本番環境に対応しており、一般的な AI フレームワークをすべてサポートしています。

また、jetson nx には、深層学習モデルを簡単にデプロイできる独自の推論加速ツール tensorrt が付属しています。

1.ジェットソンNXフラッシュ

  • まずはこのリンクを参照してください
  • 18.04 バージョンをフラッシュする場合は、18.04 以前のホストを使用し、jetpeck4.x バージョンを選択する必要があります。20.04 バージョンをフラッシュする場合は、ホスト バージョンに制限はなく、jetpeck5.x バージョンを選択する必要があります。

いくつかの点に注意してください。最初のフラッシュではシステムを SDK にフラッシュするだけで、次にインストールされたソリッド ステートを使用してコンテンツをソリッド ステートにコピーし、ハード ディスクから起動するように設定します。このブログではその後の環境更新時にシステムのチェックはしていませんでしたが、ブログ主はcudaなどの環境を単独でインストールできない状況に遭遇し、システムの再チェックが必要となったので、システムをベイクしてプラグインした後、システムに入る画面が表示された場合は、再起動する必要があります。ハードディスクを再度セットアップし、環境のベイク処理を続けます。

  • したがって、最初にシステムを選択するのではなく、システムと環境を直接選択することをお勧めします。sdkmanger がシステムをフラッシュした後、ウィンドウがポップアップ表示されます。これが表示されたら、画面を挿入してシステムをソリッド ステートにベイクし、設定します。ハードディスクから起動し、sdkmanger に戻ります。ポップアップ ウィンドウが表示され、オプションを設定した後、cuda およびその他の環境のベイクを続けます。

2. 必要なソフトウェアをダウンロードする

  • jtop、cmake、vscode が含まれますが、これらに限定されません。

  • vscode は公式 Web サイトから arm64 deb パッケージをダウンロードできます。注意: vscode の古いバージョンをダウンロードする必要がある場合、新しいバージョンには依存関係の問題が発生します。

  • jtop および cmake のダウンロード リファレンス。
    その他のソフトウェアは、インターネットで Jetson nx インストール *** を検索すると見つかります。

3. yolov5 モデルをトレーニングして変換する

  • 最初に注意すべきことは、モデルのバージョンを選択することですが、tensorrtx で現在サポートされているバージョンは、自分で tensorrtx で表示できます。
  • ブロガーは yolov5.5.0 モデルを使用していますが、もちろん、tensorrtx でサポートされている他のモデルを使用することもできます。
  • ここにtensorrtx へのリンクがあります。それを開いて、必要なモデルを選択できます。
  • ここにyolov5.50モデルへのリンクがあります
  • 独自のモデルをトレーニングし、.pt ファイルをエクスポートします。yolov5 のトレーニング プロセスについては、このブログを参照してください。

4. tensorrt のデプロイメント

tensorrt でデプロイするには、まず tensorrt をダウンロードする必要がありますが、sdkmanger を使用して Jetson nx をフラッシュする場合、jtop を通じて tensorrt があるかどうかを確認できます (cuda と他のセットがフラッシュされている可能性が高いです)。ない場合は、 1 に移動. Jetson NX ブラシ マシン

  • ここで、jetson nx のフラッシュが完了し、コンピューターに jtop vscode、cmake、およびその他のソフトウェアがインストールされ、独自の .pt モデルがトレーニングされたと仮定します。

4.1.pytorch モデル –> TensorRT エンジン

Pytorch によってトレーニングされたモデルは XXX.pt または XXX.pth です。Yolov5 を例に挙げてみましょう。彼がトレーニングしたモデルは .pt ファイルです。tensorrt を通じてデプロイしたい場合は、pt ファイルをエンジンに変換する必要がありますtensorrt でサポートされている形式です。変換方法は 2 つあり、onnx を使用するか、github 上のオープン ソース プロジェクトである tensorrtx を直接使用できます。このプロジェクトはモデルの変換とデプロイメントを統合しており、直接呼び出すことができます。

  • まず、tensorrtxをダウンロードし、/tensorrtx-yolov5-v5.0/yolov5にあるgen_wts.pyファイルをyolov5-5.0ディレクトリにコピーし、 best.pt モデル ファイルをこのディレクトリにコピーします。

走る

python gen_wts.py -w best.pt

必要な最適な .wts ファイルを生成する

  • 次に、「/tensorrtx-yolov5 -v5.0/yolov5」と入力して、 yololayer.hファイル内のCLASS_NUM をトレーニング済みモデルのラベル カテゴリの数に変更します。
  • それからコンパイルします
mkdir build
cd build
cmake ..
make
  • 実行可能ファイル yolov5 を生成し、best.wts をビルド フォルダーにコピーして実行します
./yolov5 -s best.wts best.engine s
  • このコマンドの最後の文字がモデルのタイプであることに注意してください。ここでのブロガーのタイプは s なので、次のように記述します。どれが使用できるかは、tensorrtx の yolov5 の Readme で確認できます。
    best.engine ファイルを生成します。これは Tensort のデプロイに必要なモデル ファイルです。

4.5.int8 量子化モデル

int8 量子化とは何かを理解するには、このブログを参照してください
要するにモデルの動作を高速化するということですが、精度は若干下がりますが、計測される推論速度は約2倍になります。

具体的な操作手順は、tensorrtx の yolov5 の readme に記載されており、ブロガーが以下で簡単に説明しています。

  • まずcoco_calibをダウンロードし、データセットを解凍します。
  • 次に、「/tensorrtx-yolov5- v5.0/yolov5」と入力して、 yololayer.hファイル内のCLASS_NUM をトレーニングしたモデルのラベル カテゴリの数に変更し、 src/config.h の最初の数行にある USE_FP16 を次のように変更します。 USE_INT8
  • それからコンパイルします
mkdir build
cd build
cmake ..
make
  • 実行可能ファイル yolov5 を生成し、best.wts とダウンロードしたばかりの coco 定量化データ セットをビルド フォルダーにコピーして実行します。
./yolov5 -s best.wts best_int8.engine s
  • このコマンドの最後の文字がモデルのタイプであることに注意してください。ここでのブロガーのタイプは s なので、次のように記述します。どれが使用できるかは、tensorrtx の yolov5 の Readme で確認できます。
    best_int8.engine ファイルを生成します。これは、int8 量子化後に取得されるデプロイメント ファイルです。
  • デプロイするときは、生成された int8 ファイルと量子化されたデータ セットをプロジェクト プロジェクトの Yolo フォルダーに配置することを忘れないでください。

5.cmakeのデプロイメント

cmakeのデプロイについては他の人のデモプロジェクトMask_Detectorを参考にしてください(人がマスクを着用しているかどうかを検出し、着用している場合は緑の枠を出力し、着用していない場合は赤の枠を出力します) ). 別のターゲット検出を実現するには、engine_name を変更するだけで済みます。yololar.h class_num を変更することを忘れないでください。変更が必要なその他の部分は、yolo で yolov5.cpp を開いて、出力の信頼性を含めて (ただしこれに限定されません) ご自身で変更できます。

  • cmake 中に libcudart.so が見つからないというエラーが報告される場合があることに注意してください。usr/local/ で検索して、探しているパスにコピーできます。

6. まとめ

ブロガーは、jetson nx で c++onnxruntime を使用しようとして失敗した後、tensorrt を使用してデプロイしようとしたところ、効果が悪くないことがわかりました。最大処理速度は 120 フレームに達します。ブロガーは、将来 Jetson に yolo モデルをデプロイしたいと考えている友人への参考として、この完全なプロセスを書き留めました。また、忘れて後で確認するのにも便利です。

塩辛_です、記事が参考になったらいいね、収集お願いします!

おすすめ

転載: blog.csdn.net/qq_69194611/article/details/130746390