深入理解池化

深入理解池化

1. 什么是池化

池化 (Pooling) 用来降低卷积神经网络(CNN)或循环神经网络(RNN)中的特征图(Feature Map)的维度。在卷积神经网络中,池化操作通常紧跟在卷积操作之后,用于降低特征图的空间大小

池化操作的基本思想是将特征图划分为若干个子区域(一般为矩形),并对每个子区域进行统计汇总。池化操作的方式可以有很多种,比如最大池化(Max Pooling)、平均池化(Average Pooling)等。其中,最大池化操作会选取每个子区域内的最大值作为输出,而平均池化操作则会计算每个子区域内的平均值作为输出。

2. 池化的作用

 通过池化操作,可以:

  1. 降低特征图的维度,减少网络中参数的数量,避免过拟合现象的发生.
  2. 提高模型的计算速度和运行效率

3. 池化核大小

 池化窗口的大小,在PyTorch里池化核大小可以是一个整数或者一个元组,例如 kernel_size=2 或者 kernel_size=(2, 3)。

  • 如果是一个整数,则表示高和宽方向上的池化窗口大小相同, 或者,表示一维数据的池化;
  • 如果是一个元组,则第一个元素表示高方向上的池化窗口大小,第二个元素表示宽方向上的池化窗口大小。

4. 步幅大小

用于指定池化窗口在高和宽方向上的步幅大小,可以是一个整数或者一个元组,例如 stride=2 或者 stride=(2, 3)。

  • 如果是一个整数,则表示高和宽方向上的步幅大小相同, 或者,表示一维数据的步幅
  • 如果是一个元组,则第一个元素表示高方向上的步幅大小,第二个元素表示宽方向上的步幅大小。

5. 填充

池化层的填充(padding)可以控制池化操作在特征图边缘的行为,使得池化后的输出特征图与输入特征图大小相同或相近。

在池化操作时,如果输入特征图的尺寸不能被池化窗口的大小整除,那么最后一列或者最后一行的部分像素就无法被包含在池化窗口中进行池化,因此池化后的输出特征图尺寸会减小。

通过在输入特征图的边缘添加填充,可以使得池化操作在边缘像素处进行池化,避免了信息的丢失,并且保持了输出特征图的大小与输入特征图相同或相近。同时,填充也可以增加模型的稳定性,减少过拟合的风险。

需要注意的是,池化层的填充和卷积层的填充有所不同:

  • 池化层的填充通常是指在输入特征图的边缘添加0值像素;
  • 卷积层的填充是指在输入特征图的边缘添加0值像素或者复制边缘像素。

PyTorch里的填充大小可以是一个整数或者一个元组,例如 padding=1 或者 padding=(1, 2)。

  • 如果是一个整数,则表示在高和宽方向上的填充大小相同;
  • 如果是一个元组,则第一个元素表示高方向上的填充大小,第二个元素表示宽方向上的填充大小。默认为 0,表示不进行填充。

https://baijiahao.baidu.com/s?id=1760489030648263441&wfr=spider&for=pc

三、PyTorch中的池化函数 

PyTorch中有多个池化函数,最常用的是: torch.nn.MaxPool2d,用于最大池化操作:

MaxPool2d参数

    • kernel_size:池化核大小;
    • stride:步幅大小;
    • padding:填充大小;
    • dilation:膨胀系数,用于指定池化核中各个元素之间的跨度,可以是一个整数或者一个元组,例如 dilation=2 或者 dilation=(2, 3)。如果是一个整数,则表示高和宽方向上的膨胀系数相同;如果是一个元组,则第一个元素表示高方向上的膨胀系数,第二个元素表示宽方向上的膨胀系数。默认为 1,表示不进行膨胀操作。
    • ceil_mode:是否使用 ceil 模式计算输出大小,如果设置为 True,则使用 ceil 模式计算输出大小;如果设置为 False,则使用 floor 模式计算输出大小。默认为 False。
    • return_indices:是否返回最大值的索引,如果设置为 True,则在输出张量中同时返回最大值的索引;如果设置为 False,则只返回最大值。默认为 False。
    • return_inverse:是否返回逆序操作,如果设置为 True,则在输出张量中同时返回逆序操作所需的索引;如果设置为 False,则不返回逆序操作所需的索引。默认为 False。

 

