8-07 vgg-14, 15層目のVHDL化(続き)

15層目はカーネルが1x1になる

 図8‐135にvgg-15層目のタイミングのイメージを示します。

 15層目の入力は1024ch、出力も1024chになります。ただしこの層はカーネルが
1x1になります。

 3x3カーネルと比べると係数の数が1/9になるのでそのぶん乗算の数が減ります。したがってこの層では
1つの乗算器で出力を128ch計算して並列度を減らします。


図8-135 vgg-15層目のタイミングのイメージ


●128ch×8並列なので出力1024ch

 図8‐135の上段はoutCh0,1,2,...127を計算するようすです。これら出力128chは1個の乗算器で「逐次的に」計算されます。したがって1画素の計算にかかる期間は10ns x 1024 x
128 = 1310.72usになります。
 1ライン19画素なので1310.72us x 19 =
24.90368mで1ライン計算しますが、同図右にあるように「休み期間」が2.74432msあるので計27.648msで1ライン、1画面19ラインなので27.648ms x 19 = 525.312msで1画面の計算が終わります。

 「outCh128 to outCh255」、「outCh256 to outCh383」、...「outCh896 to outCh1023」もそれぞれ1つの乗算器で計算されます。乗算器(ビットシフト型)が8個並列で128chづつ計算するので出力は1024chになります(入力も1024ch)。

●14層目の出力が15層目の入力になる

 14層目のシミュレーション結果relu.outの名前を変えてlay15.inとし、それが15層目の入力になります。図8‐136のようにRAM_X1_0〜1(入力バッファ、
2ラインぶん、カーネルが1x1なので)にlay15.inの内容が書き込まれます。

 conv_layer15は入力バッファからの画像を処理してRAM_X2_0〜1(出力バッファ、
2ラインぶん、次層もカーネルが1x1なので)に書き込みます。1ライン19画素なのでアドレスは32、出力1024chなのでデータ幅は8bit x 1024 = 8192bitになります(この層以降は1画素8ビットになる)。


図8-136 15層目のブロック図


次のページへ



目次へ戻る