KITTIの3D物体検出(PointPillars)をFPGAでテストしてみました。
使用した評価ボードはKV260です。
Vitis AIのライブラリを使って、簡単にテストしてみた内容を紹介します。
KITTI形式の3D物体検出をKV260(FPGA)で試したメモ
KV260でKITTI形式のデータセットの3D物体検出を試してみました。
(KV260…Xilinx(AMD)のFPGAが搭載された評価ボード)
基本的にはVitis AIのサンプル使用して、簡単に練習・テストした内容を紹介します。
実行環境
KV260のFPGA評価ボードの環境でテストしています。
- 評価ボード…KV260
- DPU…DPUCZDX8G_ISA1_B4096
- Vitis AI…2.5
KV260+YOLOXの物体検出でも動作確認済
事前にKV260のDPUを使って、物体検出(YOLO)の動作も確認済です。
プラットフォームの構築やKV260でのコマンド例含めて紹介しています。
下記記事です。(リンク先はこちら)
今回のテストでは上記記事での環境は構築済という旨で紹介していきます。
KITTI形式で3D物体検出(PointPillars)のテスト
KV260にはLANコネクタ経由でPCから接続しています。
KV260でのコマンドの実行はMobaXtermのターミナルから実行しています。
コンパイル済のモデルをKV260に送る
Vitis AIのコンパイル済のモデルをダウンロードします。下記のyamlにリンク先があります。
LinuxもしくはWSL2でwgetでモデルを入手しています。
PCに一度ダウンロード・解凍してからKV260にフォルダごとscpで送っています。
今回のモデルは2つあり、フォルダ名はデフォルトだと「pointpillars_kitti_12000_*_pt」でした。
1 2 3 4 5 6 |
wget https://www.xilinx.com/bin/public/openDownload?filename=pointpillars_kitti_12000_0_pt-zcu102_zcu104_kv260-r2.5.0.tar.gz tar -xzvf openDownload\?filename\=pointpillars_kitti_12000_0_pt-zcu102_zcu104_kv260-r2.5.0.tar.gz wget https://www.xilinx.com/bin/public/openDownload?filename=pointpillars_kitti_12000_1_pt-zcu102_zcu104_kv260-r2.5.0.tar.gz tar -xzvf openDownload\?filename\=pointpillars_kitti_12000_1_pt-zcu102_zcu104_kv260-r2.5.0.tar.gz scp -r pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt petalinux@192.168.11.13:~ scp 000032.* petalinux@192.168.11.13:~ |
3D物体検出するLIDAR点群データをKV260に送る
今回KITTI形式のデータを使って物体検出します。
KITTIのデータセットをダウンロードして、画像とLIDAR点群データを用意します。
今回はtrainの「000032.png」「000032.bin」をKV260に用意しています。
1 |
scp 000032.* petalinux@192.168.11.13:~ |
「000032.png」の画像は下記のように自動車が並んでいるものです。
(画像は3D物体検出した後に、出力結果を表示するために使われていました。)
「000032.bin」が実際に3D物体検出で使うLIDAR点群のデータとなります。
KV260のvitis_ai_libraryの中にモデルとデータをコピーする
KV260での操作に移ります。
PointPillarsのモデルのフォルダを2つ「/usr/share/vitis_ai_library/models/」にコピーします。
またデータを「/usr/share/vitis_ai_library/samples/pointpillars/」にコピーします。
1 2 3 |
sudo cp -r pointpillars_kitti_12000_0_pt/ /usr/share/vitis_ai_library/models/ sudo cp -r pointpillars_kitti_12000_1_pt/ /usr/share/vitis_ai_library/models/ sudo cp 000032.* /usr/share/vitis_ai_library/samples/pointpillars/ |
「…samples/pointpillars/」のフォルダ内にReadmeがあります。
また、ビルド済/前のテストプログラムがあります。
Vitis AIのGitHubの下記フォルダ内のファイルと同じはずです。
https://github.com/Xilinx/Vitis-AI/tree/2.5/examples/Vitis-AI-Library/samples/pointpillars
KV260でKITTI+PointPillarsで3D物体検出をする
KV260でB4096のDPUが搭載されたプラットフォーム(aiedge_4096)をロードします。
その後「/usr/share/vitis_ai_library/samples/pointpillars/」に移動します。
1 2 3 4 |
sudo xmutil listapps sudo xmutil unloadapp sudo xmutil loadapp aiedge_4096 cd /usr/share/vitis_ai_library/samples/pointpillars/ |
この後は3D物体検出のプログラムを実行するのみです。
1 2 |
sudo -s env XLNX_POINTPILLARS_PRE_MT=1 ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt 000032.bin 000032.png |
実際に実行した結果です。「0」の自動車を複数検出できていることが分かります。
env XLNX_POINTPILLARS_PRE_MT=1 ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt 000032.bin 000032.png
1 2 3 4 5 6 7 8 9 |
xilinx-k26-starterkit-20221:/usr/share/vitis_ai_library/samples/pointpillars# env XLNX_POINTPILLARS_PRE_MT=1 ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt 000032.bin 000032.png 0 9.011868 -3.105868 -1.561002 1.526731 3.309887 1.512004 4.758468 0.955319 0 13.543466 -3.007068 -1.676430 1.625196 4.055358 1.547860 4.711593 0.955319 0 9.209467 3.548266 -1.646781 1.491364 3.523357 1.488562 1.530938 0.952574 0 5.124666 -8.127068 -1.731627 1.703191 4.350764 1.512004 3.149405 0.909907 0 20.032932 -3.647068 -1.585844 1.575194 3.750593 1.488562 4.922530 0.887205 0 25.416397 -5.567068 -1.176931 1.612549 3.900000 1.523863 5.149093 0.835484 0 44.969330 5.919999 -1.225681 1.663737 4.384888 1.523863 4.727218 0.692642 0 3.261200 16.207201 -1.805219 1.600000 3.809657 1.488562 3.477530 0.562177 |
実行したフォルダ内に、2つの画像データが保存されます。
今回の場合だと「000032_rgb.jpg」「000032_bev.jpg」です。
末尾にrgbが付いたファイルは3D物体検出した結果が追記されていました。
末尾にbevが付いたファイルは上から見たLIDAR点群の画像でした。
sudo -s を実行している理由
プログラムをそのまま実行すると動作はしますが、ワーニングが出ます。
検出後の結果の画像を作成するのですが、権限がなく画像にWriteできない旨でした。
imwrite_('000032_rgb.jpg'): can't open file for writing: permission denied
1 2 3 |
xilinx-k26-starterkit-20221:/usr/share/vitis_ai_library/samples/pointpillars$ env XLNX_POINTPILLARS_PRE_MT=1 ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt 000032.bin 000032.png [ WARN:0] global /usr/src/debug/opencv/4.5.2-r0/git/modules/imgcodecs/src/loadsave.cpp (693) imwrite_ imwrite_('000032_rgb.jpg'): can't open file for writing: permission denied [ WARN:0] global /usr/src/debug/opencv/4.5.2-r0/git/modules/imgcodecs/src/loadsave.cpp (693) imwrite_ imwrite_('000032_bev.jpg'): can't open file for writing: permission denied |
今回のプログラムは「env ***~」という形で環境変数を設定して実行します。
この場合、単純にsudoを頭につけるだけでは駄目です。
下記のように上手くDPUが起動エラーがでます。「sudo -s」を予め実行しています。
1 2 3 4 5 |
xilinx-k26-starterkit-20221:/usr/share/vitis_ai_library/samples/pointpillars$ sudo env XLNX_POINTPILLARS_PRE_MT=1 ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt 000032.bin 000032.png WARNING: Logging before InitGoogleLogging() is written to STDERR F0203 14:57:33.887049 1893 file_lock_lnx.cpp:28] Check failed: fd >= 0 (-1 vs. 0) cannot open file: /tmp/DPU_0 *** Check failure stack trace: *** Aborted |
まとめ
KV260でKITTI(自動車のデータセット)の3D物体検出が出来ました。
次の記事ではnuScenes形式でもテストしてみます。(リンク先はこちら)
nuScenes形式の3D物体検出をKV260(FPGA)で試したメモ
今回の記事含めて、第6回AIエッジコンテストの一環でした。
下記にてコンテストでテスト・実施したことのまとめを紹介しています。
コメント