今天看SPPNet论文时,看到“global pooling”一词,不是很明白是啥概念。上网查了一下定义,在StackOverflow
上找到了答案:
这里写图片描述

具体回答如下:
这里写图片描述

说白了,“global pooling”就是pooling的 滑窗size 和整张feature map的size一样大。这样,每个 W × H × C W\times H\times C W×H×C 的feature map输入就会被转化为 1 × 1 × C 1\times 1\times C 1×1×C 输出。因此,其实也 等同于每个位置权重都为 1 / ( W × H ) 1/(W\times H) 1/(W×H) 的 FC层操作

等同于输入一个tensor,输出一根vector。

“global pooling”在滑窗内的具体pooling方法可以是任意的,所以就会被细分为“global avg pooling”、“global max pooling”等。

由于传统的pooling太过粗暴,操作复杂,目前业界已经逐渐放弃了对pooling的使用。替代方案 如下:

  • 采用 Global Pooling 以简化计算;

  • 增大conv的 stride 以免去附加的pooling操作。

tf实现

由于输入tensor的shape为[n, h, w, c],那么直接对第1、2维(h、w)用tf.reduce_mean求均值即可:

net = tf.reduce_mean(net, [1, 2], name='global_pool', keep_dims=True)

[1] What does global pooling do?
[2] Global average Pooling
[3] How do I do global average pooling in TensorFlow?
[4] tf.reduce_mean实现global average pooling(全局均值池化)

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