アプリの推論処理が遅いのを、なんとかしたい!
WoLNamesBlackedOutというアプリを作成したのですが、どうにも処理が遅い!
推論もMMDetectionで行うから遅いのか?
MMDetectionはいろいろな物体検出モデルをポン使えるのでとても便利なのですが、もしかすると推論もMMDetectionで行うとオーバーヘッドが大きすぎるのではないか?
TensorRTを使いたいが、わたしの技術力ではどうにも難しい!
そこでとりあえずMMDetectionでいろんなモデルで学習させ、ある程度の出力が期待できる状態で、同じ動画を処理して処理時間がどの程度違うか、比べてみた!
まずはMMDetectionが推論処理のボトルネックになっていそうか確認する。
MMDetectionでいろんなモデルで推論のベンチマーク!
現在は、DAB-DETRというものを使っているが、いろんな系統のモデルから、処理時間に違いが出るか比較する!
MMDetectionは、下記のgithubの"Overview of Benchmark and Model Zoo"に記載されている通り、多数のモデルに対応している。
テストで処理する動画は、
- 解像度 2560x1080
- フレームレート 60FPS
- 長さ 1分12秒 (フレーム数 4320)
テストした環境は、
- GPU NVIDIA Geforce 4070 Ti SUPER 16GB
- CPU intel 11400F
- MEM 32GB
- SSD
- OS Windows11 64bit
MMDetectionを推論にも使う場合、どれが速いかを確認したいので、多少出力結果が残念でも良しとした。
多くは中程度のモデルを利用している。
推論の検出閾値は0.2として、MMDetectionでの各モデルの推論での処理時間は、次のようになった!
※8/22追記
SSDの推論がYOLO系に次いで速いらしい、と見たのでSSDの学習も試してみたかったのですが、なぜかうまく学習が動きませんでした。途中まで学習して、途中でエラーになってしまう。積極的に採用しようという感じではないので、諦めました。
- DAB-DETR 3.7 task/s, elapsed: 1163s
- DDQ 3.2 task/s, elapsed: 1332s
- RTMDet 4.1 task/s, elapsed: 1063s
- YOLOX 4.6 task/s, elapsed: 949s
- Sparse R-CNN 3.6 task/s, elapsed: 1204s
- Faster R-CNN 3.8 task/s, elapsed: 1130s
考察
それぞれで数値に大小はあるが、思っていたよりも差がでなかった。
YOLOX、RTMDetのYOLO系はさすがに少し速い。しかし出力結果はやはりざんねんで十分に消しきれていない。
しかしリアルタイム系を称するなら、もっとレスポンスがでてもいいはず。
DDQはDETR系。出力結果は良かったが、処理は遅かった。
R-CNN系の2つは、処理速度に期待して試したが、思っていたほどDETRと差はつかなかった。
処理結果は良好だったので、少し期待していたので、残念。
出力結果と処理速度を考えると、物体検出モデルの変更による推論の処理速度向上は、期待できなさそう。
今後
MMDetectionで物体検出モデルを変更して推論の処理速度向上は期待できないことがわかったので、次はpytorchでのtorch-tensorrtあたりに期待したい。
MMDetectionのまま、torch-tensorrtを使えればいいのだが、今のところ、良く分かっていない。
そのようなリポジトリも見つけたものの、ちょっと配布向きではなかったなぁ
MMDetectionはあきらめて、pytorchだけで再構築する形になるかも?