KV260とDPU-PYNQでYOLOXの物体検出してみる

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

KV260とDPU-PYNQで物体検出してみました。

YOLOXを使って、高速に物体検出しています。

jupyter_notebooksとpythonの両方でテストしてみました。

 

スポンサーリンク

KV260とDPU-PYNQでYOLOXの物体検出してみる

KV260とDPU-PYNQで物体検出してみました。YOLOXを使って、高速に物体検出しています。

jupyter_notebooksでテストした動画が下記です。

 

pythonでテストした動画が下記となっています。

 

プログラム、コンパイルしたYOLOXのモデル、合成したDPUモデルなどは下記に置いています。

GitHub - iotengineer22/kv260-ubuntu-test: This repository present solution for my KV260 Ubuntu test
This repository present solution for my KV260 Ubuntu test - iotengineer22/kv260-ubuntu-test

 

テスト・合成環境

最初にテスト環境に関して説明します。

コンパイル・合成などは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でした。

問題なく動きました。サンプルのモデルをダウンロードして解凍します。

 

古いVitis AI 2.5のdocker環境を作る

古いVitis AI環境を作るのは簡単です。

dockerで通常はlatestをpullする箇所を、指定のVer「2.5」にします。

どのVerが使えるかは下記を確認お願いします。

 https://hub.docker.com/r/xilinx/vitis-ai-cpu/tags

 

あとはVitis AIを起動して、コンパイルします。今回はB512とB4096を用意しました。

KV260が使えるDPUでも一番小さいサイズと大きいサイズにしています。

Vitis AIのdockerを動かしたコマンドは下記です。

 

KV260のDPU(B512)環境を合成

DPU環境の合成方法に関しては、長い手順になりますので下記記事をご参考ください。

同類のボードのKR260で、B512~B4096のベンチマークまでしています。

Benchmark Architectures of the DPU with KR260
This project is part of a subproject for the AMD Pervasive AI Developer Contest. We compared the speeds of different DPU...
Implementation DPU, GPIO, and PWM for KR260
This project is part of a subproject for the AMD Pervasive AI Developer Contest. We Implemented DPU, GPIO, and PWM for K...

 

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をインストールします。

 

jupyter_notebooksのプログラムは下記です。

 https://github.com/iotengineer22/kv260-ubuntu-test/blob/main/jupyter_notebooks/pynq-yolox/dpu_yolox-nano_pt_coco2017.ipynb

 

DPU-PYNQを使って、YOLOXのテストを行います。

jupyter_notebooksを使ってテストします。

下記例のようにプログラムをjupyter_notebooksのフォルダにコピーします。

 

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の仮想環境を立ち上げます。

その後にプログラムを実行します。

 

テスト結果より、5個の物体を検出できています。

また実行時間も確認できています。pre,post-process、また推論(inference)時間もです。

 

コメント