8-05 vgg-8, 9, 10層目のVHDL化

8層目は出力512chで64並列

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

 8層目の入力
は256chですが、出力が512chに増えます。入力は逐次処理、出力は64並列で計算します。

 すなわち
1つの乗算器で出力を8ch計算することになり、そうすれば同図の左にあるようにoutCh0,1,2,...7の1ラインが7.00416msで計算できます。前層は1ライン6.912msで計算していたので、それよりわずかに時間がかかります。これは前層でのプーリングが75→38と半端な値である(1/2より0.5多い)ことによります。
 それにより「休み期間」が発生し(同図の右のほう)あまり効率的ではありませんが、64並列で1画面518.4msで計算できます。


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


●8ch×64並列なので出力512ch

 図8‐83の上段はoutCh0,1,2,...7を計算するようすです。これら出力8chは1個の乗算器で「逐次的に」計算されます。したがって1画素の計算にかかる期間は90ns x 256 x
8 = 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画面の計算が終わります。(*1)

 「outCh8 to outCh15」、「outCh16 to outCh23」、...「outCh504 to outCh511」もそれぞれ1つの乗算器で計算されます。乗算器(ビットシフト型)が64個並列で8chづつ計算するので出力は512chになります(入力は256ch)。

(*1)実際は13.824ms x 38 = 525.312ms。若干オーバヘッドがある

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

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

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


図8-84 8層目のブロック図


次のページへ



目次へ戻る