8-05 vgg-8, 9, 10層目のVHDL化(続き)
●10層目は出力512chで128並列
図8‐95にvgg-10層目のタイミングのイメージを示します。
10層目の入力は512ch、出力も512chになります。入力は逐次処理、出力は128並列で計算します。
すなわち1つの乗算器で出力を4ch計算することになり、そうすれば同図の左にあるようにoutCh0,1,2,3の1ラインが7.00416msで計算できます。 |
図8-95 vgg-10層目のタイミングのイメージ
●4ch×128並列なので出力512ch
図8‐95の上段は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ライン、更にプーリングがあるのでその倍の27.648msで1ラインぶん出力されます。1画面19ラインなので27.648ms
x 37.5 / 2 = 518.4msで1画面の計算が終わります。
「outCh4 to outCh7」、「outCh8 to outCh11」、...「outCh508 to outCh511」もそれぞれ1つの乗算器で計算されます。乗算器(ビットシフト型)が128個並列で4chづつ計算するので出力は512chになります(入力も512ch)。
この層はプーリングがあるので画素数は19×19になります。 |
●9層目の出力が10層目の入力になる
9層目のシミュレーション結果relu.outの名前を変えてlay10.inとし、それが10層目の入力になります。図8‐96のようにRAM_X1_0〜3(入力バッファ、4ラインぶん)にlay10.inの内容が書き込まれます。
conv_layer10は入力バッファからの画像を処理してRAM_X2_0〜3(出力バッファ、4ラインぶん)に書き込みます。1ライン19画素なのでアドレスは32、出力512chなのでデータ幅は5bit
x 512 = 2560bitになります。 |
図8-96 10層目のブロック図
次のページへ
目次へ戻る |