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以下)の場合が多いので、ディープラーニング推論回路を実装するには、係数の数を減らす、データのビット数を減らすなどの工夫が必要になります。 |
最初のページへ
目次へ戻る
|