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層目のブロック図
次のページへ
目次へ戻る |