FC2カウンター FPGAの部屋 自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する4
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する4

自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する3”の続き。

白線間走行用CNNをKerasで学習する”で学習した白線間走行用 CNN を Vitis-AI のカスタム OP ワークフローで動作させてみたいということで、前回は、量子化とコンパイルを行って、XMODEL を生成した。今回は、XMODEL と テスト用画像を kv260 の Petalinux 2022.1 にアップロードして推論したが、結果が間違っているようだった。

tf2_curve_line.xmodel と 3 個のテスト用画像を Petalinux 2022.1 の ~/tensorflow2_example に FileZilla でアップロードした。
Custom_OP_Workflow_46_221207.png

まずは、kv260 の Petalinux 2022.1 の環境を設定した。
cd ~/kv260_median/dpu
sudo mkdir -p /run/media/mmcblk0p1/
sudo cp dpu.xclbin /run/media/mmcblk0p1/
sudo xmutil unloadapp
sudo xmutil loadapp dpuprj
cd ~/tensorflow2_example/deployment/cpp

Custom_OP_Workflow_46_221208.png

走行方向の判定は直進が score[1]、左旋回が socre[0]、右旋回が score[2] が最大になる予定だ。(”白線追従走行用畳み込みニューラルネットワーク・システムの製作6(実機で確認2)”参照)

まずは直進の画像の straight_RED_rect5_24.jpg を推論してみたところ、score[2] が最大値となった。右旋回となった。
./tf2_custom_op_graph_runner ~/tensorflow2_example/tf2_curve_line.xmodel ~/tensorflow2_example/straight_RED_rect5_24.jpg
Custom_OP_Workflow_47_221208.png

xilinx-k26-starterkit-20221:~/tensorflow2_example/deployment/cpp$ ./tf2_custom_op_graph_runner ~/tensorflow2_example/tf2_curve_line.xmodel ~/tensorflow2_example/straight_RED_rect5_24.jpg
model_file: /home/petalinux/tensorflow2_example/tf2_curve_line.xmodel
image_path: /home/petalinux/tensorflow2_example/straight_RED_rect5_24.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
W1208 04:47:28.646189  1217 tool_function.cpp:171] [UNILOG][WARNING] The operator named custom_layer, type: Mylayer, is not defined in XIR. XIR creates the definition of this operator automatically. You should specify the shape and the data_type of the output tensor of this operation by set_attr("shape", std::vector<int>) and set_attr("data_type", std::string)
image file /home/petalinux/tensorflow2_example/straight_RED_rect5_24.jpg result:
    score[0]   =  0.00664835  
    score[1]   =  0.00664835  
    score[2]   =  0.986703    



次に、左旋回画像の left_turn_RED_rect0_00.jpg を推論したところ、やはり右旋回という結果だった。
./tf2_custom_op_graph_runner ~/tensorflow2_example/tf2_curve_line.xmodel ~/tensorflow2_example/left_turn_RED_rect0_00.jpg
Custom_OP_Workflow_48_221208.png

xilinx-k26-starterkit-20221:~/tensorflow2_example/deployment/cpp$ ./tf2_custom_op_graph_runner ~/tensorflow2_example/tf2_curve_line.xmodel ~/tensorflow2_example/left_turn_RED_rect0_00.jpg
model_file: /home/petalinux/tensorflow2_example/tf2_curve_line.xmodel
image_path: /home/petalinux/tensorflow2_example/left_turn_RED_rect0_00.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
W1208 04:47:59.089350  1248 tool_function.cpp:171] [UNILOG][WARNING] The operator named custom_layer, type: Mylayer, is not defined in XIR. XIR creates the definition of this operator automatically. You should specify the shape and the data_type of the output tensor of this operation by set_attr("shape", std::vector<int>) and set_attr("data_type", std::string)
image file /home/petalinux/tensorflow2_example/left_turn_RED_rect0_00.jpg result:
    score[0]   =  0.0108675   
    score[1]   =  0.0108675   
    score[2]   =  0.978265    


最後に右旋回の画像の right_turn_RED_rect0_00.jpg を推論してみたところ右旋回という結果だった。これは正しい。
./tf2_custom_op_graph_runner ~/tensorflow2_example/tf2_curve_line.xmodel ~/tensorflow2_example/right_turn_RED_rect0_00.jpg
Custom_OP_Workflow_49_221208.png

xilinx-k26-starterkit-20221:~/tensorflow2_example/deployment/cpp$ ./tf2_custom_op_graph_runner ~/tensorflow2_example/tf2_curve_line.xmodel ~/tensorflow2_example/right_turn_RED_rect0_00.jpg
model_file: /home/petalinux/tensorflow2_example/tf2_curve_line.xmodel
image_path: /home/petalinux/tensorflow2_example/right_turn_RED_rect0_00.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
W1208 04:48:13.153605  1261 tool_function.cpp:171] [UNILOG][WARNING] The operator named custom_layer, type: Mylayer, is not defined in XIR. XIR creates the definition of this operator automatically. You should specify the shape and the data_type of the output tensor of this operation by set_attr("shape", std::vector<int>) and set_attr("data_type", std::string)
image file /home/petalinux/tensorflow2_example/right_turn_RED_rect0_00.jpg result:
    score[0]   =  0.0158762   
    score[1]   =  0.11731     
    score[2]   =  0.866813    


全ての推論結果が右旋回という結果が出た。これは推論がおかしいと思う。
もう一度学習を見直してみたい。

後で、テスト用画像を貼っておく。
  1. 2022年12月10日 05:03 |
  2. Vitis-AI
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5789-471d97c2
この記事にトラックバックする(FC2ブログユーザー)