在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)

因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)来代表这个区域的特征。

在提取信息的时候,在池化的时候,如果取区域均值(mean-pooling),往往能保留整体数据的特征,能凸出背景的信息,而如果取区域最大值(max-pooling),则能更好保留纹理上的特征

https://blog.csdn.net/woxincd/article/details/85199928

之所以这么做的原因,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样
之所以能这么做,是因为即使减少了许多数据,特征的统计属性仍能够描述图像,而且由于降低了数据维度,有效地避免了过拟合
在实际应用中,池化根据下采样的方法,分为最大值下采样(Max-Pooling)与平均值下采样(Mean-Pooling)。
原文链接:https://blog.csdn.net/xdl229/article/details/106401888

池化的意义在于特征降维,池化技术大大降低了对于计算资源的损耗,除此以外还有降低模型过拟合的优点。池化的思想来源于图像特征聚合统计,通俗理解就是池化虽然会使得图像变得模糊但不影响图像的辨认跟位置判断;池化还有一个优点就是平移不变性,即如果物体在图像中发生一个较小的平移(不超过感受野),那么这样的位移并不会影像池化的效果,从而不会对模型的特征图提取发生影响。

常用的池化方式有3种:最大池化(max pooling)、均值池化(mean pooling)和全局最大池化。

a) 最大池化计算pooling窗口内的最大值,并将这个最大值作为该位置的值;

b) 平均池化计算pooling窗口内的平均值,并将这个值作为该位置的值;

c) 全局最大(平均)池化是计算整个特征图内的最大值(平均值)。

使用池化不会造成数据矩阵深度的改变,只会在高度和宽带上降低,达到降维的目的。3种池化方式描述如图(pooling窗口为2×2)。 其中平均池化能够很好的保留整体数据的特征,能突出背景信息最大池化能更好的保留纹理上的特征。-

 https://zhuanlan.zhihu.com/p/453740631

pool就起名叫池化;pooling其实是汇聚(到池子里)的意思。

池化过程在一般卷积过程后。池化(pooling) 的本质,其实就是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行降维压缩,以加快运算速度

采用较多的一种池化过程叫最大池化(Max Pooling),其具体操作过程如下:

 池化过程类似于卷积过程,如上图所示,表示的就是对一个4*4 feature map邻域内的值,用一个2*2的filter,步长为2进行‘扫描’,选择最大值输出到下一层,这叫做 Max Pooling。

max pooling常用的s=2,f=2的效果:特征图高度、宽度减半,通道数不变。

还有一种叫平均池化(Average Pooling),就是从以上取某个区域的最大值改为求这个区域的平均值,其具体操作过程如下:

如上图所示,表示的就是对一个4*4 feature map邻域内的值,用一个2*2的filter,步长为2进行‘扫描’,计算平均值输出到下一层,这叫做 Mean Pooling。

池化层没有参数、池化层没有参数、池化层没有参数】 (重要的事情说三遍)

池化的作用:

(1)保留主要特征的同时减少参数和计算量,防止过拟合

(2)invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)。

Pooling 层说到底还是一个特征选择,信息过滤的过程。也就是说我们损失了一部分信息,这是一个和计算性能的一个妥协,随着运算速度的不断提高,我认为这个妥协会越来越小。

现在有些网络都开始少用或者不用pooling层了。

https://zhuanlan.zhihu.com/p/621858179

 

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

池化层通常会分别作用于每个输入的特征并减小其大小。目前最常用形式的池化层是每隔2个元素从图像划分出的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。

过去,平均池化的使用较为广泛,但是由于最大池化在实践中的表现更好所以平均池化已经不太常用由于池化层过快地减少了数据的大小,目前文献中的趋势是使用较小的池化滤镜,甚至不再使用池化层

