池化详解+代码实现

1、什么是池化?

我们之所以使用卷积后的特征,是因为图像具有“静态型”的属性,也就意味着在一个图像区域的特征极有可能在另一个区域同样适用。所以,当我们描述一个大的图像的时候就可以对不同位置的特征进行聚合统计(例如:可以计算图像一个区域上的某个特定特征的平均值 or 最大值)这种统计方式不仅可以降低纬度,还不容易过拟合。这种聚合统计的操作就称之为池化,或平均池化、最大池化。

2、池化的作用?

(1)保留主要特征的同时减少参数(降低纬度,类似PCA)和计算量,防止过拟合

在通过卷积获得了特征 (features) 之后,下一步用这些特征去做分类。我们可以用所有提取到的特征去训练分类器,但是这样计算成本比较高。例如softmax分类器,例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 * 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

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

a、 translation invariance:

这里举一个直观的例子(数字识别),假设有一个16x16的图片,里面有个数字1,我们需要识别出来,这个数字1可能写的偏左一点(图1),这个数字1可能偏右一点(图2),图1到图2相当于向右平移了一个单位,但是图1和图2经过max pooling之后它们都变成了相同的8x8特征矩阵,主要的特征我们捕获到了,同时又将问题的规模从16x16降到了8x8,而且具有平移不变性的特点。图中的a(或b)表示,在原始图片中的这些a(或b)位置,最终都会映射到相同的位置。

b、rotation invariance:

下图表示汉字“一”的识别,第一张相对于x轴有倾斜角,第二张是平行于x轴,两张图片相当于做了旋转,经过多次max pooling后具有相同的特征

c、 scale invariance:

下图表示数字“0”的识别,第一张的“0”比较大,第二张的“0”进行了较小,相当于作了缩放,同样地,经过多次max pooling后具有相同的特征

3.池化代码实现

import torchvision.transforms
from PIL import Image
import torch
import matplotlib.pyplot as plt


def pool2d(X, pool_size):
    p_h, p_w = pool_size
    X=X.float()
    m,n=0,0
    Y = torch.zeros((int((X.shape[0] - p_h + 5)/5), int((X.shape[1] - p_h + 5)/5)),dtype=torch.float)
    #同时修改pool_size和除数,就可以修改池化的步长
    for i in range(0,Y.shape[0]):
        n=0
        for j in range(Y.shape[1]):
                Y[i, j] = X[m:m+p_h, n:n+p_w].max()
                if n+p_w < X.shape[1]:
                    n+=p_w
        if m+p_h < X.shape[0]:
            m+=p_h
    return Y
   #可以自定义步长试一下

img = Image.open('E:\PycharmProjects\IMG_20211125_192143.jpg')
transform=torchvision.transforms.ToTensor()
img=transform(img)
print('img.shape=',img.shape)
plt.imshow(img[0,:,:])
plt.show()

img_l = pool2d(img[0,:,:], (5,5))
print('img_l.shape= ',img_l.shape)
plt.imshow(img_l)
plt.show()

4.原图,灰度图,池化图比对

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以根据坐标看到,尺度已经变为原来的五分之一

修改步长,再测试个简单图片
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lins H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值