4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2024

Day 3

pyinstallerで作成したexeからultralytics yolov8.ptをTensorRT(yolov8.engine)にどうしてもエクスポートしたい人

Last updated at Posted at 2024-11-16

Ultralytics yolov8を利用したWindows向け物体検出アプリを作成しています。

先日、ultralyticsのDiscordでアドバイスを頂き、コードの修正をしました。

その時、処理速度の改善案として、TensorRTへのエクスポートと利用もアドバイス頂きました。
以前はコードがおかしかったのでTensorRTを利用しても性能がでませんでしたが、今回はより正しいコードになっているため、TensorRTの効果が発揮できるかもしれない!と思い、実装してみました。

結論

pyinstaller実行時に特にエラーは出ていませんでしたが、\site-packages\tensorrt_libsがexe側の_internal配下にコピーされていませんでした。
フォルダ配下のDLL、
nvinfer_10.dll
nvinfer_builder_resource_10.dll
nvinfer_plugin_10.dll
nvonnxparser_10.dll
をpyinstallerのspecのbinariesに記載することで、コピーされるようになり、exeからtensorrtエクスポートが実行できるようになりました。
(但し開発環境での話で、他のcuda tool kitが入っていない環境でエクスポートが動くかは未確認)

pyinstaller.spec(抜粋)
binaries=[('C:\\Users\\ユーザ名\\.virtualenvs\\pyenv環境名\\Lib\\site-packages\\tensorrt_libs\\nvinfer_10.dll','.\\tensorrt_libs'),('C:\\Users\\ユーザ名\\.virtualenvs\\pyenv環境名\\Lib\\site-packages\\tensorrt_libs\\nvinfer_builder_resource_10.dll','.\\tensorrt_libs'),('C:\\Users\\ユーザ名\\.virtualenvs\\pyenv環境名\\Lib\\site-packages\\tensorrt_libs\\nvinfer_plugin_10.dll','.\\tensorrt_libs'),('C:\\Users\\ユーザ名\\.virtualenvs\\pyenv環境名\\Lib\\site-packages\\tensorrt_libs\\nvonnxparser_10.dll','.\\tensorrt_libs'),],

但し弊環境では

上記の設定でexeよりTensorRTにエクスポートできるようになりますが、exeでyolov8.engineを利用して物体検出をしても、当方の環境では思っていたほど性能がでませんでした。
原因は細かく検証はできていませんが恐らく、

  • torch-tensorrtによって、torchでもtensorrt並みに性能が出るようになっている
  • pyinstallerによるexeでのオーバーヘッドが大きい可能性

あたりではないかと想像しています。

EXEアプリでの、.pt、.engineでの同じ動画の処理した結果は次の通りでした。
スクリーンショット 2024-11-17 063507.jpg
スクリーンショット 2024-11-17 063535.jpg

TensorRTエクスポート機能を追加するには、

  • tensorrt 10.6.0
  • onnx 1.17.0
  • onnxslim 0.1.39
  • onnxruntime-gpu 1.20.0

のライブラリを新たにexeに追加する必要があり、配布するファイルサイズが増大すること、
またTensorRTエクスポート処理が、初回に5分程度時間を要するということから、pyinstallerでのexeファイルにおいては、メリットよりもデメリットの方が大きそうなので、TensorRTエクスポート機能は実装しない方向になりそうです

環境

intel 11400F
geforce 4700tiSUPER
windows11 23H2
python 3.11
pyinstaller 6.10.0
ultralytics 8.2.82
tensorrt 10.6.0
onnx 1.17.0
onnxslim 0.1.39
onnxruntime-gpu 1.20.0

TensorRTへエクスポートするコード。imgszは学習や検出と同じに設定。

model.export(format="engine",imgsz=1280, half=True, dynamic=True)

20241118追記

pyinstallerで作ったexeではなく、Pythonで実行した時には、TensorRTの方が速かったです。
だいたいですが、
yolov8.pt 25FPS
yolov8.engine 28FPS
なので、ultralyticsやTensorRTは悪くないよ!

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?