10-02 conf-4, 5, 6層目のVHDL化(続き)

●conf-6層目はカーネルが3x3

 図10-43は積和演算の部分、出力1チャネルの1画素を計算するのに90ns x 256 = 23040nsかかります(入力256チャネル、カーネルが3x3なので)。


図10-43 入力256チャネル、カーネル3x3なので23040ns(クロック100MHz)

●乗算器1個で動かす

 図10-44は一つの乗算器で出力84チャネルの1画素を計算するようす、23040ns x 128 = 2949.12usかかっています(84chだがキリの良い128)。1x1画素なので1ライン計算するのにに2949.12us x 1 = 2.94912msです。


図10-44 一つの乗算器で84chの出力を計算する

●1x1画素なので演算結果を1回書くだけ

 図10-45は出力を書き込む部分です。1x1画素なので同図のように1回書き込むだけ、データ幅は10bit x 84ch = 840bitになります。(*1)

(*1)1ラインの期間110.592ms x 1で演算して4ラインの期間110.592ms x 4休んで他の層と同期をとる。


図10-45 1画面で画素は1つだけ(チャネルは84ある)

●relu.outに出力が書かれている

 conf-6層目も出力はテキストファイルに落とされます(図10-46)。1×1画素なので1画面で1行、また出力は84チャネルなのでビット幅は
10bit x 84 = 840bit になります(この層は1画素が符号付き10ビットになる)。


図10-46 各画素10ビット、符号付きであることに注意

●バッチファイルでデータ並び替え

 上図のrelu.outは各行 10bit x 84 = 840bit ですが、84は21×4であり、21というのは種族(人、馬、自動車、バイクなど)の数、4というのはBBOXの形状の数です。このデータの並びをVBAでこのように21×6列(この層は
4列)になっているのを21列に並び替えます。

@EXCELファイル(下のリンク)を開く。
AEXCELファイルの場所にvbaoutputフォルダを作成する。
Bvbaoutputフォルダにrelu.outをコピーする。
CVBAのModule20, 21を続けて実行する。
Dvbaoutputフォルダにsimsort.txtが作成される。
Esimsort.txtとPythonの結果(下のリンク)を比較する。
F下図のようにピタリ一致することを確認する。


図10‐47 どちらもカンマ区切りなのでファイル比較ソフトで比べるとよい

●conf-6層目のファイル類はここ

プロジェクトのアーカイブ
EXCEL+VBA
relu.out
Pythonの結果

●これでconf層は終わり。これらの結果をもって判定する

 conf層は2〜6の値は次のような意味合いを持ちます。

    表10‐01 conf-2は小さい物体、conf-6は大きい物体の認識をつかさどる
出力Chの数 画素数(BBOX数) BBOXの形状数 物体の大きさ
conf-2 126 19x19 6 最小
conf-3 126 10x10 6
conf-4 126 5x5 6
conf-5 84 3x3 4
conf-6 84 1x1 4 最大

 conf層の結果は判定回路(ここの左下の「閾値と比較」ブロック)に入力され、SSD物体認識の結果が得られます。

●判定はマイコンで十分?

 conf層は2〜6の結果を基に判定を行うが、それに伴う演算量は多くはないため、マイコン(FPGA内部のソフトマクロマイコン)で十分かもしれません(判定はハード化するまでもない?)。


最初のページへ



目次へ戻る