图像识别(七)| 池化层是什么?有什么作用?

大家好,我是董董灿。

前面的文章 图像识别(番外1)| AI算法攻城狮左手图纸,右手搬砖的真实性以及长图展示Resnet全貌和可视化CNN_董董灿是个攻城狮的博客-优快云博客_ai图像识别算法中,展示了一张Resnet50 的网络结构。

在该网络结构中,存在一个最大池化层和一个全局平均池化层,而在其他的CNN网络中,也会时而看到池化层的出现。

那么,什么是池化层呢?

在CNN网络中,池化层又能起到什么作用

池化 |  Pooling

池化一般接在卷积过程后。

池化,也叫Pooling,其本质其实就是采样,池化对于输入的图片,选择某种方式对其进行压缩,以加快神经网络的运算速度。这里说的某种方式,其实就是池化的算法,比如最大池化或平均池化。

池化过程类似于卷积过程。

上图表示的就是对一个图片邻域内的值,用一个 2x2 的池化kernel,步长为2进行扫描,选择最大值输出,称为最大池化。

最大池化 MaxPool 常用的参数为 kernel  = 2, stride = 2 ,这样的参数处理效果就是输出图片的高度、宽度减半,通道数不变。

还有一种叫平均池化,和最大池化类似,就是将取区域内最大值改为求这个区域的平均值。

和卷积类比

和卷积类比,池化操作也有一个核(kernel),但它不是卷积核。

池化的核只负责框定某次池化计算需要的图片的范围,核里面并没有数据参与计算,也就是说,在训练过程中,池化层不像卷积层那样,需要学习权重。

另一个与卷积不同的是,在卷积的计算中,需要channel维度的数据累加,而池化层的channel维度的数据不需要累加,每个channel中的数据是独立的,这也导致,池化的运算复杂度比卷积简单很多。

下图是卷积和池化的示意图,通过两张图,大致可以看出两者的不同。

神经网络中为什么需要池化层?

特征不变性

汇合操作使模型更关注是否存在某些特征而不是特征具体的位置,可看作是一种很强的先验,使特征学习包含某种程度自由度,能容忍一些特征微小的位移。即池化层支持了一定的平移、旋转、拉伸不变性,这个特性就是有点抽丝剥茧的意思,不断用小特征对大特征进行精简。

如下图,通过池化操作,图片中的黑色特征在输出图片中,仍然被保留了下来,虽然有些许的误差。

降维

如上的例子,图片经过池化的操作,可以减小图片的尺寸,同时又可以保留相应特征,所以主要用来降维。

防止过拟合

 由于池化层没有需要学习的参数,因此,在训练的过程中,可以在一定程度上防止过拟合的发生。

降低模型计算量

池化的操作,会在保留原始图片特征不变的情况下,将图片尺寸缩小,从而减少整个模型的计算量。

在神经网络的训练和推理过程中,一个维度的计算量减倍,往往会带来一个数量级的性能提升,尤其是在训练过程动辄迭代成千上万次的训练场景中。

使用池化算法,在减少图片的宽和高尺寸的同时,也会给模型的训练和推理带来更优异的性能提升。

One More Thing

除了上述最大池化和平均池化外,池化还有很多变种。最常见的一种变体就是全局池化。

全局池化的kernel大小和图片大小一样,因此最终输出的图片大小就是一个点。这种全局池化操作,后面一般用来接全连接层,从而进行分类。如Resnet50最后一层全连接层前,就是一个全局平均池化层。

文章部分图片整理参考来源资料: 

https://www.zhihu.com/question/401688068/answer/1295651905

https://zhuanlan.zhihu.com/p/78760534

本文为技术交流,如有图片侵权,请联系我删除。


往期文章推荐:

图像识别(一)| 从像素说起_董董灿是个攻城狮的博客-优快云博客

图像识别(二)| 图像的色彩空间_董董灿是个攻城狮的博客-优快云博客

图像识别(三)| 初识卷积_董董灿是个攻城狮的博客-优快云博客

图像识别(四)| 卷积的核心,特征提取_董董灿是个攻城狮的博客-优快云博客_卷积图像特征提取

图像识别(五)| 春天花开却不识?打开百度识图,残差和卷积带你识遍路边野花_董董灿是个攻城狮的博客-优快云博客

图像识别(六)| 激活函数_董董灿是个攻城狮的博客-优快云博客

更多信息,请查看专栏

https://blog.youkuaiyun.com/dongtuoc/category_11863193.htmlhttps://blog.youkuaiyun.com/dongtuoc/category_11863193.html

码字不易,如果你喜欢,请关注 董董灿是个攻城狮的博客_优快云博客 或点赞。
近期开通个人微信公众号: 董董灿自述 | 我是一个攻城狮 分享人工智能科技文章,欢迎关注。



v v v v v v

**本文为作者原创,请勿转载,转载请联系作者。**
**点击下方卡片,关注我的公众号,有最新的文章和项目动态。**

v v v v v v

### 关于YOLOv8中的池化层架构 YOLOv8 的设计中并未单独强调传统的池化操作,而是更多依赖卷积层和特殊模块来提取特征并减少空间维度。然而,在其网络结构中有涉及类似于池化的部分,比如 **SPPF (Spatial Pyramid Pooling - Fast)** 模块[^1]。 #### SPPF 模块的作用 SPPF 是一种快速的空间金字塔池化方法,用于增强模型的感受野并捕获多尺度特征。它通过对输入特征图进行不同尺寸的最大池化操作并将结果拼接在一起,从而实现更丰富的上下文信息获取。具体来说: - 输入经过一次最大池化(MaxPooling),通常采用 $5 \times 5$ 或其他较大窗口大小。 - 将多个池化后的特征图组合起来形成最终输出。 以下是基于 PyTorch 实现的一个简单版本的 SPPF 结构代码示例: ```python import torch.nn as nn class SPPF(nn.Module): def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13)) super().__init__() c_ = c1 // 2 # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c_ * 4, c2, 1, 1) self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2) def forward(self, x): x = self.cv1(x) y1 = self.m(x) y2 = self.m(y1) return self.cv2(torch.cat((x, y1, y2, self.m(y2)), dim=1)) ``` 尽管官方文档未提供具体的池化层架构图,但可以参考类似的 SPP 层可视化图像作为替代方案。这些图像展示了如何通过不同的池化核大小捕捉全局信息[^2]。 #### 如何查找相关图片资源? 为了找到有关 YOLOv8 中池化层的具体架构图或示意图,建议采取以下方式: - 访问 Ultralytics 官方 GitHub 页面或其他技术博客文章寻找详细的图表说明; - 使用搜索引擎关键词如 “YOLOv8 sppf architecture diagram” 获取第三方制作的教学材料。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

董董灿是个攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值