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

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

nuScenes形式の3D物体検出(PointPillars)をFPGAでテストしてみました。

使用した評価ボードはKV260です。

第6回AIエッジコンテストのデータセットでも確認しています。

 

スポンサーリンク

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

KV260でnuScenes形式のデータセットの3D物体検出をテストしました。

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

基本的にはVitis AIのサンプル使用して、練習・テストした内容を紹介しています。

 

また、同じnuScenes形式の第6回AIエッジコンテストのデータセットでも試しました。

筆者で量子化→コンパイルしたモデルも正常に動作するのか含めて確認しています。

 

実行環境

KV260のFPGA評価ボードの環境でテストしています。

  • 評価ボード…KV260
  • DPU…DPUCZDX8G_ISA1_B4096
  • Vitis AI…2.5

 

KITTI形式でも動作確認済

KITTI形式のデータセットでも同様にKV260で3D物体検出できることを確認済です。

下記記事にて紹介しています。(リンク先はこちら)

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

KITTI形式の3D物体検出をKV260(FPGA)で試したメモ
KITTIの3D物体検出(PointPillars)をFPGAでテストしてみました。 使用した評価ボードはKV260です。 Vitis AIのライブラリを使って、簡単にテストしてみた内容を紹介します。

 

KV260+YOLOXの物体検出でも動作確認済

事前にKV260のDPUを使って、物体検出(YOLO)の動作も確認済です。

プラットフォームの構築やKV260でのコマンド例含めて紹介しています。

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

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

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

 

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

 

3D物体検出に必要なモデルはコンパイル済

下記記事にて3D物体検出(PointPillars+nuScenes)のモデルをコンパイル済です。

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

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

 

ただし、Xilinx公式からコンパイル済のモデルも提供されています。

最初はXilinxの提供のモデルをダウンロードして使用して確認します。

(最後に筆者でコンパイルしたモデルに一部入れ替えて、動作するか確認します)

 

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

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

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

 

コンパイル済のモデル+LIDAR点群をKV260に送る

下記のXilinxのコンパイル済モデルとデータを送ります。

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

 

今回使うnuScenes(mini)のLIDAR点群のデータは下記です。

n008-2018-08-27-11-48-51-0400__LIDAR_TOP__1535385111448839.pcd.bin

IDはscene_id = 3, frame_id = 39です。

 

その時の全6方向のカメラの内、前方と後方のカメラ画像は下記になります。

 

LIDAR点群は360で検出しており、nuscenes-devkitで確認すると下記イメージです。

(下記のマップ+LIDAR点群の右方向が、自動車の前方向になっています)

自動車含めて大量に検出する3D物体があります。

 

sample_pointpillars_nuscenes.infoを作る

ライブラリを確認しますと、プログラムを動かすにはファイルを作成する必要があります。

下記のReadmeにも記載されている、「sample_pointpillars_nuscenes.info」です。

※動かすプログラムは「test_bin_pointpillars_nuscenes.cpp」をビルドしたものです

 https://github.com/Xilinx/Vitis-AI/tree/2.5/examples/Vitis-AI-Library/samples/pointpillars_nuscenes

 

LIDAR点群のファイル位置に加えて、タイムスタンプ・sweepsも記載しときます。

※タイムスタンプ(timestamp)もnuscenes-devkitで確認できます。

※sweeps(線形補間)のデータは入れていないので「0」です。

 

下記のようなファイル(sample_pointpillars_nuscenes_test.info)を作成しました。

 

KV260でnuScenes+PointPillarsで3D物体検出をする

必要なモデル・ファイルを、KV260のVitis AIライブラリ内に置きます。

その後「/usr/share/vitis_ai_library/samples/pointpillars_nuscenes」で3D物体検出をします。

 

実際に3D物体検出のプログラムを走らせると、下記のようになりました。

大量に検出している「0」が自動車のはずです。

 

nuScenesで検出したlabel名に関して

