ONNXのYOLOXの後処理(Post-process)が速いことに関してのメモ

本サイトはアフィリエイト広告を利用しています。
AI

公式のYOLOXのONNXを使うと、Vitis AIのPyTorchのと比べて後処理(Post-process)が速いです。

出力の結合、softmax、sigmoidなどの後処理が推論側で対応していました。

実際に確認してみたプログラム含めて紹介します。

 

スポンサーリンク

ONNXのYOLOXの後処理(Post-process)が速いことに関してのメモ

YOLOXをDPUで高速化をしても、後処理(Post-process)の速度がネックとなります。

公式のYOLOXのONNXを使うと、Vitis AIのPyTorchのと比べて後処理が速いです。

 

出力の結合、softmax、sigmoidなどの後処理が推論側で対応していました。

違いについて、少し調べた内容を紹介します。

メモレベルなのでご了承ください。

 

テスト動画は下記です。

 

実際に動かしたプログラム(.py)や設定ファイルなどは下記GitHubに保存しています。

GitHub - iotengineer22/kv260-yolox-test: This repository present solution for my KV260 PetaLinux test
This repository present solution for my KV260 PetaLinux test - iotengineer22/kv260-yolox-test

 

以前にPetalinux環境でONNXを動かせるようにした環境で実行しています。

KV260でVitis AI ONNX Runtime Engine (VOE) を試してみた
KV260でVitis AI ONNX Runtimeをテストしてみました。 KR260で実施した同じ対応で出来ました。 YOLOX+PythonをONNX環境でテストした内容を紹介します。 KV260でVitis AI ONNX Runt...

 

 

テスト環境

テスト環境は以下の通りです。

  • Vivado, Vitis, PetaLinux…2023.1
  • Vitis AI …3.5

使用評価ボードはKV260です。

 

YOLOXのONNXのモデル

今回は2つのONNXのYOLOXのモデルをKV260上でテストしています。

 

1つ目はVitis AI公式のPyTorchをONNXに変換したモデルです。

 https://github.com/Xilinx/Vitis-AI/tree/master/model_zoo/model-list/pt_yolox-nano_3.5

 

2つ目はYOLOX公式から展開されているONNXのモデル(YOLOX-Nano)です。

 https://yolox.readthedocs.io/en/latest/demo/onnx_readme.html

 

YOLOXのプログラム

YOLOXのプログラムは各モデルに合うように2つ作成しました。

動画テストでは比較するために、DPUではなくCPUで推論(inference)しています

 

・Vitis AIのONNX用のプログラムが下記です。

kv260-yolox-test/onnx-test/onnx-cpu-yolox.py at main · iotengineer22/kv260-yolox-test
This repository present solution for my KV260 PetaLinux test - iotengineer22/kv260-yolox-test

 

・YOLOX公式のONNX用のプログラムが下記です

kv260-yolox-test/onnx-test/onnx-official-yolox.py at main · iotengineer22/kv260-yolox-test
This repository present solution for my KV260 PetaLinux test - iotengineer22/kv260-yolox-test

 

大きな違いは出力結合箇所,softmax、sigmoidを省略しているところです。

詳細はプログラムでご確認お願いします。

 

ONNXのYOLOXの後処理のテスト

実際のテストした結果です。

(実際にはCPUで推論したので使いませんでしたが)、最初にDPUをロードしています。

 

最初にVitis AI公式のPyTorchをONNXに変換したモデルをテストします。

 

後処理(Post-process)の時間は0.0349 secondsでした。約30ms程度です。

今回はCPUで推論していますので、あまり気になりません。

ただ、DPUで高速化するとネックになります。

 

YOLOX公式のONNXのモデルを確認して、後処理の時間を確認します。

モデルを確認すると、最後の出力が1x3549x85の1つになっています。

またsigmodが含まれていることも確認できます。

 

後処理(Post-process)の時間は0.0129 secondsでした。約10ms程度です。

やはりVitis AIのPyTorchを元にしたONNXより早いことが確認できました。

 

コメント