卷积神经网络中池化层的详细介绍

卷积神经网络自2012年,到2023年经历了翻天覆地的变化。最早的卷积神经网络由卷积层、池化层和全连接层所构成。其中卷积层用于提取图像的特征,池化层削减特征数量,全连接层用于对特征进行非线性组合并预测类别。然而在transformer横行的年代,池化层几乎要在神经网络中消失了。趁着池化层还能在少部分主流模型中看到,记录一下各种池化层。本博文一共介绍了7种简单的池化层,此外还介绍了一下卷积神经网络的基本结构。

1、卷积神经网络的主要结构

1.1 卷积层

卷积层最早是作用于RGB格式的2D图像(即 W , H , C i n W,H,C_{in} W,H,Cin格式的数据),其输出数据也为 W , H , C o u t W,H,C_{out} W,H,Cout格式,后来在其它领域被扩展到 W , H , C , D W,H,C,D W,H,C,D格式的数据,也就是3D数据。其中 C i n C_{in} Cin是指输入卷积层的通道数, C o u t C_{out} Cout是指输出卷积层的通道数。卷积核的运算过程与图像滤波时的过程最初是一模一样的(这使得卷积运算具有局部连接和参数共享的特性),其有kernel_size的参数设置(通常只能为奇数),后来又被补充了一些其它的概念。如卷积核滑动的步长(图像滤波步长默认为1),同时算法工程师们还考虑到图像经过卷积运算后size会变小(WxH的图像在经过滤波后,size会变化(W-kernel_size+1)x(H-kernel_size+1))。故而,又对卷积运算提出了padding的概念[padding=smae,即自动填充;padding=valid即不填充],即对原始图像进行填充,使运算后的图像与原始图像保持同样的大小。卷积层还有一个特点是,多视角。卷积核的kernel数 C i n ∗ C o u t C_{in}*C_{out} CinCout,每一个 C o u t C_{out} Cout【对应着 C i n C_{in} Cin个卷积核】都是卷积层观察数据【提取特征】的一个视角。

1.2 池化层

池化层在当时被认为是卷积神经网络中不可缺少的一部分,其提供了卷积神经网络强壮的鲁棒性(平移不变性、旋转不变性、尺度不变性|特征降维,防止过拟合|实现非线性|扩大下一层卷积层的感受野)。池化层的运算与图像下采样过程类似,通过该操作后可以减少网络层中特征的size,从而减少特征与后续全连接网络层中的参数量。平移|旋转不变性是指图像进行平移|旋转后识别结果任然不变,这依赖平移|旋转后提取的特征不发生变化,池化层能在一定程度上保证特征不变。具体深入可以参考,https://zhuanlan.zhihu.com/p/382569419 ,其提到在图像分类中最需要的是平移不变性;在目标检测中最需要的是平移相等性【即目标平移,预测出的boxes也相应平移】。并在实验中指明,当输出存在细微旋转平移时,池化操作能近似达到平移不变性的效果,当平移或旋转太大后则不具备这种效果。

特征降维,通过池化层运算后,网络层输出的特征size减少了很多,这与特征降维效果相同。减少特征数量后,可以在一定程度上抑制过拟合。

实现非线性,这与池化操作的不可逆
自ResNet之后,池化层在分类网络中应用逐渐变少,往往采用stride=2的卷积替代最大值池化层。

1.3 全连接层

全连接层其实也就是多层感知机|BP神经网络。我们可以将卷积神经网络模型分为两部分:卷积基(由池化层和卷积层构成)、全连接层,卷积基被认为是用于提取图像特征的,全连接层被认为是对图像特征进行分类的。在模型模型时,卷积基于全连接层是共同参与训练(前向传播预测与反向传播优化),故此卷积基与全连接层是存在一定的适应关系的,不能自由组合多个模型内的卷积基和全连接层后直接使用(需要重新进行训练,使其相互适应,也就是迁移学习|fine-tuning)。此外,也有人提出用卷积基提取特征,然后训练决策树、随机森林、SVM、极限学习机、贝叶斯方法、KNN等传统方法进行分类。

