Last updated on

黒塗りアプリのC++化計画!! その2!


C++化を頑張っている!

FFmpegを組み込んで、動画の取り込み、フレームにて物体検出の推論、動画に書き出しまで、C++で実行できるようになりました!
出力された動画も、ある程度考えていた形で出力されているのですが、問題は思っていたより処理速度が出ていないこと!
下の画面は、テスト用の10秒のHDR動画を処理した時の結果です。
10秒の動画の処理に42秒くらいかかり、FPSでは14FPS。
Pythonでは20~25FPSだったことを考えると、いまいちな結果です。
当初は性能が出ない原因が、動画の取り込み、推論、書き出しを順番に実施していることの影響が大きいと感じていましたが、スレッド化しても全く改善する雰囲気無し!
もしやと思って入力解像度をさらに小さくすると処理速度が改善しました。
つまり、推論の物体検出がネックとなって処理速度が出ていないということに。

前回の単体画像での物体検出テストでは、1フレームで33ms程度としていましたが、実際の動画での処理では45msとなってしまっています。
単体テストでは、画像をCPUメモリから、GPUメモリに送った後、GPUメモリ内で10回物体検出を実行していましたが、動画の処理では1フレームごとにCPUメモリからGPUメモリに送信する動作となると考えられ、それが加算されて推論に時間がかかっているのだろうと思われます。

さて、どうしよう?

推論がネックになると思っていなかったので、正直困っています。
FP16やINTなどの量子化を行うことで処理速度が改善する可能性もありますが・・・
こまったなー