Vitis AI 3.5とKV260でYOLOXを動かしたメモ

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

Vitis AI 3.5とKV260でYOLOXを動かしてみました。

AMD(Xilinx)のサンプルで公開されているモデルを動かしたメモです。

SDカードの作り方からruntimeのインストール含めて紹介します。

 

スポンサーリンク

Vitis AI 3.5とKV260でYOLOXを動かしたメモ

Vitis AI 3.5とKV260でYOLOXを動かしてみました。

(KV260…Xilinx(AMD)のFPGAが搭載された評価ボード)

物体検出のサンプルプログラムをテストした内容を紹介します。

 

ハード環境

KV260のFPGA評価ボードの環境でテストしています。使ったDPUの詳細は後述。

  • 評価ボード…KV260
  • DPU(Deep-Learning Processor Unit)…DPUCZDX8G_ISA1_B4096

 

このKV260は下記の第6回AIエッジコンテストで使用したFPGAボードです。

第6回AIエッジコンテストが凄く難しいけど勉強になった感想

第6回AIエッジコンテストが凄く難しいけど勉強になった感想
第6回AIエッジコンテストに参加していました。 RISC-Vを使って、画像とLIDAR点群からの3D物体検出が課題でした。 ただ貴重な勉強の機会になりましたし、自身への忘備録としても内容を紹介します。

 

ソフト環境

ソフト環境は2023年版で揃えています。

  • Vitis AI 3.5

FPGA向けにYOLOXのモデルをコンパイルするVitis AIは下記手順でインストールできます。

Vitis AI 3.0でPyTorchのCPUとGPUの環境を構築したメモ

 

KV260へのプラットフォームに関しては下記で対応できます。

  • Vivado  2023.1
  • Vitis 2023.1
  • Petalinux 2023.1

インストール方法に関しては下記で紹介した2022年版と同様にできました。

最新版にはアップデートしていませんが、(去年の)下記記事が参考になるかと思います。

VitisとVivadoをインストールする

 

Vitis AIライブラリのパッケージ

Verが変わるとパッケージに関するファイルが変わってきます。

基本的には公式の最新版のパッケージ(runtimeやインストールファイル)を確認ください。

AMD Adaptive Computing Documentation Portal

 

KV260のプラットフォーム

KV260のプラットフォーム作成・設定に関しては下記記事を参考にしています。

これ以降は、下記のプラットフォームが設定済の旨で記載しています。

Vitis2022.1版 KV260向け簡単なプラットフォームの作り方(AIエッジコンテスト対応版) - Qiita
FPGAの設計時間を短くしたい。最近のFPGAは高性能になってきました。ハードウェアもできて、ソフトウェアもできます。AI もできるし画像処理もできます。独自のCPU まで入れることもできます。一…
KV260にVitis AIを組み込む(AIEDGEコンテスト対応版) - Qiita
Vitis AIをKV260に組み込むKV260は、AI ビジョンスターターキットと言われているくらい、AIにを動かすたの機能を十分満たしています。ザイリンクス社から、リファレンスデザインは作ら…

2022年版の記事ですが、2023年版のソフト環境でも基本的に同じ方法で行けました。

 

最初にIPブロックでハードウェア作成の時にスクリプトを使う場合は変更が必要でした。

(zynq_ultra_ps_eのVerが3.4→3.5に変わっていましたので、変更しました)

create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e:3.5 zynq_ultra_ps_e_0

 

Vitis AIのライブラリをダウンロードする際には、型番も変わりますのでご注意ください。

また解凍するコマンド(tar)のときも同様に変更しました

wget https://www.xilinx.com/bin/public/openDownload?filename=vitis_ai_2023.1-r3.5.0.tar.gz -O vitis_ai_2023.1-r3.5.0.tar.gz

 

dpu_conf.vhのDPUのサイズも最大のものでテストしています。

プラットフォーム名は変えて「aiedge_4096」としています。

define B3136 → define B4096  

 

作成したプラットフォームのファイルは、後でYOLOXのモデルと一緒にKV260に送ります。

 

KV260用のSDカードを作る

下記記事を参考にKV260のSDカードを作ります

XILINX KIRA K26(KV260) Petalinux2022.1用起動用SDカードイメージの作り方 - Qiita
KRIAでPetalinuxを起動させる。ザイリンクスのSOMであるKRIAはその値段の安さ、性能の高さから、人気があります。一方で開発の仕方がわからないっていうのをよく聞きます。情報はあるの…

 

筆者が今回のテストした時期は、2023年の8月頭でした。

その時はXilinxの下記WikiページにKV260用にプレビルドしたイメージがありませんでした。

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#PetaLinux

 

ビルド元のBSPファイルは下記にありますので、ダウンロードしてpetalinuxを動かします。

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#PetaLinux-Board-Support-Packages

 

作成したSDイメージ(petalinux-sdimage.wic)をbalenaetcherなどを使って書き込みます。

/xilinx-kv260-starterkit-2023.1/images/linux の箇所にあります

 

KV260上での最初の立ち上げは下記を参考にさせてもらいました。

同様にKV260にVitis AIのruntimeをインストールしました。

https://qiita.com/basaro_k/items/b164a56e978001b8161e

 

 

KV260用のYOLOXのモデルをコンパイル

