TensorRTで動画を黒塗りしてみた!
TensorRTのコードで静止画に対する物体検出はできていたものの、動画を処理することはまだやってませんでした。
TensorRT自体はすごく速いのですが、CPUやメモリなどがどれくらい足を引っ張るのかも気になって、動画に対して処理できるようにしてみました。
その結果がこちら!
- SDR画質、60FPS、10秒の動画 → 32FPSで処理
- HDR画質、60FPS、10秒の動画 → 22FPSで処理
動画の読み込み、書き出しはffmpeg.exeを利用していてNVENC/NVDECを利用、実行はサブプロセスで呼び出し、thread化してみています。
その結果が上記で、まぁ悪くないんだけど、いまいち処理速度が伸びない!
Pyinstallerで作った現行版は、SDRが25FPS、HDRが20FPSくらいだったので、それよりはまぁちょっと速いんですが・・・
Pythonでのtorch-tensorrtは、かなり速かったんだなー
でも・・・TensorRTはこんなもんじゃないだろ?
5msとかで推論するんだから、ポテンシャルはもっとあるはず!
1枚絵はめちゃめちゃ速いんだから、メモリとかCPUがやっぱりネックになってそうよなー
それに引きずられてGPUが処理を待っているのはちょっともったいない・・・
・・・batchで複数フレームまとめて推論処理したら、処理速度がbatch倍になるんじゃね?
早速検索してみると、なんとなくできそうな雰囲気はあるものの、実際コードにしてみるとなんかよくわからずにエラーが出てしまう。
んー、できそうな雰囲気なんだけどなぁ?
よくわからなかったので、UltralyticsのDiscordで何か情報がないか検索してみたものの、ドンピシャな情報はなく・・・
仕方なく、Discordで質問をさせてもらった。
既にUltralyticsの話ではないので、ちょっとどうかなとは思ったけど、アドバイスしていただけました!やさしいなーありがたやー
アドバイスを元に、TensorRTのbatch対応に挑戦してみようと思います!