6‐01 畳み込み1層目は入力3ch、出力16ch

●乗算器は16個で演算

 図6‐01は1層目の演算イメージです。カラー動画なので入力はRGBの3ch、それぞれ3つのカーネルW0〜8、W9〜17、W18〜26と畳込まれますが、その積和は一つの乗算器、累積器で行われます(実際は3ch+ダミー1chで4chになる)。

 出力は16chあり、それぞれの出力用にカーネルが16組あります。乗算器、累積器もそれぞれ16組あり、同図のように
16並列で演算が行われます。

図6-01 1層目は乗算器16個必要

1ライン、1画面の演算にかかる時間

 入力画像は30x30なのでカーネルの動く範囲は28x28になります。したがって横一行にかかるサイクル数は 9 x 28 x 3chですが、3chでは半端なので、ダミーchが一つあると考えて 9 x 28 x
4ch = 1008とします(10.08us @ Clock 100MHz)。
 出力1枚28行にかかるサイクル数は 1008 x 28 = 28224、出力は並列で演算されるので、16枚にかかるサイクル数は同じ28224になります(
282.24us @ Clock 100MHz)。

●パイプラインなのでスループットに間に合わせる

 ここにあるようにCNNの1ブロックは
320usの周期でCNN推論回路の1層目に入力されます。上述のように282.24usで処理するので間に合っていることが分かります(*1)。

(*1)入力の320usと合わせる必要があるので、1層目は演算に282.24usかけるが出力は320us毎になる(休み時間が入る)。

●係数ROMは手作業でHDL化するのは大変なので・・・

 畳み込み層なのでカーネルが3x3、入力3ch、出力16chなので、係数の数は 9 x 3 x 16 = 432個になり、それらは図6‐02のようにEXCEL(TS_layer1.xlsm)に貼り付けてあります。ハードウェアにおいてこれらはROMから読み出されますが、ROMのHDLファイルはVBAを使って
自動生成させます。

図6‐02 PythonをEXCEL化したことを思い出そう


次のページへ


目次へ戻る