特征的概念,特征本质上就是一个属性,当其与任务密集相关时就是有效特征,当其与任务无关时就是噪声数据。在深度学习中,通常使用relu或者其变种函数作为激活函数,其会对负值区域进行抑制,而对正值区域进行保留。也就是说,在深度学习中,卷积基输出的值越大,则表明特征响应强度越大。

2、池化层详解

在深度学习中,池化层只是削减特征的一种运算规则,其并没有参数。按其运算规则区分,有平均池化层、最大池化层、全局平均|最大池化层、随机池化层、混合池化、中值池化层、组合池化层等。其中前3个为常见池化操作,后面的比较少见。

除了这7种池化方法外,在极市平台的 https://jishuin.proginn.com/p/763bfbd5c125 中还介绍了幂平均池化(根据幂运算值使用平均|最大池化)、DPP池化(该池化可以放大空间变化并保留重要的图像结构细节)、Local Importance Pooling(局部重要性池化)和Soft Pooling(软池化)等

2.1 平均池化层

参考 https://zhuanlan.zhihu.com/p/77040467
在前向传播过程中,计算图像区域中的均值作为该区域池化后的值;在反向传播过程中,梯度特征分均配到各个位置。根据下图效果,可以看出均值池化与低通滤波存在一定相似度,可以将高频信息进行滤除(模糊掉图像边缘,忽略掉噪声点),尽可能保存纹理信息,其对于以纹理特性分类的数据或许有用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLNJY3n3-1687252619299)(2023-06-20-15-43-32.png)]
其反向传播时,示意如下,可以看到其优化目的是使网络层数据尽可能接近平均值(对2x2的输入输入都使用相同梯度值)

平均池化取每个矩形区域中的平均值,可以提取特征图中所有特征的信息进入下一层,而不像最大池化只保留值最大的特征,所以平均池化可以更多保留些图像的背景信息。

在实际应用中,均值池化往往以全局均值池化的形式出现。常见于SE模块以及分类模块中。极少见于作为下采样模块用于分类网络中。

2.2 最大池化层

在前向过程,选择图像区域中的最大值作为该区域池化后的值;在反向过程中,梯度通过前向过程时的最大值反向传播,其他位置的梯度为0。根据下图效果,可以看出平均池化效果与高通滤波存在一定相似度,将低频信息进行滤除(移除细纹理,只保留最大值),对一个2x2的区域只保留最大的值(类似于relu操作)。

其反向传播时,示意如上图,可以看到只有最大值所对应的区域有梯度值得到优化,而其它区域则没有梯度值。

这种方式摒弃了网络中大量的冗余信息,使得网络更容易被优化。同时这种操作方式也常常丢失了一些特征图中的细节信息,所以最大池化更多保留些图像的边缘信息。

2.3 全局池化层

全局池化层(Global Average Pooling,GAP)是平均|最大池化层的空间泛化,在平均|最大池化层中通常需要设置pool_size(池化区域的大小),而全局全局池化层则是默认为pool_size为WxH,将所有的数据一次性计算出结果(平均|最大池化层需要进行滑窗,滑动一次计算出一个结果)。故此,全局池化层有全局平均池化层和全局最大池化层。

GAP对整个网络在结构上做正则化防止过拟合,直接剔除了全连接层中黑箱的特征,直接赋予了每个channel实际的类别意义。除此之外,使用GAP代替全连接层,可以实现任意图像大小的输入(以往的CNN使用flatten操作将2d数据转成1维,不同的输入size,输出的特征维度不同,故只能固定图像输入尺寸)。GAP对整个特征图求平均值,也可以用来提取全局上下文信息,全局信息作为指导进一步增强网络性能。

全局池化层通常被放置在卷积基于全连接层中间,或者是CBAM(Channel attention)中。

2.4 随机池化层

参考自:https://zhuanlan.zhihu.com/p/77040467

随机池化是ICLR2013的一篇论文Stochastic Pooling所提出的,其结合了平均池化层和最大池化层的优缺点。随机池化的方法非常简单,只需对特征区域元素按照其概率值大小随机选择,元素值大的被选中的概率也大(避免了总是最大值被选中)。

2.5 混合池化

参考自:https://jishuin.proginn.com/p/763bfbd5c125
其受dropout的启发,用随机过程代替了常规的确定性池化操作,在模型训练期间随机采用了最大池化和平均池化方法,并在一定程度上有助于防止网络过拟合现象。混合池化以随机方式改变了池调节的规则,这将在一定程度上解决最大池和平均池所遇到的问题。

