KV260とDPU-PYNQで物体検出してみました。
YOLOXを使って、高速に物体検出しています。
jupyter_notebooksとpythonの両方でテストしてみました。
KV260とDPU-PYNQでYOLOXの物体検出してみる
KV260とDPU-PYNQで物体検出してみました。YOLOXを使って、高速に物体検出しています。
jupyter_notebooksでテストした動画が下記です。
pythonでテストした動画が下記となっています。
プログラム、コンパイルしたYOLOXのモデル、合成したDPUモデルなどは下記に置いています。
テスト・合成環境
最初にテスト環境に関して説明します。
コンパイル・合成などはKV260とは別のデスクトップPC(Ubuntu)で実施しています。
またツール・合成環境は以下の通りです。
- Vivado, Vitis…2023.1
- Vitis AI …3.5 → 2.5
Vitis AIに関してのみ2.5を使用しています。他は3.5です。
KV260のDPU-PYNQ環境に関して、テスト時点ではVItis AI 2.5までしか対応していないためです。
(3.5で一度できないか、下記記事で試してみましたがダメでした…)
KV260にDPU-PYNQでVitis AI 3.5を使えなかったメモ
Vitis AIのYOLOXのモデルを使用
Vitis AIの公式のモデルを入手します。
今回コンパイルは2.5で実施しましたが、物体検出するYOLOXのモデルの入手先は3.5でした。
問題なく動きました。サンプルのモデルをダウンロードして解凍します。
1 2 |
wget https://www.xilinx.com/bin/public/openDownload?filename=pt_yolox-nano_3.5.zip unzip openDownload\?filename\=pt_yolox-nano_3.5.zip |
古いVitis AI 2.5のdocker環境を作る
古いVitis AI環境を作るのは簡単です。
dockerで通常はlatestをpullする箇所を、指定のVer「2.5」にします。
どのVerが使えるかは下記を確認お願いします。
https://hub.docker.com/r/xilinx/vitis-ai-cpu/tags
1 2 |
cd Vitis-AI/ docker pull xilinx/vitis-ai-cpu:2.5 |
あとはVitis AIを起動して、コンパイルします。今回はB512とB4096を用意しました。
KV260が使えるDPUでも一番小さいサイズと大きいサイズにしています。
Vitis AIのdockerを動かしたコマンドは下記です。
1 2 3 4 |
./docker_run.sh xilinx/vitis-ai-cpu:2.5 conda activate vitis-ai-pytorch cd pt_yolox-nano_3.5/ vai_c_xir -x quantized/YOLOX_0_int.xmodel -a b512_arch.json -n b512_2_5_yolox_nano_pt -o ./b512_2_5_yolox_nano_pt |
KV260のDPU(B512)環境を合成
DPU環境の合成方法に関しては、長い手順になりますので下記記事をご参考ください。
同類のボードのKR260で、B512~B4096のベンチマークまでしています。
jupyter_notebooksとKV260でYOLOXのテスト
KV260のOSはUbuntuです。Ubuntu Desktop 22.04 LTSを使用しています。
https://ubuntu.com/download/amd
iot-limerick-kria-classic-desktop-2204-x07-20230302-63.img.xz
SDカードに書き込み、ubuntuを立ち上げます。
使用評価ボードはKV260です。
最初にKV260にPYNQをインストールします。
1 2 3 4 5 6 |
sudo snap install xlnx-config --classic --channel=2.x xlnx-config.sysinit sudo poweroff git clone https://github.com/Xilinx/Kria-PYNQ.git cd Kria-PYNQ/ sudo bash install.sh -b KV260 |
jupyter_notebooksのプログラムは下記です。
DPU-PYNQを使って、YOLOXのテストを行います。
jupyter_notebooksを使ってテストします。
下記例のようにプログラムをjupyter_notebooksのフォルダにコピーします。
1 2 3 4 5 |
sudo su cd $PYNQ_JUPYTER_NOTEBOOKS cd jupyter_notebooks/ ls cp -rf /home/ubuntu/kv260-ubuntu-test/jupyter_notebooks/pynq-yolox/ ./ |
Webブラウザ経由で、KV260にアクセスします。あとはプログラムを実行するだけです。
DPU(dpu.bit)に関しては、DPU-PYNQでデフォルトで用意されているB4096を使っています。
そのため、YOLOXのPyTorchのモデルも4096に合わせたものを用意しました。
実際にYOLOXで物体検出すると5つの物体を検出できています。
PythonとKV260でYOLOXのテスト
PythonでDPU-PYNQとYOLOXのテストを行います。
プログラムやDPUとYOLOXのモデルは既に用意済です。下記に置いています。
今回のDPUのモデルは軽量のB512を使用しています。
https://github.com/iotengineer22/kv260-ubuntu-test/tree/main/yolox-test
まずrootユーザにして、PYNQの仮想環境を立ち上げます。
その後にプログラムを実行します。
1 2 3 4 5 |
sudo su cd kv260-ubuntu-test/ cd yolox-test/ source /etc/profile.d/pynq_venv.sh python3 app_yolox_nano_pt_coco2017.py |
テスト結果より、5個の物体を検出できています。
また実行時間も確認できています。pre,post-process、また推論(inference)時間もです。
1 2 3 4 5 6 |
Details of detected objects: [67. 64. 32. 66. 64.] Pre-processing time: 0.0078 seconds DPU execution time: 0.0227 seconds Post-process time: 0.0296 seconds Total run time: 0.0601 seconds Performance: 16.64670582632164 FPS |
コメント