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層目で使用しますが、その構成はほぼ同じになります(ラインメモリの長さなどが違うだけ)
。
最初のページへ
目次へ戻る