8-04 vgg-5, 6, 7層目のVHDL化(続き)

7層目は出力256chで64並列

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

 7層目の入力は
256chになります(出力は前層と同じ256ch)。入力は逐次処理、出力は64並列とします。

 すなわち
1つの乗算器で出力を4ch計算することになり、そうすれば同図の左にあるようにoutCh0,1,2,3の1ラインが6.912msで計算でき、1画面が518.4msで計算できます。


図8-76 vgg-7層目のタイミングのイメージ


●4ch×64並列なので出力256ch

 図8‐76の上段はoutCh0,1,2,3を計算するようすです。これら出力4chは1個の乗算器で「逐次的に」計算されます。したがって1画素の計算にかかる期間は90ns x 256 x
4 = 92.16usになります。1ライン75画素なので92.16us x 75 = 6.912msで1ラインの計算、1画面75ラインなので6.912ms x 75 = 518.4msで1画面の計算が終わります。

 「outCh4 to outCh7」、「outCh8 to outCh11」、...「outCh252 to outCh255」もそれぞれ1つの乗算器で計算されます。乗算器(ビットシフト型)が64個並列で4chづつ計算するので出力は256chになります(入力も256ch)。


●横方向、縦方向に間引くプーリングがある

 7層目はプーリングがあり(ここの3番目の"P")、75×75画素が38×38画素になります。それゆえ1画素を出力する周期は92.16us x 2 = 184.32us、1ライン出力する周期は6.912ms x 2 = 13.824msになります(*1)。そして1画面出力する周期は13.824ms x 37.5 = 518.4msになります。

(*1)図8‐76の右下参照。有効・無効ラインを繰り返すので×2。

●6層目の出力が7層目の入力になる

 6層目のシミュレーション結果relu.outの名前を変えてlay7.inとし、それが7層目の入力になります。図8‐77のようにRAM_X1_0〜3(入力バッファ、4ラインぶん)にlay7.inの内容が書き込まれます。

 conv_layer7は入力バッファからの画像を処理してRAM_X2_0〜3(出力バッファ、4ラインぶん)に書き込みます。1ライン38画素なのでアドレスは64、出力256chなのでデータ幅は5bit x 256 = 1280bitになります。


図8-77 7層目のブロック図


次のページへ



目次へ戻る