池化层 学习笔记
FCNVMB网络与InversionNet有很多不同点,其中之一便是FCNVMB网络使用maxpooling取代了InversionNet的卷积下采样操作。所以整理了池化层的基础知识,记在博客里。这里以2维图片的最大池化函数为例:
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
kernel_size
:池化窗口的大小,可以是一组数据,并允许不同方向上取值不同
stride
:池化步长,默认值是kernel_size
padding
:填充
dilation
:窗口中元素的步幅
return_indices
:如果为True
,返回的将是最大值的下标,而不是最大值本身
ceil_mode
:如果为True
,输出形状将上取整。
原理
类似于卷积操作,池化层也是将kernel_size
大小的窗口在原图上进行移动,只是卷积时会将卷积核的数据与图像数据进行计算,而池化的窗口中没有数据,而是对窗口对应的图像数据进行某些操作,常见的操作有最大池化和平均池化,分别代表着取窗口的数据的最大值和平均值。函数中的kernel_size
、stride
、padding
和池化函数的输出尺寸与卷积中的相应参数相同,不再重复解释。
dilation
这个参数同样存在于卷积中,使用该参数的卷积成为空洞卷积,他代表着的含义是卷积或池化时在原图上的卷积核/窗口内部添加一定的间隔。使用空洞卷积/空洞池化可以在不增加计算量的情况下增加感受野,但也会导致网格效应和长距离特征无关的问题。
参考
更多池化方法: 一图读懂-神经网络14种池化Pooling原理(MAX,AVE,SUM,MIX,SOFT,ROI,CROW,RMAC )