deeplearning-cv-notes
deeplearning-cv-notes copied to clipboard
卷积、反卷积、空洞卷积、池化、特征金字塔等等
什么是全局平均池化 Global Average Pooling
- 【1】Global Average Pooling全局平均池化的一点理解
- 【2】what is global average pooling ? 全局平均池化层
- 【3】深度学习: global pooling (全局池化)
【1】:
很长一段时间以来,全连接网络一直是CNN分类网络的标配结构。一般在全连接后会有激活函数来做分类,假设这个激活函数是一个多分类softmax,那么全连接网络的作用就是将最后一层卷积得到的feature map stretch成向量,对这个向量做乘法,最终降低其维度,然后输入到softmax层中得到对应的每个类别的得分。
全连接层如此的重要,以至于全连接层过多的参数重要到会造成过拟合,所以也会有一些方法专门用来解决过拟合,比如dropout。
在NIN(Network in Network) 这篇论文中提出了全局平均池化的概念,究竟他和之前的全连接层有什么区别呢?
全连接存在的问题:参数量过大,降低了训练的速度,且很容易过拟合
全连接层将卷积层展开成向量之后不还是要针对每个feature map进行分类,而GAP的思路就是将上述两个过程合二为一,一起做了。如图所示:
由此就可以比较直观地说明了。这两者合二为一的过程我们可以探索到GAP的真正意义是:对整个网路在结构上做正则化防止过拟合。其直接剔除了全连接层中黑箱的特征,直接赋予了每个channel实际的内别意义。
实践证明其效果还是比较可观的,同时GAP可以实现任意图像大小的输入。但是值得我们注意的是,使用gap可能会造成收敛速度减慢。
【2】 主要是用来解决全连接的问题,其主要是是将最后一层的特征图进行整张图的一个均值池化,形成一个特征点,将这些特征点组成最后的特征向量 进行softmax中进行计算。举个栗子,假如,最后的一层的数据是1000个224x224的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,这样1000个特征图就会输出1000个数据点,将这些数据点组成一个1000维的向量的,就可以送入到softmax的分类中计算了。
【3】
说白了,“global pooling”就是pooling的 滑窗size 和整张feature map的size一样大。这样,每个 W×H×CW×H×C 的feature map输入就会被转化为 1×1×C1×1×C 输出。因此,其实也等同于每个位置权重都为 1/(W×H)1/(W×H) 的FC层操作。
等同于输入一个tensor,输出一根vector。
“global pooling”在滑窗内的具体pooling方法可以是任意的,所以就会被细分为“global avg pooling”、“global max pooling”等。