3.1.3 池化层
池化是对图像进行压缩(降采样)的一种方法,有利于减少后续的计算量,同时不会影响特征的提取。池化层在图像分类领域的应用非常广泛,但是在目标检测以及图像分割领域的存在感就弱了一些,究其原因在于检测与分割需要被检测对象在图像中的具体位置信息,而池化层容易丢失这样的信息。池化的方法有很多,如最大池化、平均池化等。池化层也有操作参数,我们假设输入图像为,W1、H1、D1分别表示图像的宽、高、通道数。池化层中池化卷积核的尺寸为(F,F),步长为S,那么经过池化后输出图像的宽、高、通道数分别为,,。通常情况下F=2,S=2。如图3-9所示,一个(4,4)的特征层经过卷积核尺寸为(2,2),步长为2的最大池化操作后得到一个(2,2)的特征层。池化层的特点是没有要学习的参数,池化只是从目标区域中取最大值或者平均值;在池化运算中,输入特征图和输出特征图的通道数不会发生变化(计算是按通道独立进行的),如图3-10所示。
池化层对原始特征层的信息进行压缩,当输入数据发生微小偏差的时候,池化层的计算仍然会返回相同的结果,因此池化层对数据发生的微小偏差具有一定的鲁棒性。综合来看,池化层是卷积神经网络中很重要的一步,在后面的章节中,我们将会看到在绝大多数情况下,卷积层、池化层、激活层三者像一个整体一样共同出现。下面给出PyTorch中定义池化层的代码。
图3-9 卷积核为(2,2),步长为2的最大池化操作
图3-10 池化层中通道数不变
class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
·kernel_size(int or tuple):最大池化的卷积核大小。
·stride(int or tuple,optional):最大池化卷积核移动的步长,默认值是kernel_size。
·padding(int or tuple,optional):输入的每一条边补充0的层数。
·dilation(int or tuple,optional):一个控制卷积核中元素步幅的参数。
·return_indices:如果等于True,则返回输出最大值的序号,对于上采样操作会有帮助。
·ceil_mode:如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认为False时的向下取整操作。