Kria KV260 Vision AI スターターキットの始め方では、AMD Xilinxから提供されているKria KV260 Vision AI スターターキットを開封し、遊んでみました。このボードは、Ubuntuの完全なディストリビューションを実行できるほど強力なFPGAとARMプロセッサを提供します。この記事では、Raspberry Piカメラを使用してSmartCamアプリケーションを構築し、実行します。このアプリケーションは、リアルタイムで顔を検出し、コンピューターモニターにその様子を表示することができます。
このチュートリアルは、AMD Xilinxの方々がまとめた元のチュートリアルに続くものです。このチュートリアルの多くが、彼らのものと非常に似ている(同じである)ことに気づくでしょう。このチュートリアルを初めて見たとき、圧倒される感じがしました。私はFPGA設計にかなり詳しい背景を持っていますが、彼らのチュートリアルを一つ一つ丁寧に進めることは時には難しく、少し気が重くなることがあります。もう少し直感的で、簡単にフォローできるものを探していました。他の人が書き直したチュートリアルをじっくりと読んだ後、私が見つけたものにはあまり満足できませんでした。それゆえ、自分自身で書くことにしました。
もし詳細な情報を求めているなら、元のチュートリアルを確認することを強くお勧めします。いくつかのステップは非常に明確ではありませんが、このチュートリアルではそれらを乗り越える(あるいは回避する)試みをしています。最も重要なことは、この記事を書いている時点で、サンプルのSmartCamアプリケーションは最新のファームウェアでは動作しないようでした。フォークしたリポジトリでは、デモをスムーズに起動できるように自動化スクリプト(さらには必要な最終フラッシュファイルまで)を作成しました。このチュートリアルを手に入れたことで、できるだけ早くハードウェアターゲットでのAIに飛び込み、デモを成功させた後に私が感じた「わお」の瞬間を体験できることを願っています。
もちろん、AMD XilinxのKria KV260 Vision Starter Kitが必要になります。ボードのセットアップが必要で、それは私の前のチュートリアルGetting Started with the Kria KV260 Vision AI Starter Kitに従って行うことができます。また、Raspberry Pi Camera Module V2も必要です。V2という部分が非常に重要です。私は安価なV1バージョンのカメラや他の類似品のカメラでデモを実行しようとしましたが、成功しませんでした(そして、これらがこのデモで機能しないことを証明できます)。カメラのリボンケーブルをボード上のJ9ポートに接続する必要があります。最後に、KV260キットに接続するためのHDMI対応のモニター(またはテレビ)と(もちろん)HDMIケーブルが必要です。
デモを始める前に、DockerとSmartCamの例をKria KV260デバイスにインストールしておく必要があります(SmartCamアプリケーションは使用しませんが)。また、Xilinx Vitis(フルインストール)バージョン2022.1も必要です。Xilinx Vitisのバージョン番号は非常に重要であることに注意してください。このチュートリアルは、そのバージョン専用に構築されています。
DockerはConvenience Scriptメソッドを使用してインストールできます。それを行うには、ターミナルを開いて以下の行を実行します:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh --dry-run sudo usermod -aG docker $USER
SmartCamアプリケーションパッケージをインストールするには、ターミナルで次のコマンドを実行します:
sudo apt install -y xlnx-firmware-kv260-smartcam
また、元のリポジトリの私のフォークをクローンする必要があります:
git clone --recursive --branch rpi-camera-demo-clean https://github.com/amahpour/kria-vitis-platforms.git
できるだけシンプルにするために、ビルドプロセスを自動的に進めるスクリプトを書きました。オリジナルのチュートリアルにあるスクリーンショットをフォローしてブロックデザインを更新したり、コードを変更する必要はありません。このチュートリアルは、Vitisユーザーインターフェースに飛び込むことなくビルドを実行しようとします。ビルドスクリプトを実行するには、クローンしたリポジトリにcdで移動し、以下のコマンドを実行してください:
cd kv260 ./build_demo.sh
このスクリプトはLinuxを念頭に置いて書かれています。Windowsを使用している場合は、WSL 2にUbuntuをセットアップして、そこにXilinx Vitisをインストールすることを強くお勧めします(Windowsではなく)。
Vivadoが見つからないというエラーが出た場合、Xilinxの設定をソースしていない可能性があります。このコマンドを実行してください:
source /tools/Xilinx/Vivado/2022.1/settings64.sh
build_demo.shスクリプトを実行すると、リポジトリのkv260/extras/フォルダに更新されたブロックデザイン、ピン制約ファイル、プロジェクト設定が含まれているため、チュートリアル全体を完全にバイパスします。チュートリアルをステップバイステップで進めたい場合は、オリジナルを見ることを強くお勧めします。
すべてが正しく実行された場合、
kv260/overlays/examples/smartcam/binary_container_1/link/int/kv260-raspi-dpu.bit.bin
にビットストリームファイルが生成されているはずです。ビルドプロセスには1〜2時間かかることがあります。それを待つ時間がない人もいるので、バックアップとしてkv260/extras/フォルダにビットストリームファイルを含めています。
この時点で、ファイルをKV260ボードにコピーしてデモを実行する準備が整いました。USBフラッシュドライブまたはSCPコマンド(セキュアコピー)を介してファイルを転送できます。次のファイルを転送する必要があります:
kv260/extras/kv260-raspi-dpu.bit.bin(または上記で生成されたもの)
kv260/extras/kv260-raspi-dpu.dtbo
kv260/extras/kv260-raspi-dpu.xclbin
KV260デバイスに戻ったら、通常ファームウェアがロードされるライブラリセクションにこれらのファイルを移動する必要があります:
sudo mkdir /lib/firmware/xilinx/kv260-raspi-dpu sudo mv kv260-raspi-dpu.bit.bin /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.dtbo /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.xclbin /lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin sudo cp /lib/firmware/xilinx/kv260-smartcam/shell.json /lib/firmware/xilinx/kv260-raspi-dpu/
これで、アプリケーションを起動する準備が整いました。この操作を行うとモニターがオフになるため、SSH経由またはUSBシリアルインターフェース(つまり、USBポートを使用し、PuTTYやTeraTermを使用する)で実行する必要があります。
sudo xmutil listapps sudo xmutil unloadapp sudo xmutil loadapp kv260-raspi-dpu sudo xmutil desktop_disable docker run \ --env="DISPLAY" \ -h "xlnx-docker" \ --env="XDG_SESSION_TYPE" \ --net=host \ --privileged \ --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \ -v /tmp:/tmp \ -v /dev:/dev \ -v /sys:/sys \ -v /etc/vart.conf:/etc/vart.conf \ -v /lib/firmware/xilinx:/lib/firmware/xilinx \ -v /run:/run \ -it xilinx/smartcam:latest bash
Dockerコンテナ内で、ファイルにわずかな変更を加える必要があります。そのためにはまずvimをインストールする必要があります:
apt-get update -y && apt-get install -y vim vim /opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json
vimで"i"(挿入モード)を押してファイルの編集を開始します。"xclbin"ファイルを指す行を探して、このパスに更新してください:
/lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin
エスケープキーを押してください。":wq"と入力して(保存して終了)、エンターキーを押します。その後、以下の(非常に長い)コマンドでアプリケーションを実行できます:
gst-launch-1.0 mediasrcbin name=videosrc media-device=/dev/media0 v4l2src0::io-mode=mmap v4l2src0::stride-align=256 ! video/x-raw, width=1920, height=1080, format=NV12, framerate=30/1 ! tee name=t ! queue ! vvas_xmultisrc kconfig="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json" ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/aiinference.json" ! ima.sink_master vvas_xmetaaffixer name=ima ima.src_master ! fakesink t. ! queue max-size-buffers=1 leaky=2 ! ima.sink_slave_0 ima.src_slave_0 ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/drawresult.json" ! queue ! kmssink driver-name=xlnx plane-id=39 sync=false fullscreen-overlay=true
すべてが正しく機能した場合、モニター(またはテレビ)はラズベリーパイカメラからのフィードで再びオンになります。リアルタイムでビデオフィード内に検出された顔の周りに青いボックスを配置します。
この記事では、Raspberry Pi Cameraを使用したSmartCamチュートリアルをレビューし、「ただ動かす」ために必要なショートカットを観察しました。この時点で、リアルタイムで顔を検出するKria KV260上で自分のSmartCamを稼働させることができるはずです。私の目標は、プロセスを簡素化して、元のチュートリアルを手探りで進めるよりも、AIが動作するのを見る楽しさにもっと集中できるようにすることでした。このガイドが、「動いた」という瞬間をより明確かつ迅速に迎えるためのお手伝いができたことを願っています。さあ、あなたの番です。この強力なスターターキットで何ができるか、創造的に探求してみてください。
注:このプロジェクトのすべてのコードはこのリポジトリにあります。