8-05 vgg-8, 9, 10層目のVHDL化(続き)

9層目は出力512chで128並列

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

 9層目の入力
は512chに増えます(出力は512ch)。入力は逐次処理、出力は128並列で計算します。

 すなわち
1つの乗算器で出力を4ch計算することになり、そうすれば同図の左にあるようにoutCh0,1,2,3の1ラインが7.00416msで計算できます。前層と同様に「休み期間」が発生し、あまり効率的ではありませんが、128並列で1画面518.4msで計算します。


図8-89 vgg-9層目のタイミングのイメージ


●4ch×128並列なので出力512ch

 図8‐89の上段はoutCh0,1,2,3を計算するようすです。これら出力4chは1個の乗算器で「逐次的に」計算されます。したがって1画素の計算にかかる期間は90ns x 512 x
4 = 184.32usになります。
 1ライン38画素なので184.32us x 38 =
7.00416msで1ライン計算しますが、同図右にあるように「休み期間」が6.81984msあるので計13.824msで1ライン、1画面38ラインなので13.824ms x 37.5 = 518.4msで1画面の計算が終わります。

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

●8層目の出力が9層目の入力になる

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

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


図8-90 9層目のブロック図


次のページへ



目次へ戻る