7‐06 プーリングの回路とHDL

●26×26画素を13×13画素にするプーリング

 1層目にはなくて2層目にあるものに「
プーリング」があります。図7-50はReLUの出力で26×26画素あります。これらを同図のように2×2の範囲に仕切って、一番大きいものだけを取り出します。


図7-50 プーリング前。26×26画素

●単純に間引くのではなく、最大値をピックアップする

 プーリングの結果は図7‐51のようになり、画素が1/4に間引かれて13×13画素になります。



図7-51 プーリング後(2層目の出力Ch0)。13×13画素

●前のラインの画素を覚えておく必要がある

 プーリングでは「左右の画素」に加えて「上下の画素」も比較します。したがって「
ラインメモリ」が必要になります。

 ReLUの出力信号Relu0を図7‐52のようにラインメモリで1ライン26画素ぶん遅延した信号をRelu1とします。

図7‐52 プーリングにはラインメモリが必要

●さらにD型フリップフロップで遅延して比較

 Relu0、Relu1はそれぞれ図7-53のようにDF/F×2個に入力され、それらの出力が図7-50における2×2の格子内の画素にあたります。それらのうち最大のものを選択し、適当なタイミングでラッチしたものがプーリング回路の出力Pooloutになります。


図7‐53 2×2画素の最大値を取り出す回路(pooling_max.vhd)

●回路図をHDL化したものの一部を図7‐54に示す

 図7-52のバッファは
5ビットですが、2層目は出力32chあるので5x32=160ビット、アドレスはキリの良い32(0〜31)とします。

 図7‐53をHDL化したものはpooling_maxの中にあり(図7‐54)、それが
32chぶんインスタンス化されています。

 Relu0が遅延前、Relu1が遅延後でそれぞれ160ビットが32個に分けられてpooling_maxに入力されます(*1)。プーリング後の出力はpool_00〜31まで、それぞれ5ビットになります。


(*1)Relu0は5ビットづつbefdly_00〜31、Relu1は5ビットづつaftdly_00〜31に分けられる。


図7‐54 メモリ(図7‐52)とpooling_max(図7‐53)が32chぶんある (pooling_lay2.vhd)


●4層目にもプーリングがある

 プーリング回路は畳み込み2、4層目で使用しますが、その構成はほぼ同じになります(ラインメモリの長さなどが違うだけ)


最初のページへ


目次へ戻る