KITTI形式の3D物体検出をKV260(FPGA)で試したメモ

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

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でのコマンド例含めて紹介しています。

下記記事です。(リンク先はこちら)

KV260でYOLOX+DPUの物体検出をしてみたメモ

KV260でYOLOX+DPUの物体検出をしてみたメモ
FPGAでYOLOXの物体検出をしてみました。 使用したFPGAの評価ボードはKV260です。 Vitis AIのサンプルを使って簡単にテストした内容を紹介します。

 

今回のテストでは上記記事での環境は構築済という旨で紹介していきます。

 

KITTI形式で3D物体検出(PointPillars)のテスト

KV260にはLANコネクタ経由でPCから接続しています。

KV260でのコマンドの実行はMobaXtermのターミナルから実行しています。

 

コンパイル済のモデルをKV260に送る

Vitis AIのコンパイル済のモデルをダウンロードします。下記のyamlにリンク先があります。

 https://github.com/Xilinx/Vitis-AI/tree/2.5/model_zoo/model-list/pt_pointpillars_kitti_12000_100_10.8G_2.5

 

LinuxもしくはWSL2でwgetでモデルを入手しています。

PCに一度ダウンロード・解凍してからKV260にフォルダごとscpで送っています。

今回のモデルは2つあり、フォルダ名はデフォルトだと「pointpillars_kitti_12000_*_pt」でした。

 

3D物体検出するLIDAR点群データをKV260に送る

今回KITTI形式のデータを使って物体検出します。

KITTIのデータセットをダウンロードして、画像とLIDAR点群データを用意します。

今回はtrainの「000032.png」「000032.bin」をKV260に用意しています。

 

「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/」にコピーします。

 

「…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/」に移動します。

 

この後は3D物体検出のプログラムを実行するのみです。

 

実際に実行した結果です。「0」の自動車を複数検出できていることが分かります。

env XLNX_POINTPILLARS_PRE_MT=1 ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt 000032.bin 000032.png

 

実行したフォルダ内に、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

 

今回のプログラムは「env ***~」という形で環境変数を設定して実行します。

この場合、単純にsudoを頭につけるだけでは駄目です。

下記のように上手くDPUが起動エラーがでます。「sudo -s」を予め実行しています。

 

まとめ

KV260でKITTI(自動車のデータセット)の3D物体検出が出来ました。

次の記事ではnuScenes形式でもテストしてみます。(リンク先はこちら)

nuScenes形式の3D物体検出をKV260(FPGA)で試したメモ

nuScenes形式の3D物体検出をKV260(FPGA)で試したメモ
nuScenes形式の3D物体検出(PointPillars)をFPGAでテストしてみました。 使用した評価ボードはKV260です。 第6回AIエッジコンテストのデータセットでも確認しています。

 

今回の記事含めて、第6回AIエッジコンテストの一環でした。

下記にてコンテストでテスト・実施したことのまとめを紹介しています。

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

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

コメント