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層は終わり。これらの結果をもって判定する
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内部のソフトマクロマイコン)で十分かもしれません(判定はハード化するまでもない?)。 |
最初のページへ
目次へ戻る |