Kria Starter Kitで、Vitis AIを動かす
Model Zooを使用してみる
公開日:2023年2月22日
Xilinxから多数のAIモデルがまとめられているModel Zooが提供されています。
Model Zooは各AIモデルの関連ソースコード、ボード向けコンパイル済みAIモデルを提供しています。
本記事ではKV260向けにコンパイル済みAIモデルをそのまま使用して、画像分類のAI推論を行ってみます。
使用するモデルはModel Zooの分類のNo.1にあるtf_inceptionresnetv2_imagenet_299_299_26.35G_2.5となります。
目次
KV260のAI推論概要
KV260はAI推論にDPU(Deep Learning Processor Unit)を使用します。
DPUはプログラマブルエンジンで畳み込み演算などの各種モジュールが含まれています。
Zynq UltraScale + MPSoCのDPUに詳細が書かれていますので参照してみてください。
KV260ではDPUCZDX8Gを使用し、アーキテクチャはB512、B800、B1024、B1152、B1600、B2304、B3136、B4096があります。
ボードに適用しているDPUのアーキテクチャに合わせてAIモデルのコンパイルを行う必要があり、AIモデルのアーキテクチャが異なる場合、AI推論実行時にエラーとなります。
環境構築1で案内したPetalinuxイメージを起動すると、B4096のアーキテクチャが適用された状態となっています。
Model Zooで配布されているAIモデルもB4096でコンパイルされているため、そのまま使用してAI推論が可能です。
使用するAIモデルの概要
本記事で使用するのはImageNetのデータセットを使用した、画像分類のAIモデルです。
具体的には299x299サイズの入力画像に対して、1000種類(厳密にはBackgroundを含む1001種類)の各確率を出力するAIモデルになります。
AI推論により「入力画像は95%の確率で飛行機である」というような結果を得ることができます。
Model Zooのダウンロード
Vitis-AIのソースコードにあるmodel_zooディレクトリ以下で作業します。
AIモデルのダウンロードに関してはホストPC, Vitis-AI開発環境のどちらでも構いませんが、本記事ではVitis-AI開発環境でダウンロードします。
ホストPCでVitis-AIのソースコードのディレクトリに移動して以下を実行し、Vitis-AI開発環境を起動します。
user@hostpc:~$ ./docker_run.sh xilinx/vitis-ai-cpu:latest
Vitis-AI開発環境で以下を実行して対象のAIモデルをダウンロードします。
- model_zooディレクトリに移動
- ダウンロードスクリプトのdownloader.pyを実行
- tf inceptionと入力して対象のAIモデルを絞る
- tf_inceptionresnetv2_imagenet_299_299_26.35G_2.5の番号を入力
- zcu102 & zcu104 & kv260の番号を入力
- ダウンロードしたinception_resnet_v2_tf-zcu102_zcu104_kv260-r2.5.0.tar.gzを解凍
- exitでVitis-AI開発環境を終了
解凍したディレクトリにあるinception_resnet_v2_tf.xmodelが本記事で使用するKV260向けのコンパイル済みAIモデルとなります。
参考に上記のダウンロード手順を実行した画面を載せておきます。
本記事で使用するファイルのダウンロード
KV260でAI推論するためのJupyter Notebook, ラベルファイル, テスト画像をダウンロードしておきます。
以下からファイルをダウンロードしてください。
中身は以下となります。
ファイル名 | 説明 |
---|---|
Vitis-AI_test.ipynb | AI推論を実行するJupter Notebookファイル |
imagenet_label.txt | 出力の番号と画像種類の対応表(ラベルファイル) |
test.jpg | テスト画像 |
Vitis-AIライブラリ使用方法
AI推論実行の前に、Vitis-AIライブラリを使用したAIモデルの使用方法の概要を説明します。
詳細説明はVitis-AIの情報にあります。
C++とPythonでAPI提供されています。
KV260上のAI推論で使用するモジュールは以下です。
- XIR(Intermediate Representation)
- Vitis-AI Library
本記事ではPythonを使用します。使用方法の概要は以下です。
inception_resnet_v2_tf.xmodel以外を使用する場合も同様の使用方法です。
Vitis-AIライブラリにより、FPGAの深い知識がなくても短いコードでAI推論可能であることが分かると思います。
# 必要なモジュールのimport
import xir
import vitis_ai_library
# AIモデルの読み込み(デシリアライズ)
g = xir.Graph.deserialize("inception_resnet_v2_tf.xmodel")
# AI推論実行インスタンスの生成
runner = vitis_ai_library.GraphRunner.create_graph_runner(g)
# 入出力準備
inputData = runner.get_inputs()
outputData = runner.get_outputs()
# AI推論実行、jobの完了待ち
# inputData : AI推論への入力データをセットしておく
# outputData : AI推論結果が格納される
job_id = runner.execute_async(inputData, outputData)
runner.wait(job_id)
起動microSDカードの準備
環境構築1と環境構築2で作成したmicroSDカードを用意してください。
AI推論用ファイルの配置
で取得した4ファイルをmicroSDカード上に配置します。
ファイル名 | 説明 |
---|---|
inception_resnet_v2_tf.xmodel | Xilinux提供のAIモデル |
Vitis-AI_test.ipynb | AI推論を実行するJupter Notebookファイル |
imagenet_label.txt | 出力の番号と画像種類の対応表(ラベルファイル) |
test.jpg | テスト画像 |
配置方法は任意ですが、本記事ではホストPCでコピーする方法とscpで転送する方法を紹介します。
都合の良い方で配置してください。
ホストPCでコピーする場合
microSDカードをホストPCに接続します。
/media/[username]/root/home/petalinuxに出力することにします。
user@hostpc:~$ cp inception_resnet_v2_tf.xmodel /media/[username]/root/home/petalinux
user@hostpc:~$ cp imagenet_label.txt /media/[username]/root/home/petalinux
user@hostpc:~$ cp Vitis-AI_test.ipynb /media/[username]/root/home/petalinux
user@hostpc:~$ cp test.jpg /media/[username]/root/home/petalinux
user@hostpc:~$ sync
microSDカードをKV260に接続します。
scpで転送する場合
microSDカードをKV260に接続、起動しておきます。KV260とホストPCを同一ネットワーク上に接続しておいてください。
/home/petalinuxに出力することにします。
user@hostpc:~$ scp inception_resnet_v2_tf.xmodel petalinux@[KV260のIP]:/home/petalinux
user@hostpc:~$ scp imagenet_label.txt petalinux@[KV260のIP]:/home/petalinux
user@hostpc:~$ scp Vitis-AI_test.ipynb petalinux@[KV260のIP]:/home/petalinux
user@hostpc:~$ scp test.jpg petalinux@[KV260のIP]:/home/petalinux
Jupyter Notebook準備
KV260側作業
microSDカードをKV260に接続して起動します。
シリアル接続してKV260にアクセス、Jupyter Notebookを起動します。
cd /home/petalinux
jupyter notebook
ホストPC側作業
ブラウザで http://[KV260のIP]:8888 にアクセスします。
画像のように
- Vitis-AI_test.ipynb
- imagenet_label.txt
- inception_resnet_v2_tf.xmodel
- test.jpg
が表示されていればokです。
AI推論実行例
KV260でAI推論を試す準備が整ったので、PythonでAI推論を実行してみます。
実行はJupyter Notebookの各セルを実行する形で行います。
ホストPCのブラウザで、Jupyter NotebookのVitis-AI_test.ipynbを選択します。
AI推論のNotebookが表示されるので、先頭のセルからRunボタンを押して最後のセルまで実行してください。
ホストPCで操作していますが実行しているのはKV260となります。
以下の画像のような実行結果になるのを確認してください(処理時間の出力結果は異なります)。
飛行機の画像を入力として、AI推論を実行して正しく判定できることが確認できると思います。
テスト画像は任意なので、好きな画像に差し替えて結果を表示させてみてください。
Jupyterのファイル一覧のページの右側のUploadボタンを押すと、ホストPCからKV260にファイル転送できます。
まとめ
Xilinxが提供している学習済みAIモデルを使用してKV260でAI推論を行いました。
Vitis-AIライブラリにより、短いコードでKV260上でAI推論できることが確認できました。
Model Zooで多くのAIモデルが提供されているので、他のAIモデルでも同様の確認が可能だと思います。
但し、AIモデルの入出力形式と出力結果の加工については内容確認して実装する必要があります。
※文中に記載されている各種名称、会社名、商品名などは各社の商標もしくは登録商標です。