今回の3D物体検出に関してはmmdetection3dをベースにして処理しています。

(ライブラリのVitis AI側でラベルの入れ替えはしていないと思いますが…)

おそらく、前処理のnuscenes_converterpyの下記順番でカテゴリ化されています。

 

今回の3D物体検出した結果からも多分あっているとは思います。

  • 全方向に存在している自動車_carが「0」が大量にあり。
  • 後方の大きな、バス_busの「3」と重機_construction_vehicleの「4」も高い評価値。
  • 近くのコーン_traffic_coneの「7」も検出できている。

 

第6回AIエッジコンテストのデータセットで確認

同じnuScenes形式の第6回AIエッジコンテストのデータセットでも確認してみます。

2例ほど確認した結果ですが、自動車などは問題なく3D物体検出できていました。

ただ、人や自転車などの小さい物体の検出漏れが多かったです。

 

3D物体検出数が少ないデータ例

一つ目はシンプルなデータです(IDはscene_id = 2, frame_id = 1です)

LIDAR点群データとしては下記となります。

/3d_labels/samples/LIDAR_TOP/CXu8FUXumyRCt1FfFTjNFqZt_1.bin

 

自動車前方のカメラです。少し小さいですが自動車と自転車が1台づつ確認できます。

また右サイド側には工事中の障壁も確認できます。

/3d_labels/samples/CAM_FRONT/CXu8FUXumyRCt1FfFTjNFqZt_1.jpg

 

nuscenes-devkitで確認したLIDAR点群としては下記イメージです。

写真同様に自動車前方には2つの物体がアノテーションされています。

※後方にも自動車が有りそうですが、このデータは前方のみのアノテーションということです。

 

3D物体検出(PointPillars)すると下記結果となりました。

  • 前方(後方含めた)の自動車_carの「0」を検出できている
  • また右側サイドの障壁_barrier「9」も若干検出できている
  • 残念ながら小さい自転車_bicycle「5」は検出できず…

 

3D物体検出数が多いデータ例

二つ目は3D物体検出数が多いデータです(IDはscene_id = 29, frame_id = 73です)

/3d_labels/samples/LIDAR_TOP/HavlOgYpwQNuWPnzpPti53w5_73.bin

このデータに関してはリファレンス環境の検出結果例でも紹介されていたものです。

 https://github.com/pometa0507/6th-ai-reference2/blob/master/notebook/1-5_single_inference.ipynb

 

自動車前方の画像には数台の車と、小さいですが左前方に歩行者が確認できます

 

nuscenes-devkitで確認したLIDAR点群としては下記イメージです。

360°のLIDAR点群だと前方以外にも多くの自動車、大きい車両が確認できています。

※このデータに関しては360°のアノテーションがされていました。

 

3D物体検出(PointPillars)すると下記結果となりました。

  • 多くの自動車_carの「0」を高い評価値で検出できている
  • 大き目な車両もトラック_truck「1」として検出できている
  • 残念ながら小さい歩行者_pedestrian「7」は検出できず…

 

自分で量子化・コンパイルしたモデルでも確認してみる

下記記事にて筆者で量子化したモデルをコンパイル済です。

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

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

 

一部のモデルを置き換えてテストしてみます。

(あまり意味はないかもしれませんが、せっかく学習→量子化→コンパイルまでしたので…)

同様な結果が出るかチェックの意図です。

 

筆者で作ったモデルでも無事に3D物体検出できました。

基本的には結果は変わりませんでした。

前者の検出数が少ない例での確認ですが、ほんの少し自動車の検出が強めになったようです。

  • 一番評価値の高い自動車 score: 0.880797 →score: 0.904651
  • (評価値は低いが)大き目な車両をトラック_truck「1」として検出している

 

まとめ

KV260でnuScenes形式でもPointPillarsの3D物体検出ができました。

第6回AIエッジコンテストのデータセットでも検出することができました。

 

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

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

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

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

コメント