目前趋势是用其他方法代替池化的作用,比如胶囊网络荐采用动态路由来代替传统池化方法,原因是池化会带来一定程度上表征的位移不变性,传统观点认为这是一个优势,但是胶囊网络的作者Hinton et al.认为图像中位置信息是应该保留的有价值信息,利用特别的聚类评分算法和动态路由的方式可以学习到更高级且灵活的表征,有望冲破目前卷积网络构架的瓶颈。

https://www.jiqizhixin.com/graph/technologies/0a4cedf0-0ee0-4406-946e-2877950da91d

 

一、池化层的作用:
1、抑制噪声,降低信息冗余度
2、提升模型的尺度不变性和旋转不变性
3、降低模型计算量
4、防止过拟合

二、池化算法的操作方式
1、平均池化:保留背景信息,突出背景信息
2、最大池化:保留主要特征,突出前景信息
3、全局平均池化
4、全局自适应池化
5、ROI池化
6、金字塔池化
7、重叠池化
8、随机池化
9、双线性池化

 

四、最大池化和平均池化的应用场景
根据最大池化的操作,取每个块中的最大值,而其他元素将不会进入下一层。众所周知,CNN卷积核可以理解为在提取特征,对于最大池化取最大值,可以理解为提取特征图中响应最强烈的部分进入下一层,而其他特征进入待定状态(之所以说待定,是因为当回传梯度更新一次参数和权重后,最大元素可能就不是在原来的位置取到了)。
一般而言,前景的亮度会高于背景,因此,正如前面提到最大池化具有提取主要特征、突出前景的作用。但在个别场合,前景暗于背景时,最大池化就不具备突出前景的作用了。
因此,当特征中只有部分信息比较有用时,使用最大池化。如网络前面的层,图像存在噪声和很多无用的背景信息,常使用最大池化。
同理,平均池化取每个块的平均值,提取特征图中所有特征的信息进入下一层。因此当特征中所有信息都比较有用时,使用平均池化。如网络最后几层,最常见的是进入分类部分的全连接层前,常常都使用平均池化。这是因为最后几层都包含了比较丰富的语义信息,使用最大池化会丢失很多重要信息。
https://www.cnblogs.com/kobeis007/p/15267993.html

 

 池化的缺点,不足

pooling也叫池化,其实就相当于信号处理里面的下采样,目前我所了解的各种池化操作都是会丢失信息的,这是它最大的缺点。当时乐存提出池化操作的出发点是把图片尺寸减小,而没有考虑信息丢失的问题,他本意想着卷积操作能够学到足够的特征,下采样应该没多大问题,然而事实并不经常如此,卷积操作学到的特征很有限。池化另外一个缺点是会导致CNN丢失平移不变性,这也是来源于采样的操作,在信号处理领域小波变换理论中,为了保持变换的平移不变性,提出了稳定小波变换(stationary wavelet transform),也就是把下采样操作替换为经过上采样后的小波滤波器的滤波操作,这个操作有点类似CNN里面的空洞卷积,即可以看做把感受野放大,也可以看做把卷积核上采样,所以我认为,设计好空洞卷积,再进行池化的话,信息可以做到不丢失,或者丢失很少
链接:https://www.zhihu.com/question/319594326/answer/1344778110

pooling层,又称汇合层、池化层,是卷积神经网络中的一种层结构。最早是模拟猫的C型视觉细胞产生的。

但存在的缺点是,它丢失了图片大量信息。一个3x3的最大池化,就会丢失近8/9的原图信息。同时还有一些小影响,如增加了深度、时空效率等等。所以池化层通常用跨步卷积层代替。

链接:https://www.zhihu.com/question/319594326/answer/647327881
 
(a) 刚开始的时候池化确实有利于提高抗变形能力。(b) 不管池化不池化,模型最后学习完都能获得同样的抗变形能力。(c) 初始化的时候不同的池化方法是有差异的。(d) 学习完之后不管什么池化方法效果都差不多。
https://baijiahao.baidu.com/s?id=1646271945773848037&wfr=spider&for=pc

 

 

 

 

posted @ 2023-07-24 23:46  emanlee  阅读(616)  评论(0编辑  收藏  举报