Vitis AIを使って、YOLOXのモデルをFPGA用にコンパイルする必要があります。

下記記事の内容を同様に実施しました。

実際にFPGAで使用するDPU(B4096)にあった形で変換します。

Vitis AIでPytorchのcompileをしてみたメモ

Vitis AIでPytorchのcompileをしてみたメモ
Vitis AIのPytorchのモデル(.xmodel)をコンパイルしてみました。 練習を兼ねて、複数の物体検出(YOLOX、PointPillars)のモデルでテストしています。

 

学習済のコンパイル前のモデルは、Xilinx(AMD)からサンプルが提供されています。

今回使用するサンプルは下記にあります。

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

 

COCOのデータセットでYOLOX

サンプルの内容としてはCOCOという画像のデータセットを使って学習していした。

COCOのデータセットは誰でも簡単に入手可能です。

 

筆者もColabの環境でデータセットの入手、また学習~テストも実施しています。

(1年以上前のテストなので、現在は多少コマンドも変わっていると思います)

参考までに下記にURLを貼っておきます

COCOのデータセットの簡単な使い方!FiftyOneを試してみた

COCOのデータセットの簡単な使い方!FiftyOneを試してみた
COCOのデータセットを簡単な使い方を紹介します。 Fifityoneというツールを使えば、任意のデータセットを簡単に作成可能です。 Colab上で動かしましたので、誰でも同様にテストできます。

 

YOLOXの学習をCOCOのデータセットから試してみた

YOLOXの学習をCOCOのデータセットから試してみた
YOLOXでの学習を実際に一から試してしてみました。 COCOのデータセットの入手から、物体検出まで行っています。 Colab上で実施していますので、誰でも同様にテスト可能です。

 

サンプルモデルをダウンロード

サンプルのモデルをダウンロードして解凍します。

 

「pt_yolox-nano_3.5」の方がサンプルです。

この中のReadmeにはモデルの学習からFPGA向けに量子化する手順が記載されています。

実行後の完成ファイルもquantizedフォルダに用意されていますので、コンパイルに使います。

 

prototxtファイルを用意する

KV260でYOLOXを使うには、モデルのパラメータなど記載したファイル(prototxt)が必要です。

本来は自分で作る必要があるのですが、少し楽をします。

下記でKV260とは違ったFPGA向けですが、Xilinxからコンパイル済のモデルを入手します。

 

この中にyolox_nano_pt.prototxtが入っていますので、そこだけ使わせてもらいます。

 

arch.jsonを作成

コンパイルする際には、実際にFPGAに使うDPUのモデル名(arch.json)を指定します。

今回使用するDPUCZDX8G_ISA1_B4096の型番に合わせています。

テキストで作っても構いませんし、下記のようにechoコマンドで作っても大丈夫です。

 

fingerprintではなくtargetで指定できるが…

Xilinx(AMD)公式ではarch.jsonでモデル名を"target"で指定している場合があります。

Vitis AI内のcompilerの中身を見ても、下記で記載されていました。

 

コンパイルも可能なのですが、実際にKV260での動作させるとエラーが発生します。

DPUとモデルのfingerprintが一致していない旨のエラーです

 

基本的にはtargetではなく、fingerprintを直接入力した方が良さそうです。

Please re-compile xmodel with dpu_fingerprint 0x101000016010407 and try again.

おそらくVitis AIのバージョンにより型番(fingerprint)が変わる影響かとは思います。

 

Vitis AIでコンパイル

Vitis AIを使ってコンパイルします。今回はCPU版のVitis AIを立ち上げています。

(コンパイル自体はCPU版でもGPU版でも変わりありません。)

 

先ほど作ったarch,jsonも引数にして、コンパイルします。

必要に応じてファイルを移動させてください。コンパイルは下記のように実行できました

 

コンパイル後に作成されるフォルダの中に.xmodelが作成されます。

またその中にダウンロードしたprototxtファイルも入れておきます。

後ほどKV260にまとめて送ります。

 

KV260でYOLOXを動かす

予め事前に作成したプラットフォームとYOLOXのモデルをKV260に送付します。

とりあえず、ホームディレクトリに入れておきました。

 

Vitis AI Libraryが参照するフォルダにモデル・prototxtのファイルをコピーします。

/usr/share/vitis_ai_library/models/yolox_nano_pt/

もし指定の箇所にモデルなどを入れずにテストすると、下記のようにエラーとなります。

 

実際テスト実行する箇所は下記です。ビルド済みのテストサンプルが置かれています。

/usr/share/vitis_ai_library/samples/yolovx/

 

筆者は画像認識したい写真(sample_yolox_nano.jpg)をコピーして、テストしました。

実際のコマンド履歴は下記です。無事KV260とYOLOXで画像認識できました。

 

YOLOXで物体検出する前の写真は下記です。下記記事の際に撮影したものです。

ブライトンのチケットを公式から買って、イギリスで観戦してみた話

 

物体検出した後に出力された写真が下記となります。

人が緑枠でそこそこ検出されています。

 

まとめ

Vitis AI 3.5とKV260でYOLOXを動かしてみました。

(KV260…Xilinx(AMD)のFPGAが搭載された評価ボード)

もし興味がある方は同様にテストしてみてください。

 

コメント