混合池化优于传统的最大池化和平均池化方法,并可以解决过拟合问题来提高分类精度。此外该方法所需要的计算开销可忽略不计,而无需任何超参数进行调整,可被广泛运用于CNN。

2.6 中值池化层

参考图像处理中的中值滤波所实现,基本上没有在CNN网络中看到。使用排序后的中值作为输出值,其前向传播与反向传播与最大池化类似。

博主推断其看是能提取图像纹理特征,但很难具备稳定性(中值在网络深层容易受感染),只可用在网络浅层中。在实际使用过程中,不支持将学习率设置的较大,且极难优化。

与最大池化相比,最大值虽然也不是很稳定,但是在整个训练过程中均以数值大小来描述特征对结果的影响力,故在整个体系下其还是具备稳定性的。

2.7 组合池化层

​ 组合池化则同时利用最大值池化与均值池化两种的优势而引申的一种池化策略,其与混合池化的区别在于确定性(组合池化是确定的使用两个池化方式,混合池化是不确定的使用两个池化方式)。常见组合策略有两种:Cat与Add。其代码描述如下:

def add_avgmax_pool2d(x, output_size=1):
    x_avg = F.adaptive_avg_pool2d(x, output_size)
    x_max = F.adaptive_max_pool2d(x, output_size)
    return 0.5 * (x_avg + x_max)

def cat_avgmax_pool2d(x, output_size=1):
    x_avg = F.adaptive_avg_pool2d(x, output_size)
    x_max = F.adaptive_max_pool2d(x, output_size)
    return torch.cat([x_avg, x_max], 1)

3、总结

自从2021年Transformer被引入到视觉模型后,卷积神经网络基本上要末路了,虽然此后也有ConvNeXt、SegNeXt成功挑战过Transformer的地位,但也无力挽回卷积神经网络的大势已去。

ConvNeXt使用了一些列的训练技巧(AdamW 优化器、Mixup、Cutmix、RandAugment、Random Erasing等数据增强技)和随机深度和标签平滑等正则化方案,也不过是勉强将 ResNet-50 模型的性能从 76.1% 提高到了 78.8%。而,Transformer并不需要使用如此复杂的增强策略,仅需要不断扩充训练集即可。整个模型没有池化层做特征降维

SegNeXt号称是在语义分割上使用卷积模型超过了Transformer模型,实则是使用了Transformer模型的中patch embeding,并用MLP层替换了multi head self-attention,其与卷积神经网络的关系并不大。整个模型没有池化层

