DeepLearning
GAP
GlobalAveragePooling

Global Average Pooling(GAP)を理解してみる

Deep Learningのテクニックの一つであるGlobal Average Pooling(GAP)を、なるべくわかりやすいように(自分がw)解説してみます。

基本となるネットワークモデル

今回はVGG-16をベースに考えてみます。
vgg16.png

ポイントとなるのは、最後の全結合の部分です。

現状は、max poolingにより、7x7x512のデータができています。
これを1x1x4,096に全結合してますので、25,088×4,096=102,760,448の重みパラメータが存在しています。
image1.png

Global Average Poolingとは

各チャンネル(面)の画素平均を求め、それをまとめます。
そうすると、重みパラメータは512で済みます。
image2.png

評価

論文(pdf)によると、識別率に問題はない模様です。
(反対に良いぐらい!)
image3.png

使用するメモリ量は少なく、識別率もよいなんて、いいことづくめですね!

おまけ

このGAPを利用した物体位置の検出がClass Activation Mapping(CAM)になります。
この辺りは

に書きましたので、参考にしていただければと思います。