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

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

FPGAでYOLOXの物体検出をしてみました。

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

Vitis AIのサンプルを使って簡単にテストした内容を紹介します。

 

スポンサーリンク

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

KV260でYOLOXを使って、DPUによる物体検出を試してみました。

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

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

 

実行環境

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

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

 

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

下記記事にてKV260向けにYOLOXの物体検出のモデルをコンパイル済です。

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

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

 

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

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

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

 

DPUはB4096を使用

KV260で使えるDPUが「DPUCZDX8G」という型番になります。

(DPU…Deep-Learning Processor Unit)

その中でも容量がB4096,B3136…と分かれています。

 

今回使用するのは「DPUCZDX8G_ISA1_B4096」です。

KV260で使える中では一番大きなDPUサイズを使用します。

Xilinx公式のコンパイル済のモデルサイズ設定がB4096のためです。

 

KV260のプラットフォーム

KV260のプラットフォーム作成・設定に関しては下記記事を参考にしています。

これ以降は、KV260でVitis AIのプラットフォームが設定済の旨で記載しています。

Vitis2022.1版 KV260向け簡単なプラットフォームの作り方(AIエッジコンテスト対応版) - Qiita
FPGAの設計時間を短くしたい。最近のFPGAは高性能になってきました。ハードウェアもできて、ソフトウェアもできます。AI もできるし画像処理もできます。独自のCPU まで入れることもできます。一…

 

変更した箇所は、dpu_conf.vhのDPUのサイズの設定だけです。

define B3136 → define B4096  

プラットフォームは名は変えて「aiedge_4096」としています。

 

Vitis AIのコンパイル済のモデルでYOLOXをテストする

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

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

 

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

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

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

 

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

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

フォルダ名はデフォルトだと「tsd_yolox_pt」でした。

 

物体検出する写真をKV260に送る

今回のYOLOXのモデルはTT100Kから作られています。

TT100Kは道路標識を検出・識別するためのデータセットです。下記記事で紹介しています。

Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモ

Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモ
Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモです。 データセットの入手から学習までの流れを実施しています。 手順を紹介します。

 

TT100K内にあるデータを使っても良いのですが、今回は別で2枚用意しました。

道路標識がある写真をピックアップしました。この2つもKV260に送ります。

1. nuScenes(mini)の自動車走行の画像データ
n015-2018-07-24-11-22-45+0800__CAM_FRONT__1532402935662460.jpg

 

2. 第6回AIエッジコンテストの自動車走行の画像データ
6dxeLhuoQr0JgHsLjUU6TmhF_77.jpg

 

KV260のvitis_ai_libraryの中にモデルと写真をコピーする

KV260での操作に移ります。

YOLOXのモデルのフォルダごと「/usr/share/vitis_ai_library/models/」にコピーします。

 

物体検出したい写真を「/usr/share/vitis_ai_library/samples/yolovx/」にコピーします。

 

KV260でYOLOXで画像認識をする

B4096のDPUが搭載されたプラットフォーム(aiedge_4096)をロードします。

その後「/usr/share/vitis_ai_library/samples/yolovx/」に移動します。

 

yolovxのフォルダ内にReadme含めて、ビルド済/前のテストプログラムがあります。

Vitis AIのGitHubの下記フォルダ内のファイルと同じはずです

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

 

ビルド済のプログラムはそのまま使用できます。

Readmeに倣って、モデルのフォルダと写真を引数にして画像認識を試してみます。

sudo ./test_jpeg_yolovx tsd_yolox_pt n015-2018-07-24-11-22-45+0800__CAM_FRONT__1532402935662460.jpg

 

実行結果からも「RESULT: 18…」と、何かしら物体検出できています。

プログラム実行後はフォルダ内に頭に「0_」が付いた写真ファイルが出来ています。

中身を確認すると、標識に緑線が囲われており物体認識できていることが確認できました。

 

画像認識後の写真は下記です。緑の線が細く、アップしないと分かりづらいです。

 

もう一枚の画像も試してみます。

sudo ./test_jpeg_yolovx tsd_yolox_pt 6dxeLhuoQr0JgHsLjUU6TmhF_77.jpg

 

結果は「RESULT: 16…」と表示されており、物体認識しています。

(もし写真から何も標識が検出できなかった場合は、RESULTが出てきませんでした)

写真も確認すると、駐車禁止の標識を認識していることが分かります。

 

画像認識後の写真は下記です。

 

自分でコンパイルしたモデルで確認してみます

Xilinxのコンパイル済でモデルでYOLOXの動作を確認出来ました。

今度は下記記事で自分でコンパイルしたモデルを試してみます。

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

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

 

一度YOLOXのモデルを削除して、動かそうとどのようなエラーが出るのか確認してみます。

rmで「tsd_yolox_pt.xmodel」を削除した所、やはりモデルが無いよとエラーが発生しました。

1299 configurable_dpu_task_imp.cpp:106] cannot find model <tsd_yolox_pt>

 

その後コンパイルして作ったモデル「tsd_yolox_pt.xmodel」で確認してみました。

(量子化されたモデルまでは同じのため、同じ結果が返ってくるはず)

もちろんXilinxでコンパイルしたモデルと同じ結果が返ってきました。OKです。

 

まとめ

KV260でYOLOX+DPUの動作を確認できました。

また自分でコンパイルしたモデルでも同じ動作を確認できました。

次の記事ではKV260で3D物体検出(PointPillars)の動作を確認したいと思います。

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

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

 

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

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

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

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

コメント