8‐01 畳み込み3層目は入力32ch、出力64ch
●3層目は乗算器128個で演算
図8‐01は3層目の演算イメージです。入力32チャネルを16chづつ2組に分けます(ここ参照)。そしてCh0〜15を1個の積和演算器でまかないます。Ch16〜31も1個でまかない、計2個の積和演算器で出力1チャネルを計算させます。
出力は64チャネルあるので積和演算器は合計2×64=128個になり、128並列で演算されます。畳み込みの結果、出力画像は一回り小さくなり11×11画素になります。 |
図8-01 3層目は乗算器が128個必要になる → ビットシフトによる乗算、係数は4種類
●乗算器やROMの節約
3層目は乗算器が128個必要になるので、この層も「ビットシフトによる乗算」を行います。また重み係数は4種類(+64, +16, -16, -64)に集約します。これによりROMのビット数を削減することができます。
●1ライン、1画面の演算にかかる時間
入力画像は13×13なのでカーネル(3x3)の動く範囲は11×11になります。したがって横一行にかかるサイクル数は
9 x 11 x 16ch = 1584です(*1)。
(*1)一つの乗算器で入力16chをまかなう。それらは逐次的に処理されるのでx16chのサイクルがかかる
出力1枚11行にかかるサイクル数は 1584x 11 = 17424、出力は並列で演算されるので、64枚にかかるサイクル数は同じ17424になります。クロック100MHzなら、1行に15.84us、1枚に174.24usかかります。 |
●パイプラインなのでスループットに間に合わせる
2層目が1ライン出力するのに20.16usでした(プーリングにより10.08us x 2になる)。3層目が1ライン出力するのに15.84usなので、パイプライン的に間に合っていることになります。また、ここにあるようにCNNの1ブロックは320usの周期でCNN推論回路に入力されます。上述のように174.24usで処理するので、これも間に合っています(*2)。
(*2)2層目と同期をとるため、3層目は1ライン15.84us + 休み時間 = 20.16us、1ブロック174.24us + 休み時間 = 320usで出力する。 |
●係数ROMは手作業でHDL化するのは大変なので・・・
3層目は入力32ch、出力64chなので係数の数は9×32×64= 18,432個になり、2層目より4倍増えます。これらはROMのデータになりますが、そのHDLファイルはももちろんVBAで自動生成させます。 |
次のページへ
目次へ戻る
|