在这些先进的模型结构中,再也不会使用池化层来提取图像特征(特征降维),以后得卷积神经网络通用结果或许会被重新定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/31366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于卡尔曼滤波进行四旋翼动力学建模(SimulinkMatlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

笔记本电脑介绍:记录生活,激发灵感

笔记本电脑是一种轻便、便携的电脑,它的出现改变了人们的工作和生活方式,它的优势在于它的小巧、轻便、便携性,可以满足用户的不同需求。本文将从笔记本电脑的结构、功能、优势和应用四个方面进行详细阐述。 一、笔记本电脑的结构 笔记本电…

十八、网络基础(一)

文章目录 一、协议(一)前置(二)协议分层1.软件分层2.协议分层3.OSI七层模型4.TCP/IP五层(或四层)模型(1)物理层:(2)数据链路层:(3)数据链路层:(4&…

Golang每日一练(leetDay0104) 最小高度树、戳气球

目录 310. 最小高度树 Minimum Height Trees 🌟🌟 312. 戳气球 Burst Balloons 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一…

普通单目相机标定

前言 这里我们还是以普通相机为例(非鱼眼相机)来进行后续的相关标定操作,再回顾下相机的成像模型如下所示。 已知相机内参(fx,fy,u0,v0),畸变系数[k1,k2,k3,p1,p2],相机外参[R|T]。世界坐标系中点Pw(Xw,Yw,Zw),投影至像素坐标系点p(u,v)的计算过程如下。 1)由世…

Qt下使用QPainter实现界面上饼状图、圆环图的绘制

文章目录 前言一、示例讲解二、圆环图绘制步骤三、设置圆环图数据四、示例完整代码五、下载链接总结 前言 前面的文章有讲述使用Qt下的Charts 模块来进行饼图的绘制:QChart实现ui界面上指定位置饼状图、圆环图的绘制,但是使用过程中并不能很好的实现自己…

【LeetCode】动态规划 刷题训练(二)

文章目录 62. 不同路径题目解析状态转移方程完整代码 63. 不同路径 II题目解析状态转移方程完整代码 剑指 Offer 47. 礼物的最大价值题目解析状态转移方程完整代码 62. 不同路径 点击查看:不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图…

数据库架构是否该随着公司估值一起变化?

原文|The growing pains of database architecture 作者|Tim Liang, Software Engineer at Figma 2020 年,因为 Figma 不断加入新功能,筹备第二条产品线和用户不断增长导致数据库流量每年以 3x 速度增长,我们的基础设…

云原生之深入解析Kubernetes中Kubectl Top如何进行资源监控

一、Kubectl top 的使用 kubectl top 是基础命令,但是需要部署配套的组件才能获取到监控值: 1.8 以下:部署 heapter; 1.8 以上:部署 metric-server; kubectl top node:查看 node 的使用情况&a…

【C++】构造函数调用规则

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。 1、缘起 (1)默认情况下,C 编译器至少给一个类添加 3 个函数 ① 默认构造函数(无参&#…

开源软件介绍——国内和国际主要开源社区

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来看一看国内和国际上有哪些主要开源社区。 开源社区的定义 开源社区又称为开放源代码社区,一般由拥有共同兴趣爱好的人组成。根据相应的开源软件许可证协议公布软件源代码的网络平台&a…

ChatGPT从入门到精通,深入认识ChatGPT

ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定1、ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视( 点击观看完整版本 )https…

Clickhouse之物化视图分享

前言 ClickHouse广泛用于用户和系统日志查询场景中,主要针对于OLAP场景,为业务方提供稳定高效的查询服务。在业务场景下,数据以不同的格式、途径写入到clickhouse。用传统JOIN方式查询海量数据,通常有如下痛点: 每个查询的代码冗…

CTFshow-pwn入门-前置基础pwn23-pwn25

pwn23-25的题目会涉及到ret2shellcode、ret2libc等内容,本篇文章只会侧重研究这几道题目的wp,不会过多涉及到ret2shellcode、ret2libc的基本原理,等有时间再来写关于ret2libc、ret2shellcode…的相关内容。大家可以参考CTFwiki的文章去慢慢学…

【机器学习】十大算法之一 “SVM”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

Kubernetes(k8s)部署模式发展

目录 1 简介2 物理单机(~2000)2.1 主要代表 3 虚拟化:初期(2001~2009)3.1 VMware3.2 laaS 4 虚拟化:成熟期(2010~至今)4.1 OpenStack4.2 虚拟化四巨头 5 容器化:(2013-至今)5.1 Dock…

【备战秋招】每日一题:2023.04.26-华为OD机式-第三题-MC方块

在线评测链接:P1231 题目内容 MC最新版本更新了一种特殊的方块,幽匿催发体。这种方块能够吸收生物死亡掉落的经验并感染周围方块,使其变成幽匿块。Steve想要以此为基础尝试搭建一个经验仓库,他来到了创造超平坦模式,在只有草方块…

被测系统架构与数据流分析

开源项目litemall系统架构(https://github.com/linlinjava/litemall) 角色与数据用户产品前端技术栈后端技术栈数据存储 开源项目Mall的系统架构(https://github.com/macrozheng/mall) 角色与数据用户产品前端技术栈后端技术栈服务治理技术栈监控技术栈大数据处理技术栈数据存…

自动化测试工具 AirTest 的使用方法与简介

目录 前言: Airtest简介 1.基于图像识别的Airtest框架 2.基于UI识别的Poco框架 Airtest环境搭建 Airtest布局 Airtest使用步骤 第一步:连接移动设备 第二步:创建一个.air文件(也就是我们的测试脚本) 第三步&#xff1a…

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言: explain: 语法: 总结: 前言: 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具:SQL执行频率,慢日志查询,profile。但是这三个方法也只是在时间角度粗略的…