見出し画像

YOLO-NAS物体検出モデルのonnx、Torchscript、TensorRT処理速度評価:EC2編


1. はじめに

 本記事では物体検出モデルYOLO-NASを用いて推論処理を行った際の「1フレーム処理速度」とそれから推定される「フレーム処理速度」の評価を行う。
 YOLO-NASはPytorchのモデル形式であるが、本記事ではOnnx、Torchscript、TensorRTのモデルに変換して上記指標を比較して、最もフレーム処理速度の速いモデル形式を明らかにした。

2. YOLO-NAS

YOLO-NASは「Apache-2.0 license」ラインセンスの物体検出モデルです。下記リンク先がGithubリポジトリです。

上記リンク先の図を引用しますが、YOLOv8などよりも処理・推論性能が優れているモデルとなっています。

3. 評価条件

3.1 ハードウェア

今回の評価ハードウェアはEC2を採用した。
EC2(g4dn.xlarge: 4vCPU, 16GiMメモリ, Tesla T4)

3.2 環境

上記EC2に下記の環境を構築して評価を行った。

  • OS:Ubuntu 24.04 LTS

  • Docker:nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

  • Python:3.10.12

詳細なライブラリのインストール情報は省略する。
Dockerイメージは下記

3.3 評価パターン

今回はCPU環境、GPU環境の場合で評価を行った。
YOLO-NASモデルは「YOLO-NAS S」を採用した。
モデル形式は以下3種類で比較

  • ONNX

  • Torchscript

  • TensorRT

推論モデルへの入力画像サイズは以下2種類で比較

  • Float32

  • Float16

  • Int8

条件をまとめると下表になる。

3.4 評価指標

1フレーム処理時間[ms]とそれから計算される「推定フレーム処理速度[FPS]」で評価する。
1フレーム処理時間[ms]は、画像を100回推論した際の1フレーム処理時間の平均値を採用する。
推定フレーム処理速度[FPS]は1フレーム処理時間の逆数である。

4. 結果

4.1 CUDA推論

下図がCUDA推論時の1フレーム処理時間と推定フレーム処理時間(FPS)の比較結果です。
モデル形式は「{モデル形式}_{入力サイズ}_{演算形式}」で表現している。
これを見ると、onnx_416x416_float16のパターンで最も処理速度が速かった。

4.2 CPU推論

下図がCUDA推論時の1フレーム処理時間と推定フレーム処理時間(FPS)の比較結果です。
モデル形式は「{モデル形式}_{入力サイズ}_{演算形式}」で表現している。
これを見ると、onnx_416x416_float32のパターンで最も処理速度が速かった。

5. おわりに

 本記事では物体検出モデルYOLO-NASを用いてOnnx、Torchscript、TensorRTのモデルで推論処理を行った際の「1フレーム処理速度」とそれから推定される「フレーム処理速度」の評価を行った。
 その結果、CUDA推論については、入力サイズ416x416、float16演算形式のONNXモデルが最もフレーム処理速度が速かった。CPU推論については入力サイズ416x416、float32演算形式のONNXモデルが最もフレーム処理速度が速かった。GPUマシン(EC2)上では、ONNXモデルはフレーム処理速度が比較的速いことが明らかになった。
 今回、推論精度の評価は実施していないため、単純にフレーム処理速度が速いパターンを採用するのではなく、フレーム処理速度と推論精度を見ながら最適なモデル形式を採用すべきである。


この記事が気に入ったらサポートをしてみませんか?