MAX Pooling 最大值池化
max pooling 的操作如下图所示:整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出 output。
注意区分max pooling(最大值池化)和卷积核的操作区别:池化作用于图像中不重合的区域(这与卷积操作不同)
这个图中,原来是4*4的图片。
由于不会重合,所以filter的大小和步长stride是相等的,为2.
粉色区域最大值为6,得到的该区域结果是6,绿色是8,黄色是3,紫色是4.
有一个动图:
PS:发现其实是有重叠池化的(overlapping pooling)相邻池化窗口之间会有重叠区域,此时filter的大小sizeX>stride步长。
Max Pooling的作用
作用1:invariance(不变性)
invariance(不变性)
- translation(平移)不变性
- rotation(旋转)不变性
- scale(尺度)不变性
- translation平移
图中左边两个大图,表示数字1,但是两个的位置不同,上者经过向右平移得到下者。经过池化后,得到了相同的结果
- rotation 旋转
左边大图表示的是汉字“一”(姑且这么理解吧,明白就行)。经过两次池化得到了相同的结果。
- scale
左边大图表示的是数字0,经过两次池化得到了相同的结果。
再举一个例子:
考虑黄色区域中黑色的形状-----“横折”。经过22的filter之后,得到了33的output;
步长为1的滑动,2*2的和
经过3*3的最大池化后,都得到了1*1的output 为3.
可以看出,“横折”这个形状,在经过池化后得到的结果是相同的,这就减小下一层输入大小,减小计算量和参数个数,降维(减小feature map的尺寸)。
作用2:增大感受野
可能跟作用1的结论有些因果关系。
首先它第一个作用是降低feature map的尺寸,减少需要训练的参数;其次,因为有缩小的作用,所以之前的4个像素点,现在压缩成1个。那么,相当于我透过这1个点,就可以看到前面的4个点,这不就是把当前map的感受野一下子放大了嘛
AVG pool 平均池化
pytorch中函数:
nn.AdaptiveAvgPool2d(output_size)
#例子
self.avgpool = nn.AdaptiveAvgPool2d((7, 7))
作用:
自适应平均池化,指定输出(H,W)