FC2カウンター FPGAの部屋 カーブ、直線用白線間走行用畳み込みニューラルネットワーク12(直線走行用の重みとバイアスでカーブのテストデータを検証)
FC2ブログ

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

FPGAの部屋

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

カーブ、直線用白線間走行用畳み込みニューラルネットワーク12(直線走行用の重みとバイアスでカーブのテストデータを検証)

カーブ、直線用白線間走行用畳み込みニューラルネットワーク11(Vivado HLS でCNN を実装)”の続き。

前回は、Vivado HLS 2017.3 で畳み込みニューラルネットワークを実装した。カーブと直線のテストデータでの精度は、ハードウェアで、約 97.7 % 、96.3 % 、95.3 % だった。今回は、この精度が、直線のみの重みとバイアスでどの程度になるか?を検証してみよう。

畳み込みニューラルネットワークの C ソースコードが同じなので、なんか違う畳み込みニューラルネットワークを作った気がしないので、違うということを自分の胸に刻んでおきたいということでやってみることにした。

さて、straigtht_conv_nn2_4CurveData プロジェクトを作成し、curve_conv_nn2.cpp 、 curve_data_0_100.h と curve_data_2500_2600.h 、 curve_data_5000_5100.h 、curve_conv_nn_tb.cpp はそのままプロジェクトに入れて、 af1_bias.h、af1_weight.h、af2_bias.h、af2_weight.h、conv1_bias.h、conv1_weight.h を”白線追従走行用畳み込みニューラルネットワークの製作18(Vivado HLSでCシミュレーション)”の時の重みとバイアスに入れ替えた。

straigtht_conv_nn2_4CurveData プロジェクトを示す。af_weight.h の日付が 2017/08/24 になっているのが分かる。直線走行用の重みだ。
curve_tracing_cnn_58_171221.png

最初に、テストデータの 0 番目から 100 番目までの画像データで検証する。直線、左旋回、右旋回の画像にそれぞれについて 100 枚づつなので、合計 300 枚の画像について推論精度を確かめている。
curve_tracing_cnn_59_171221.png

C シミュレーションを行った。結果を示す。

hw_err_cnt = 8, sw_err_cnt = 10
hw accuracy = 97.333336%, sw accuracy = 96.666664%


カーブと直線走行用のの重みとバイアスの時のC シミュレーションでの精度を示す。

hw_err_cnt = 7, sw_err_cnt = 20
hw accuracy = 97.666669%, sw accuracy = 93.333334%


ここでは、精度はあまり変わらない。画像の前の方は、直線走行用のデータをそのまま使用しているので、双方の精度はあまり変わらなくなっていると言えると思う。

次に、テストデータの 2500 番目から 2600 番目までの画像データで検証する。直線、左旋回、右旋回の画像にそれぞれについて 100 枚づつなので、合計 300 枚の画像について推論精度を確かめている。
curve_tracing_cnn_60_171221.png

C シミュレーションを行った。結果を示す。

hw_err_cnt = 26, sw_err_cnt = 34
hw accuracy = 91.333336%, sw accuracy = 88.666666%


やはり、この辺りのテストデータは、カーブの画像が入っているので、直線走行用の重みとバイアスでは、精度が悪くなっているのだろう。

カーブと直線走行用の重みとバイアスの時のC シミュレーションでの精度を示す。

hw_err_cnt = 11, sw_err_cnt = 9
hw accuracy = 96.333331%, sw accuracy = 97.000003%


こちらは、同じ画像でもカーブの画像で学習されているので、高い精度を保っていると言える。やはり、学習は効いている。

最後に、テストデータの 5000 番目から 5100 番目までの画像データで検証する。直線、左旋回、右旋回の画像にそれぞれについて 100 枚づつなので、合計 300 枚の画像について推論精度を確かめている。
curve_tracing_cnn_61_171221.png

C シミュレーションを行った。結果を示す。

hw_err_cnt = 25, sw_err_cnt = 25
hw accuracy = 91.666669%, sw accuracy = 91.666669%


この辺りのテストデータも 2500 ~ 2600 番目と同様に、カーブの画像が入っているので、直線走行用の重みとバイアスでは、精度が悪くなっているようだ。

カーブと直線走行用の重みとバイアスの時のC シミュレーションでの精度を示す。

hw_err_cnt = 14, sw_err_cnt = 6
hw accuracy = 95.333332%, sw accuracy = 98.000002%


2500 ~ 2600 番目と同様に、直線走行用の重みとバイアスを使用した結果よりも明らかに精度が良い。

カーブと直線走行用の重みとバイアスの学習の効果を実感することができた。これで安心してIP として実装することができる。
  1. 2017年12月21日 05:04 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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