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。不知我的理解是否正确?
3 个回复
ruirui_ICT - 听大大们说,要“左手代码,右手公式”,喵~
赞同来自: 星空下的巫师 、李扬 、disheng 、十点睡七点起 、Evence
问题中问的“如最后一个卷积层输出10个feature map”,“而average pooling是对每个feature map分别求平均,输出10个feature map”,这个理解是没问题的,“global average pooling是对10个feature map求平均值,输出一个feature map”,这个理解就不太对了。论文里面有这么一句话
其实就是表示global average pooling是对每个feature map内部取平均,每个feature map变成一个值(因为kernel的大小设置成和feature map的相同),10个feature map就变成一个10维的向量,然后直接输入到softmax中。
另外也可以参考一下颜老师组在ILSVRC2014报告中的ppt(ppt的名字就叫“NIN,good”,嘎嘎嘎),里面有这么一个图,可以很明显看出来是对每个feature map内部取平均。
有兴趣还可以看看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
赞同来自: 十点睡七点起