5‐03 各層の係数ROMを考える

●FPGA内のROMの消費量を考える

 DE1-SoC搭載のFPGAは約4Mbit (500kByte)の内部メモリ(SRAM)を有していますが、それらは「
ROM」としても使用でき、各層の係数はROMに格納されます(*1)。

(*1)正確には「初期値付きのSRAM」になる。


●1層目(畳み込み層)

 入力 3ch、出力 16ch、(カーネルが3x3=9なので)係数 9x3x16 = 27x16 = 432個です。
 係数はそれぞれ
9ビットなので 9bit x 432 = 3.888kb (486B) になります。

図5-14 カーネルが3x3なので9×3行×16列。係数は符号付9ビット

●2層目(畳み込み層)

 入力 16ch、出力 32ch、係数 9x16x32 = 144x32 = 4608個です。
 係数はそれぞれ
3ビットなので 3bit x 4608 = 13.824kb (1.728kB) になります。

図5‐15 2層目の係数は8種類しかないので3ビットで済む

●3層目(畳み込み層)

 入力 32ch、出力 64ch、係数 9x32x64 = 288x64 = 18432個です。
 係数はそれぞれ
2ビットなので 2bit x 18432 = 36.864kb (4.608kB) になります。


●4層目(畳み込み層)

 入力 64ch、出力 128ch、係数 9x64x128 = 576x128 = 73728個です。
 係数はそれぞれ2ビットなので 2bit x 73728 = 147.456kb (18.432kB) になります。

●5層目(全結合層)

 入力 1ch(2048個)、出力 1ch(128個)、係数 2048x128 = 262144個です。
 係数はそれぞれ2ビットなので 2bit x 262144 = 524.288kb (65.536kB) になります。

図5‐16 EXCELを見ると係数のボリューム感が分かる

●6層目(全結合層)

 入力 1ch(128個)、出力 1ch(43個)、係数 128x43 = 5504個です。
 係数はそれぞれ
9ビットなので 9bit x 5504 = 49.536kb (6.192kB) になります。


●係数の数がFPGAのリソースを圧迫するので注意

 
5層目が飛び抜けて係数の数が多いことが分かります。したがって5層目は出力の要素数を最小限の128個としました(Pythonの時点で512→128に変更)。

 FPGA内部メモリは数Mbit以下(1MByte以下)の場合が多いので、ディープラーニング推論回路を実装するには、係数の数を減らす、データのビット数を減らすなどの工夫が必要になります。


最初のページへ


目次へ戻る