FC2カウンター FPGAの部屋 Kerasで学習した重みとバイアスを使用した白線間走行用CNNをVivado HLSで確かめる
fc2ブログ

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

FPGAの部屋

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

Kerasで学習した重みとバイアスを使用した白線間走行用CNNをVivado HLSで確かめる

白線間走行用CNNをKerasで学習する3(各層の重みとバイアスをCのヘッダファイルに変換)”でKeras で学習した重みとバイアスをC のヘッダファイルに変換することができた。

すでに、「ゼロから作るDeep Learning」のPython コードを使用して、学習した重みとバイアスをC のヘッダファイルにしたものを使用してVivado HLSで精度を確かめたブログ記事が”カーブ、直線用白線間走行用畳み込みニューラルネットワーク11(Vivado HLS でCNN を実装)”だ。これを重みとバイアス以外は使用して、Kerasで学習した重みとバイアスのVivado HLS 2018.2 での精度を見てみよう。

なお、Kerasで学習した重みとバイアスは、前回学習した重みとバイアスではなく新たに学習しなおした重みとバイアスを使用した。学習結果を示す。

x_train shape: (34650, 1, 10, 56)
y_train shape: (34650,)
x_train shape: (34650, 10, 56, 1)
34650 train samples
26550 test samples
Train on 34650 samples, validate on 26550 samples
Epoch 1/8
34650/34650 [==============================] - 5s 154us/step - loss: 0.4760 - acc: 0.8065 - val_loss: 0.2648 - val_acc: 0.9200
Epoch 2/8
34650/34650 [==============================] - 5s 150us/step - loss: 0.2083 - acc: 0.9254 - val_loss: 0.2098 - val_acc: 0.9264
Epoch 3/8
34650/34650 [==============================] - 5s 151us/step - loss: 0.1419 - acc: 0.9484 - val_loss: 0.1368 - val_acc: 0.9551
Epoch 4/8
34650/34650 [==============================] - 5s 149us/step - loss: 0.1098 - acc: 0.9595 - val_loss: 0.1200 - val_acc: 0.9601
Epoch 5/8
34650/34650 [==============================] - 5s 150us/step - loss: 0.0908 - acc: 0.9668 - val_loss: 0.1065 - val_acc: 0.9650
Epoch 6/8
34650/34650 [==============================] - 5s 149us/step - loss: 0.0753 - acc: 0.9724 - val_loss: 0.1002 - val_acc: 0.9650
Epoch 7/8
34650/34650 [==============================] - 5s 152us/step - loss: 0.0645 - acc: 0.9763 - val_loss: 0.0983 - val_acc: 0.9666
Epoch 8/8
34650/34650 [==============================] - 5s 149us/step - loss: 0.0546 - acc: 0.9805 - val_loss: 0.0872 - val_acc: 0.9705


keras_curve_line_5_180731.png

少し、過学習のような気がするが、まあやってみよう。

Vivado HLS 2018.2 でZYBO 用の curve_conv_nn2_k プロジェクトを作成した。
keras_curve_line_1_180731.png

最初に curve_data_0_100.h をインクルードして、C シミュレーションを行った。結果を示す。
keras_curve_line_2_180731.png

hw_err_cnt = 13, sw_err_cnt = 16
hw accuracy = 95.666665%, sw accuracy = 94.666666%


300 個のデータを推論してハードウェアつまり、固定小数点演算でのエラーが 13 個、ソフトウェアつまり、浮動小数点演算でのエラーが 16 個だった。

次に、curve_data_2500_2600.h だけを生かして、C シミュレーションを行った。結果を示す。
keras_curve_line_3_180731.png

hw_err_cnt = 4, sw_err_cnt = 6
hw accuracy = 98.666668%, sw accuracy = 98.000002%


やはり300個データを推論している。

最後に、curve_data_5000_5100.h だけを生かして、C シミュレーションを行った。結果を示す。
keras_curve_line_4_180731.png

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


やはり300個データを推論している。

3 つの推論で合計 900 回推論しているので、
ハードウェアつまり、固定小数点演算でのエラーが 13 + 4 + 27 = 44 個
ハードウェアの精度は、(900 - (13 + 4 + 27)) / 900 *100 ≒ 95.11 %

ソフトウェアつまり、浮動小数点演算でのエラーが 16 + 6 + 25 = 47 個
ソフトウェアの精度は、(900 - (16 + 6 + 25)) / 900 *100 ≒ 94.78 %

前回よりも精度は、出ている。
  1. 2018年07月31日 05:07 |
  2. TensorFlow, Keras
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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