7-02 層間の画像メモリは4行ぶんあればよい!?

●層間のデータの受け渡しにはメモリが必要

 SSD物体認識の入力画素数は300×300あります(ここの左上)。1層目の入力は3ch、画素は8ビットなので、図7‐06では300 x 300 x 3ch x 8bit = 2.16Mb (270kB)のメモリを使ってカメラからのデータを受け取っています。


 また2層目は入力が64ch、画素は5ビットです。従って同図では300 x 300 x 64ch x 5bit = 28Mb (3.6MB)のメモリで1層目からのデータを受け取っています。


図7-06 フレームメモリがチャネル数ぶん・・・メモリ不足になる


●カーネルサイズが3×3・・・ということは・・・

 例えばこのFPGA(Cyclone V 5CGTD9)には
13.917Mb (1.74MB)のEmbedded Memoryがあります。FPGA内部メモリとしてはかなり大きいほうですが、図7‐06のような使い方をすると2層目で早くもメモリ容量が尽きてしまいます。

 ここで、本企画のSSDのカーネルサイズは3×3だったことを思い出しましょう。それを図7‐07のように横にずらしながら畳み込みを行います。さしあたりは3行ぶんのメモリがあれば十分ということに気が付きます。


図7-07 3行ぶんあればどうにかなりそう


●3+1で4ラインぶんあればよい

 本企画は「リアルタイム画像処理」を目指すので、「
書きながら読む」工夫が必要になります。従って実際は図7‐08のように1ライン増やして4ラインぶんの画像メモリを設けます。1層目は同図のように300 x 4 x 3ch x 8bit = 28.8kb (3.6kB)で済みます。


図7‐08 書き方(W)を追いかける読み方(R)

●書いていないバッファを読めば安全に読める

 1ラインぶん余分に設けることにより「書きながら読む」ことができます。例えばバッファ3を書いているとき、はバッファ0,1,2を読みます。図7‐09のように書き方(W)を追いかけるように、読み方(R)は書いていない3ラインを読みます。


図7‐09 1ライン書く間、書いていない3ラインを読む


次のページへ



目次へ戻る