”
AXI4-Stream インターフェースの畳み込みニューラルネットワーク3(シミュレーション)”の続き。
(2018/04/22 : 修正、max_pooling.cpp のコードにバグがあったのでバグフィックスし、精度に影響を与えたため修正した)(2018/04/26 : 修正、バグフィックス)前回は、AXI4-Stream インターフェースの畳み込みニューラルネットワークの C シミュレーションと C/RTL 協調シミュレーションを行った。今回は、ビット幅を変更したときの精度とリソース使用量の違いを見ていこう。
最初に、Linux の Vivado HLS 2017.3 で合成していなかったので、合成し、その結果を示す。


Latency は 9627 クロック、Interval は 8427 クロックで、Windows 10 上のVivado HLS 2017.4 と同じだ。
リソース使用量は、BRAM_18K とDSP48E は同じで、FF とLUT が少し多い。
次に、”
カーブ、直線用白線間走行用畳み込みニューラルネットワーク11(Vivado HLS でCNN を実装)”では、畳み込み層の演算を 13 ビット長、全結合層の演算を 16 ビット長で行い、出力も 16 ビット長なので、これに合わせてみることにした。なお、新たに all_layers2 プロジェクトを新規作成した。

最初に、
#include "curve_data_0_100.h"
だけを生かしてC シミュレーションを行った。

エラーの数は、ハードウェア化関数が 17 個、float のソフトウェアが 20 個だった。
hw_err_cnt = 17 sw_err_cnt = 20
エラーの数は、ハードウェア化関数が 16 個、float のソフトウェアが 20 個だった。
hw_err_cnt = 10 sw_err_cnt = 20
#include "curve_data_2500_2600.h"
を生かして、C シミュレーションを行った。

エラーの数は、ハードウェア化関数が 33 個、float のソフトウェアが 11 個だった。
hw_err_cnt = 33 sw_err_cnt = 11
エラーの数は、ハードウェア化関数が 15 個、float のソフトウェアが 11 個だった。
hw_err_cnt = 16 sw_err_cnt = 11
#include "curve_data_5000_5100.h"
を生かして、C シミュレーションを行った。

エラーの数は、ハードウェア化関数が 29 個、float のソフトウェアが 15 個だった。
hw_err_cnt = 29 sw_err_cnt = 15
エラーの数は、ハードウェア化関数が 37 個、float のソフトウェアが 15 個だった。
hw_err_cnt = 42 sw_err_cnt = 15
ハードウェア化関数の推論の精度は (900 - (10 + 16 + 42)) / 900 ≒ 92.4 % だった。
前回と同じだ。前回よりも少し(0.6 %)下がった。
ソフトウェアでの推論の精度は、(900 - (20 + 11 + 15)) / 900 ≒ 94.9 % だった。
C コードの合成を行った。結果を示す。


Latency は 9627 クロックで、Interval は 8427 クロックだった。Interval も Latency も同じだ。
リソース使用量は、BRAM_18K とDSP48E は同じだが、FF とLUT は多少少なくなっている。
ビット幅を変更しても、顕著な変化は無い様だ。
- 2018年03月18日 06:23 |
- DNN
-
| トラックバック:0
-
| コメント:0