Max Pooling和 Average Pooling的区别,使用场景分别是什么?

  池化操作时在卷积神经网络中经常采用过的一个基本操作,一般在卷积层后面都会接一个池化操作,但是近些年比较主流的ImageNet上的分类算法模型都是使用的max-pooling,很少使用average-pooling,这对我们平时设计模型时确实有比较重要的参考作用,但是原因在哪里呢?

       pooling作为一个对特征的操作,应该看具体任务。有论文提到,低层的网络对细节特征的响应更高,那么随着对特征的不断处理,高层的网络对抽象特征有更好的响应。pooling作为对特征的处理操作,也应该考虑,pooling前的数据是什么数据,数据代表了什么意义,数据的相关性是怎么样的。假设区分由不同点集构成的“A”和"P",这两个数据集中的相临数据间的位置相关性不大(从NN的角度看,当然从图形学提取特征就另说了),那么我觉得,你可以用一个平均值的pooling来作为一个特征提取的手段。而如果通过一个卷积核处理后的数据里面的某个信息是很有效的,譬如说其中可能出现很大的值,而这个值对结果影响很大,那么你可以用max的pooling

 pooling的主要作用

(1)首要作用,下采样(downsamping),降维、去除冗余信息。

     同时增大了感受野,保留feature map的特征信息,降低参数量

(2)实现非线性,在一定程度上能防止过拟合的发生

(3)可以实现特征不变性(feature invariant)

     其中不变形性包括,平移不变性、旋转不变性和尺度不变性。池化操作操作使模型更关注是否存在某些特征而不是特征具体的位置。可看作是一种很强的先验,使特征学习包含某种程度自由度,能容忍一些特征微小的位移

通常来讲,max-pooling的效果更好,虽然max-pooling和average-pooling都对数据做了下采样,但是max-pooling感觉更像是做了特征选择,选出了分类辨识度更好的特征,提供了非线性这就类似于nms(非极大抑制),一方面能抑制噪声,另一方面能提升特征图在区域内的显著性(筛选出的极大值)。

根据相关理论,特征提取的误差主要来自两个方面:

  • (1)邻域大小受限造成的估计值方差增大;
  • (2)卷积层参数误差造成估计均值的偏移。

       一般来说,average-pooling能减小第一种误差,更多的保留图像的背景信息,max-pooling能减小第二种误差,更多的保留纹理信息。

  • 最大池化保留了纹理特征

  • 平均池化保留整体的数据特征

  • 全局平均池化有定位的作用(看知乎)

      average-pooling更强调对整体特征信息进行一层下采样,在减少参数维度的贡献上更大一点,更多的体现在信息的完整传递这个维度上,在一个很大很有代表性的模型中,比如说DenseNet中的模块之间的连接大多采用average-pooling,在减少维度的同时,更有利信息传递到下一个模块进行特征提取。

但是average-pooling在全局平均池化(global average pooling)操作中应用也比较广,在ResNet和Inception结构中最后一层都使用了平均池化。有的时候在模型接近分类器的末端使用全局平均池化还可以代替Flatten操作,使输入数据变成一维向量。

max-pooling和average-pooling的使用性能对于我们设计卷积网络还是很有用的,虽然池化操作对于整体精度提升效果也不大,但是在减参,控制过拟合以及提高模型性能,节约计算力上的作用还是很明显的,所以池化操作时卷积设计上不可缺少的一个操作。

总结1:

最大池化可以提取特征纹理, 最大池化提取边缘等“最重要”的特征

平均池化可以保留背景信息,平均池化提取的特征更加smoothly

当特征map中的信息都具有一定贡献的时候使用AvgPooling,例如图像分割中常用global avgpool来获取全局上下文关系,再比如网络走到比较深的地方,这个时候特征图的H W都比较小,包含的语义信息较多,这个时候再使用MaxPooling就不太合适了, 是因为网络深层的高级语义信息一般来说都能帮助分类器分类。典型的如ResNet在输入全连接层之前利用Kernel Size=7的AvgPooling来降维。反之为了减少无用信息的影响时用maxpool,比如网络浅层常常见到maxpool,因为开始几层对图像而言包含较多的无关信息。另外avgpool与maxpool输出值会有不同的幅度区间,有些时候会遇到maxpool输出值幅度波动大,此时可以加一些归一化操作。二者的具体使用场景只有在具体任务上观察,实际效果炼丹后才知道。

平均池有时不能提取好的特征,算出平均因为它将全部计入并计值,这对于对象检测类型任务可能不好用但使用平均池化的一个动机是每个空间位置具有用于期望特征的检测器,并且通过平均每个空间位置,其行为类似于平均输入图像的不同平移的预测(有点像数据增加)。Resnet不是采用传统的完全连通层进行CNN分类,而是直接从最后一个mlp转换层输出特征图的空间平均值,作为通过全局平均合并层的类别置信度,然后将得到的矢量输入到 softmax层。相比之下,Global average更有意义且可解释,因为它强制实现了feature和类别之间的对应关系,这可以通过使用网络的更强大的本地建模来实现。此外,完全连接的层易于过拟合并且严重依赖于 dropout 正则化,而全局平均池化本身就是起到了正则化作用,其本身防止整体结构的过拟合

总结2:

  • 通常来讲,max-pooling的效果更好,虽然max-pooling和average-pooling都对数据做了下采样,但是max-pooling感觉更像是做了特征选择,选出了分类辨识度更好的特征,提供了非线性。 pooling的主要作用一方面是去掉冗余信息,一方面要保留feature map的特征信息,在分类问题中,我们需要知道的是这张图像有什么object,而不大关心这个object位置在哪,在这种情况下显然max pooling比average pooling更合适。在网络比较深的地方,特征已经稀疏了,从一块区域里选出最大的,比起这片区域的平均值来,更能把稀疏的特征传递下去。

  • average-pooling更强调对整体特征信息进行一层下采样,在减少参数维度的贡献上更大一点,更多的体现在信息的完整传递这个维度上,在一个很大很有代表性的模型中,比如说DenseNet中的模块之间的连接大多采用average-pooling,在减少维度的同时,更有利信息传递到下一个模块进行特征提取。

  • average-pooling在全局平均池化操作中应用也比较广,在ResNet和Inception结构中最后一层都使用了平均池化。有的时候在模型接近分类器的末端使用全局平均池化还可以代替Flatten操作,使输入数据变成一维向量。

为什么用卷积替代池化

avg-pooling就是一般的平均滤波卷积操作,而max-pooling操作引入了非线性,可以用stride=2的CNN+RELU替代,性能基本能够保持一致,甚至稍好。已经有最新的一些网络结构去掉了pooling层用步长为2的卷积层代替。那么我们看看卷积是否可以实现代替。

所以我们的结论是什么呢?就是卷积+RELU可以很好地代替池化。当然这是这也是指在一定情况下

参考:

用于目标定位的全局平均池化 - 知乎

平均池化和最大池化分别适用于什么场景呢? - 知乎

为什么ResNet最后有一个average pooling? - 知乎

猜你喜欢

转载自blog.csdn.net/thequitesunshine007/article/details/128790762