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化したことを思い出そう
次のページへ
目次へ戻る
|