global average pooling 与average pooling的区别是什么?

在《Network in Network》中提到global average pooling 来替代全连接层。我个人的理解:如最后一个卷积层输出10个feature map,global average pooling是对10个feature map求平均值,输出一个feature map。而average pooling 是对每个feature map分别求平均,输出10个feature map。不知我的理解是否正确?
已邀请:

ruirui_ICT - 听大大们说,要“左手代码,右手公式”,喵~

赞同来自: 星空下的巫师 李扬 disheng 十点睡七点起 Evence

最近刚把NIN的论文又过了一遍,说说我的理解:我觉得global average pooling和average pooling本质上没有区别。
问题中问的“如最后一个卷积层输出10个feature map”,“而average pooling是对每个feature map分别求平均,输出10个feature map”,这个理解是没问题的,“global average pooling是对10个feature map求平均值,输出一个feature map”,这个理解就不太对了。论文里面有这么一句话


Instead of adding fully connected layers on top of the feature maps, we take the average of each feature map, and the resulting vector is fed directly into the softmax layer.


其实就是表示global average pooling是对每个feature map内部取平均,每个feature map变成一个值(因为kernel的大小设置成和feature map的相同),10个feature map就变成一个10维的向量,然后直接输入到softmax中。
另外也可以参考一下颜老师组在ILSVRC2014报告中的ppt(ppt的名字就叫“NIN,good”,嘎嘎嘎),里面有这么一个图,可以很明显看出来是对每个feature map内部取平均。
1.JPG

有兴趣还可以看看caffe中NIN的proto文件,global average pooling层使用的就是普通的pooling层,只是类型改成了AVE。
 
(针对最近大大们头疼的侵权问题,在这里弱弱的加一句:本内容为本人原创,仅授权给CaffeCN社区(caffecn.cn)使用,如需转载须注明转载来源。(⊙v⊙))

李扬 - 密码六个一

赞同来自: ruirui_ICT 佛仙魔

补充几句吧
global average pooling 与 average pooling 的差别就在 "global" 这一个字眼上。global 与 local 在字面上都是用来形容 pooling 窗口区域的。 local 是取 feature map 的一个子区域求平均值,然后滑动这个子区域; global 显然就是对整个 feature map 求平均值了。

因此,global average pooling 的最后输出结果仍然是 10 个 feature map,而不是一个,只不过每个 feature map 只剩下一个像素罢了。这个像素就是求得的平均值。
官方 prototxt 文件 里写了。网络进行到最后一个 average pooling 层的时候,feature map 就剩下了 10 个,每个大小是 8 * 8。顺其自然地作者就把 pooling 窗口设成了 8 个像素,意会为 global average pooling 。可见,global average pooling 就是窗口放大到整个 feature map 的 average pooling 。


 

shuokay

赞同来自: 十点睡七点起

global 的kernel大小等于feature map的大小啊

要回复问题请先登录注册