池化方法总结(Pooling)

本文介绍了卷积神经网络中的池化技术,包括一般池化、重叠池化和空间金字塔池化等,解释了池化如何帮助降低特征向量维度并提升模型效果。

FROM: http://demo.netfoucs.com/danieljianfeng/article/details/42433475#


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

为什么可以通过降低维度呢?

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


 1.  一般池化(General Pooling)

池化作用于图像中不重合的区域(这与卷积操作不同),过程如下图。

 

我们定义池化窗口的大小为sizeX,即下图中红色正方形的边长,定义两个相邻池化窗口的水平位移/竖直位移为stride。一般池化由于每一池化窗口都是不重复的,所以sizeX=stride。

 

最常见的池化操作为平均池化mean pooling和最大池化max pooling:

平均池化:计算图像区域的平均值作为该区域池化后的值。

最大池化:选图像区域的最大值作为该区域池化后的值。


2. 重叠池化(OverlappingPooling)[2]

重叠池化正如其名字所说的,相邻池化窗口之间会有重叠区域,此时sizeX>stride。

论文中[2]中,作者使用了重叠池化,其他的设置都不变的情况下, top-1和top-5 的错误率分别减少了0.4% 和0.3%。



3. 空金字塔池化(Spatial Pyramid Pooling)[3] 

空间金字塔池化可以把任何尺度的图像的卷积特征转化成相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失,具有非常重要的意义。

 

一般的CNN都需要输入图像的大小是固定的,这是因为全连接层的输入需要固定输入维度,但在卷积操作是没有对图像尺度有限制,所有作者提出了空间金字塔池化,先让图像进行卷积操作,然后转化成维度相同的特征输入到全连接层,这个可以把CNN扩展到任意大小的图像。


空间金字塔池化的思想来自于Spatial Pyramid Model,它一个pooling变成了多个scale的pooling。用不同大小池化窗口作用于卷积特征,我们可以得到1X1,2X2,4X4的池化结果,由于conv5中共有256个过滤器,所以得到1个256维的特征,4个256个特征,以及16个256维的特征,然后把这21个256维特征链接起来输入全连接层,通过这种方式把不同大小的图像转化成相同维度的特征。


对于不同的图像要得到相同大小的pooling结果,就需要根据图像的大小动态的计算池化窗口的大小和步长。假设conv5输出的大小为a*a,需要得到n*n大小的池化结果,可以让窗口大小sizeX为,步长为 。下图以conv5输出的大小为13*13为例。


疑问:如果conv5输出的大小为14*14,[pool1*1]的sizeX=stride=14,[pool2*2]的sizeX=stride=7,这些都没有问题,但是,[pool4*4]的sizeX=5,stride=4,最后一列和最后一行特征没有被池化操作计算在内。


SPP其实就是一种多个scale的pooling,可以获取图像中的多尺度信息;在CNN中加入SPP后,可以让CNN处理任意大小的输入,这让模型变得更加的flexible。

 

4.        Reference

[1]    UFLDL_Tutorial  

[2]    Krizhevsky, I. Sutskever, andG. Hinton, “Imagenet classification with deep convolutional neural networks,”in NIPS,2012.

[3]    Kaiming  He, Xiangyu Zhang, Shaoqing Ren, Jian Su,Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,LSVRC-2014 contest


### 卷积神经网络(CNN)中池化层的工作原理 池化层是卷积神经网络(CNN)中的一个重要组成部分,其核心功能是对输入的特征图进行下采样(Subsampling)。这一过程能够有效降低数据维度,从而减少后续计算复杂度和过拟合风险,同时保留关键特征[^1]。 #### 池化层的主要作用 池化层的核心目标在于压缩数据规模,提取关键特征,并增强模型对图像变换(如平移、缩放、旋转等)的鲁棒性。通过这种方式,CNN 能够更高效地处理高维数据,同时保持重要的语义信息[^2]。 --- ### 常见的池化方法及其工作方式 #### 1. **最大池化(Max Pooling)** 最大池化是一种常用的池化策略,它通过对局部区域内的像素取最大值来生成新的特征图。具体而言,给定一个窗口大小 \(k \times k\) 和步幅 \(s\),算法会滑动该窗口遍历整个特征图,并选取每个窗口范围内的最大值作为输出的一部分[^3]。 这种方法的优势在于: - 更好地捕捉显著特征; - 对噪声具有较强的抑制能力; - 提升模型对空间变化的不变性。 示例代码如下: ```python import numpy as np def max_pooling(input_data, pool_size=2, stride=2): output_shape = ((input_data.shape[0] - pool_size) // stride + 1, (input_data.shape[1] - pool_size) // stride + 1) pooled_output = np.zeros(output_shape) for i in range(0, input_data.shape[0], stride): for j in range(0, input_data.shape[1], stride): window = input_data[i:i+pool_size, j:j+pool_size] pooled_output[i//stride][j//stride] = np.max(window) return pooled_output ``` --- #### 2. **平均池化(Average Pooling)** 与最大池化不同的是,平均池化采用局部区域内所有像素值的均值作为输出。同样地,设定窗口大小 \(k \times k\) 和步幅 \(s\) 后,算法会在每次移动时计算当前窗口范围内所有元素的算术平均值[^4]。 相比最大池化,平均池化的优点体现在以下几个方面: - 平滑效果更好,适合于需要保留更多背景信息的任务; - 减少极端值的影响,使结果更加稳定。 以下是实现平均池化的简单例子: ```python def average_pooling(input_data, pool_size=2, stride=2): output_shape = ((input_data.shape[0] - pool_size) // stride + 1, (input_data.shape[1] - pool_size) // stride + 1) pooled_output = np.zeros(output_shape) for i in range(0, input_data.shape[0], stride): for j in range(0, input_data.shape[1], stride): window = input_data[i:i+pool_size, j:j+pool_size] pooled_output[i//stride][j//stride] = np.mean(window) return pooled_output ``` --- ### 池化层的特点总结 池化层通过降维操作简化了原始特征表示,降低了冗余信息的比例,提升了计算效率。此外,由于减少了参数数量,也间接缓解了过拟合现象的发生概率[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值