8-01 vgg-1層目のVHDL化

●回路規模削減のための逐次処理

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

 1層目の入力は3ch、出力は64chなので最大限並列化するには乗算器が3x64=192個必要になります(ここ参照)。しかしそれではFPGAのリソースが足りなくなるので、図8-01の右下にあるように、入力3chの読み出しと計算は逐次処理とします。

 それに対し、
出力64chの計算と書き込みは並列処理としているので、この層に使う乗算器は1x64=64個となります。


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


●入力は逐次的、出力は並列的に処理する

 図8‐01の左上、「outCh0の1画素」は出力チャネル0の1画素を計算するようすです。

 
入力は3chありそれらの読出しは逐次的に行います。係数も3chぶんあり、カーネルは3x3=9なので、9x3個の係数(このEXCELのA列の27個)が逐次読みだされ、入力画像と乗算されます。

 クロック周期を10nsとすると10ns x 9 x 3ch = 270nsで終わるのですが、次層以降とタイミングを合わせるために10x 9 x 61 = 5490nsの「休み期間」を設け、計5760nsで1画素計算します。

 その隣、「outCh1の1画素」は出力チャネル1、その隣は出力チャネル2、最後は出力チャネル63の1画素の計算になります。
出力の計算は並列なので、これらは64個の乗算器を使って同時に計算されます(同図の左下)。

●518.4ms毎にSSD物体認識

 同図左下のように出力64チャネルの「1ライン」は並列に計算されます。1ラインは300画素からなるので、300 x 5.76us = 1.728msで1ライン計算します。

 さらに1フレームは300ラインあるので、300 x 1.728ms = 518.4msで1画面の計算が終わります。このSSD物体認識は多層にわたるのですが、全てこのフレームレートで動作させます。そして各層パイプラインで並列動作させるので、
518.4msのスループットで物体認識することになります(この予想より少し速くなる)。

●回路の全体像

 本企画ではこのFPGAボードにSSD物体認識を実装する予定です。CMOSカメラからの動画は図8‐02のようにラインメモリ、フレームメモリで同期がとられ、SSD物体認識回路に入力されます。

 認識回路はにはvgg-1〜15、extras-1〜8、conf-2〜6、計28層ものレイヤが存在します。それらはパイプラインで並列に動作し、自動車や人などを認識し、同図のように推論結果をVGAに映し出します。


 これから最初の層、vgg-1層目のVHDLについて説明します。


図8-02 回路の全体像


次のページへ



目次へ戻る