【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)
🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. AlexNet
3. VGGNet
4. ResNet
5. SqueezeNet
6. 总结
1. 前言
进入这篇文章之前,想必大家已经阅读过前面的系列文章:
【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)-CSDN博客
【通俗易懂说模型】非线性回归和逻辑回归(附神经网络图详细解释)-CSDN博客
【通俗易懂说模型】反向传播(附多元分类与Softmax函数)-CSDN博客
【通俗易懂说模型】卷积神经网络(呕心沥血版)-CSDN博客
通过前面的文章, 猫猫相信友友们对深度学习、机器学习一定有了一个较为全面且细致的理解,接下来的本篇文章,将基于前面提到的回归、反向传播、卷积神经网络等知识,从深度学习在图像识别领域发展的历史脉络出发,带你遨游几大经典模型。从模型学习深度学习中的奇思妙想,感悟前辈伟人的思想精华🥰~~
2. AlexNet
AlexNet是2012年ImageNet竞赛中获得冠军的卷积神经网络模型,其准确率领先第二名ISI模型10%。由于当时GPU计算速度有限,所以采用了两台GPU服务器进行计算。如下图所示,该模型共分为8层,其中有5个卷积层(特征层),3个全连接层。下面我们对每一层卷积层进行分析。
卷积层:也可以认为是特征层,严格意义上包括卷积层和激活层,用于提取特征。
全连接层:对特征(局部特征、全局特征)全连接,从而学习组织方式, 最终用于分类等。
一、第一层卷积和池化过程。如下图所示,在第一层卷积层中,我们采用11×11的过滤器对尺寸为224×224的图片进行卷积,产生96张55×55的特征图(由于是彩色图片,所以第三个维度是3,下面对此不再进行特别说明)。然后使用ReLU函数,使特征图内的数值保持在合理的范围内。接着使用3×3的核进行池化,最终生成96张27×27的特征图。
输出图片大小和卷积的关系:
二、第二层卷积和池化过程。如下图所示,在第二层卷积层中,采用5x5的过滤器进行卷积,产生256张27x27的特征图。再经过ReLU函数后,使用3x3的核进行池化,得到256张13x13的特征图。
三个要点:
- 卷积输出通道数等于卷积核数量。例如上图卷积核数量为256。
- 卷积核通道数等于输入图片通道数。例如上图卷积核通道数为96,卷积核大小为5*5。
- 越上层提取的成分越抽象。每一次卷积会利用到前面所有的底层知识组合成上层知识。
三、第三层卷积过程。如下图所示,在第三层卷积层中没有池化,采用3x3的过滤器进行卷积,产生384张13x13的特征图,然后经过ReLU函数(特征提取层中池化不是必须的)。
四、第四层卷积过程。如下图所示,在第四层卷积层中也没有池化,采用3×3的过滤器进行卷积,产生384张13x13的特征图,然后经过ReLU函数。
五、第五层卷积过程。如下图所示,在第五层卷积层中,采用3×3的过滤器进行卷积,产生256张13x13的特征图,经过ReLU函数,然后使用3x3的核进行池化,产生256张6x6的特征图。
六、三层全连接层。在第六层中,我们将256张6×6的特征图全连接到2048个神经元节点上,经过ReLU激活层,再进行Dropout。Dropout是前向传播过程中随机丢弃的一些神经网络层节点,这种方法可以有效避免模型过拟合。在第七层中,将2048个神经元节点全连接到2048个神经元上,经过ReLU激活层,进行Dropout。在第八层中,将2048个神经元全连接到1000个神经元输出节点,因为我们进行的是1000个分类的任务。
3. VGGNet
VGGNet是牛津大学计算机视觉组和GoogleDeepMind公司研究员一起研发的深度卷积神经网络在2014年的ImageNetILSVRC中取得了亚军。VGGNet探索了卷积神经网络的深度和性能之间的关系,通过多次堆叠3×3的过滤器和2×2的最大池化层,使得网络层数总体变多,达到了16层~19层。与只有8层的AlexNet相比,VGGNet具有参数的神经网络层数翻了一倍多。
VGGNet采用了多个3x3的卷积核来代替AlexNet中11x11和5x5的卷积核,这样做的目的是减少参数的数量。具体是如何做到的呢?如下图所示,两个3×3的卷积核效果相当于一个5x5的卷积
核效果。倘若被卷积的特征图数为N,卷积之后得到的特征图数为M,则使用两次3×3卷积核的总参数为18NM,使用一次5×5卷积核的总参数为25NM。类似地,3个3×3的卷积核相当于1个7x7的卷积核,而1个7×7的卷积核的总参数为49NM,而3个3×3卷积核的总参数量仅为27NM。
相同硬件条件下,训练所能接受的参数总量是有限的:
- VGGNet利用将5*5分解为两个3*3从而减少了参数量,可以增加更多网络结构。
- 同时一层5*5变为两层3*3让整体网络结构变得更深,探索了卷积神经网络的深度和性能之间的关系。
如下图所示,VGGNet有5段卷积,每一段卷积由2~4个3x3的卷积核与1个池化层构成,取
大小为3x3的卷积是因为3x3可以同时获取上下左右像素信息的最小卷积核。所有卷积的步长均为1,padding也为1。这种利用多个小卷积核代替一个大卷积核的方式有两个好处:一是减少了训练的参数量,减少资源占用率;二是增加了非线性变换的次数,提高网络对特征的学习能力。该网络也同时证明:在一定条件下,网络结构越深,网络的学习能力就越好,分类能力就越强。
使用3*3代替5*5卷积核的优点:
- 减少参数,减少运算量达到同样效果。
- 两个3*3代替5*5网络结构更深,增加了非线性变换的次数,更有利于分类。
4. ResNet
我们刚才在VGGNet里受到了启发,觉得网络结构越深越好,但是事实上却不是那么容易。如下图所示,20层的卷积神经网络无论是在训练集还是在测试集,其误差都比56层的要小。也就是说,如果在不进行任何特殊处理的情况下增加层数,较深的网络会有更大的误差。其中的原因之一是网络越深,梯度消失的现象就越来越明显,网络的训练效果也不会很好,我们把该问题称为“退化”。但是现在,浅层的网络又无法明显提升网络的识别效果,所以要解决的问题就是怎样在加深网络的情况下解决“退化”的问题。
问题:
- 网络结构越深整体效果越好。
- 但是网络深到一定程度后因为梯度消失的原因导致训练效果下降,出现“退化”现象。
对梯度消失的理解:
- 假设一个神经网络有多个线性层,每个层的权重都是一个较大的正数。当输入数据经过这些层计算时,每个层的输出都会变得越来越大,导致接下来的层需要处理的数值也越来越大。这时候,在反向传播的时候,计算梯度时,因为涉及到乘积,这些大的数值相乘会导致梯度变得非常小,甚至趋近于零。这就是梯度消失的原因。
🌰举个例子,假设有一个三层神经网络,每层的权重都是2。假设输入是1,那么经过第一层后变成2,经过第二层变成4,经过第三层变成8。在反向传播的时候,梯度会按照链式法则计算,每次乘以权重。所以,梯度会是1乘以2,乘以2,再乘以2,也就是8。如果权重更大,比如3,那么梯度会是1×3×3×3=27,这样梯度会变得越来越大,而不是变小。但是,如果权重都是0.5,那么前向传播时数值变小,反向传播时梯度会是1×0.5×0.5×0.5=0.125,也就是梯度变小,这时候梯度消失。所以,当权重的绝对值小于1时,梯度会逐渐变小,导致梯度消失;而如果权重的绝对值大于1,梯度会逐渐变大,导致梯度爆炸。
梯度消失会导致每次参数更新的很少,结果就是训练始终无法收敛,同时遗忘模型前面的训练块,模型效果很差。
梯度爆炸会导致每次参数更新都很大,结果就是训练结果波动性强,同样无法收敛,模型效果差。
针对这个问题,微软研究团队提出了ResNet模型,成功地解决了上述难题,并获得了2015年的ImageNet比赛的冠军。ResNet模型引入残差网络结构,可以成功地训练层数高达152层的神经网络。该残差网络结构如下图所示,在两层或两层以上的节点两端添加了一条“捷径”,这样一来,原来的输出F(x)就变成了F(x)+x。就是这一点点的小改动,我们就可以直接使用传统的反向传播训练法对非常深的神经网络进行训练,并且收敛速度快,误差小。
下图给我们展示了2015年时赢得ImageNet比赛冠军的ResNet模型,我们可以看到该网络的特别之处在于每隔两层就设置了一个“捷径”。
为何ResNet的这种连接方式可以“解决”之前的“退化”问题呢?我们先来观察一下下图,可以发现,左边我们熟悉的残差网络模块可以看成右边的串联关系。可以把右边的图联想为串联的电路,把数据经过的神经网络层看成是电阻元件。我们知道在串联电路中,电阻越小的支路,电流就越大,对总输出电流的贡献比例就越大。再回到残差网络模块,梯度进行反向传播时,会因为所遇层数的增多而不断变小。如果我们把梯度传播时遇到的神经网络层看成是一种“阻力”的话,那么这些“捷径”就会因为“阻力”小而把梯度顺利地反传回来,不至于“消失”,如此一来,“退化”的问题就被顺利解决了。有了残差网络模块,我们可以疯狂地叠加神经网络层,甚至到达1000层以上。
5. SqueezeNet
在很多实际的运用中,我们希望神经网络模型在尽量小的情况下保持足够的精度。例如,在自动驾驶汽车这一应用中,我们并不希望把入上传到服务器进行识别,如果这么做会产生延迟,很可能发生车祸。这时候,我们希望自动驾驶汽车能够从网络上下载神经网络模型,直接在本地进行实时的识别。除此之外,移动手机上的人工智能产品也同样希望直接在本地进行识别,避免网络传输所带来的长时间等待。我们以前一直在关注如何通过提高模型的复杂度来提高模型识别的正确率。在相同的正确率下更小的神经网络模型有如下3个优势:
- 在分布式的训练中,模型越小,各计算节点的通信需求就越小,从而训练得更快:
- 模型越小,从云端下载的数据量就越小;
- 更小的神经网络模型更适合在内存和硬盘资源有限的设备上部署。
为了解决模型太大的问题,UCBerkeley和Stanford研究人员提出了SqueezeNet模型,其识别精度与AlexNet相同,但模型大小却只有AlexNet的1/50,如果再加上其他的模型压缩技术,可以缩小至0.5MB,即仅为AlexNet模型大小的1/510。SqueezeNet采用以下3种策略来优化模型:
- 使用1×1卷积来代替3x3卷积,减少模型参数(1*1卷积块本质上可以认为仅仅在通道层面卷积了一下,并没有考虑局部特征的联系);
- 减少输入的通道数,减少模型参数;
- 延后池化,保留更多信息,提高准确率。(本身参数量很少就不需要池化来减少特征值了)。
假如一张图片如下:
可以认为其仅仅展示了各自的位置信息。
卷积后如下:
可以认为除了位置信息还包含彼此的联系信息,因此卷积核越少处理后包含的联系信息更少,因此计算量更小。
具体来说,SqueezeNet设计了一个叫Fire Module的模块,其结构如下图所示,该模块分为压缩和扩展两个部分。首先压缩部分是由若干1×1的卷积核构成,图中示例使用了3个卷积核。而扩展部分包含1×1的卷积核和3×3的卷积核,这里使用了4个1×1卷积核及4个3×3卷积核。假设输入的通道数为5,在压缩部分,我们使用3个1×1卷积核,将输入的通道数压缩为3,然后分别经过4个1×1和4个3x3卷积核后,将输出进行合并,最后得到8张特征图。
随着卷积神经网络的发展,我们经常搭配一些固定的卷积核,构造成一个微结构进行使用,从而方便网络设计。SqueezeNet的FireModule也是一个微结构,如下图所示。在Fire Module这个微结构中,分为压缩和扩展两部分卷积核,压缩模块采用了3个1x1卷积核,因此S1x1=3;扩展模块中我们采用了4个1×1卷积核和4个3x3卷积核,因此e1x1=4,e3x3=4。在每个卷积之后,都经过了非线性函数ReLU的处理,我们要求S1x1<e1x1+e3x3以限制输入通道数。
整个SqueezeNet结构如下图所示,左边是原始的SqueezeNet,我们分别在conv1、fire4、fire8、conv10之后加池化层,这样做推迟了池化而保留了更多的信息,提高识别精度。中间和右边借鉴了ResNet的做法,在各层之间加人了许多“捷径”,化解“退化”问题,提高识别正确率。在最后的池化层里,使用全局平均池化(GlobalAveragePooling,GAP)来代替以往的全连接层,节省了大量参数。
全局平均池化是直接利用特征图来计算对应分类的概率相关值。如下图所示,以上面的任务为例,我们需要对1000个类进行分类。那么在最后一层卷积层的输出部分,我们设置输出为1000张特征图,然后对每一张特征图求平均值。接着将1000个平均值输入softmax函数,得到1000个类的概率。
全局平均池化:
- 池化代表减少参数量。从特征图最后降维一个概率自然是池化
- 全局代表直接求1000个类的概率。
- 平均是指这个概率是特征图的概率的平均值。
- 全剧平均池化可用来代替全连接层求解分类问题
怎么理解全局平均池化分类和全连接后分类?
1、全局平均池化就是直接拿特征图去分类,如下图:
将一个狗狗分为好几块,然后得到的就是一个个特征图。全局平均池化就是直接看后面乱序的特征图去判断是不是狗
2、全连接后分类就是得到特征图后,通过全连接拼凑出狗狗的图片,如下图:
然后再用这个完整有序的图片去判断是不是狗
6. 总结
【如果想学习更多深度学习文章,可以订阅一下热门专栏】
深度学习_十二月的猫的博客-CSDN博客
PyTorch实战深度学习80例_十二月的猫的博客-CSDN博客
零基础入门PyTorch框架_十二月的猫的博客-CSDN博客
如果想要学习更多pyTorch/python编程的知识,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~
相关文章:

【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...
Unity世界坐标转成UI坐标
Unity世界坐标转成UI坐标 介绍转换代码合并方法总结 介绍 在Unity中官方提供了很多坐标转换的API,但是还没有一个API是将世界坐标系转换成UI的坐标系,世界坐标系在屏幕中的位置是不固定的所以有时候需要转换成UI坐标系**(注意这里不是转换成…...
自制游戏——斗罗大陆
很简陋,没有图,请见谅 // mine[0] 级数 // mine[1] 战力 //mine[2] 1 白虎 //mine[2] 2 昊天锤 //mine[2] 3 蓝银草 #include <bits/stdc.h> using namespace std; int mine[100],live3, dou 1, luo 1, da 1, bag[1000], huan 0, lia…...

MindStudio制作MindSpore TBE算子(四)算子测试(ST测试-Ascend910B/ModelArts)--失败尝试
上一节,MindStudio制作MindSpore TBE算子(三)算子测试(ST测试),因此缺乏对应的硬件环境导致无法进行ST测试,导致难以自安,今天搞来Ascend910B服务器来填坑,看看是否是硬件…...

二、交换机的vlan子设备接入
一、交换机的vlan设置-CSDN博客 二、交换机的vlan子设备接入-CSDN博客 接上篇的文章,本文接入了子设备 网络结构如下: 用路由器A和POE交换机B代替第一篇中的笔记本电脑,路由器A和交换机B都关闭DHCP服务,并分别接入一个IPC&#…...
EFCore相关知识分享
EFCore相关知识分享 文章目录 EFCore相关知识分享前言EFCore 的优势SaveChang的作用EF Core 查询优化小技巧使用投影(投影到所需的数据类型)延迟加载(Lazy Loading)与显式加载(Eager Loading)使用 AsNoTrac…...

检测网络安全漏洞 工具 网络安全 漏洞扫描 实验
实验一的名称为信息收集和漏洞扫描 实验环境:VMware下的kali linux2021和Windows7 32,网络设置均为NAT,这样子两台机器就在一个网络下。攻击的机器为kali,被攻击的机器为Windows 7。 理论知识记录: 1.信息收集的步骤 2.ping命令…...

deepseek + kimi 高效生成PPT
1.在deepseek中生成ppt大纲 2.将大纲复制到kimi中生成PPT kimi:https://kimi.moonshot.cn/...
JavaWeb学习-Mybatis(增删改查)
(一)Mybatis入门程序 1.创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。(项目工程创建完成后,自动在pom.xml文件中,导入Mybatis依赖和MySQL驱动依赖) <dependencies> <!-- mybatis起步依赖 --> <dependency> …...

软考高项(二十四)法律法规和标准规范 ★重点集萃★
👑 个人主页 👑 :😜😜😜Fish_Vast😜😜😜 🐝 个人格言 🐝 :🧐🧐🧐说到做到,言出必行&am…...
Django中select_related 的作用
Django中这句代码Dynamic.objects.select_related(song)是什么意思? 在 Django 中,这句代码: Dynamic.objects.select_related(song) 的作用是 在查询 Dynamic 模型的同时,预加载 song 关联的外键对象,从而减少数据…...
vscode无法ssh连接远程机器解决方案
远程服务器配置问题 原因:远程服务器的 SSH 服务配置可能禁止了 TCP 端口转发功能,或者 VS Code Server 在远程服务器上崩溃。 解决办法 检查 SSH 服务配置:登录到远程服务器,打开 /etc/ssh/sshd_config 文件,确保以下…...
计算机组成原理——中央处理器(九)
在每一个清晨醒来,你都有一个全新的机会去塑造你的世界。无论昨日经历了多少风雨,今天的你依旧可以启航向梦想的彼岸。生活或许会给你设置障碍,但请相信,这些都是通往成功的垫脚石。不要让短暂的困境遮蔽了你的视野,因…...

网页版贪吃蛇小游戏开发HTML实现附源码!
项目背景 贪吃蛇是一款经典的休闲小游戏,因其简单易玩的机制和丰富的变形而深受玩家喜爱。本次开发目标是实现一款网页版贪吃蛇小游戏,并通过前端与后端结合的方式,提供一个流畅的在线体验。 实现过程 游戏逻辑设计 蛇的移动:…...

基于java ssm springboot选课推荐交流平台系统设计和实现
基于JavaWeb开发的 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 📝 🚀&…...

Sigma-Aldrich化学品安全技术说明书(SDS)查询教程
在当今的现代工业体系里,化学品的应用极为广泛,贯穿于众多行业的生产环节。以电子、皮革、玩具、工艺品、家具制造等行业为例,有机溶剂的使用频率颇高,这虽极大地推动了生产的发展,却也埋下了风险隐患。在这些企业中&a…...

嵌入式实训室解决方案(2025年最新版)
一、背景概述 随着信息技术的迅猛进步,嵌入式系统已成为智能化设备与应用的核心驱动力,引领产业变革与创新。其应用范围广泛,涵盖智能家居、智能医疗、工业控制、交通及网络通信等领域,是信息化与智能化转型的关键。在此背景下&am…...

Spring Cloud — 深入了解Eureka、Ribbon及Feign
Eureka 负责服务注册与发现;Ribbon负责负载均衡;Feign简化了Web服务客户端调用方式。这三个组件可以协同工作,共同构建稳定、高效的微服务架构。 1 Eureka 分布式系统的CAP定理: 一致性(Consistency)&am…...
全排列(力扣46)
这道题让我们求这个集合有多少种排列方式,那么与之前组合问题的不同就在于要考虑元素之间的顺序了,所以每一层递归的or循环的起始值无需变量控制,都从0开始。但是一个排列中不能出现相同元素,所以别忘了去重,这里的去重…...

Mac部署Jenkins 一
Mac部署Jenkins 一 一.Jenkins 部署依赖 JDK 环境 查看 Mac JDK 环境,如果没有安装,先安装 打开终端输入命令:java -version Mac安装配置 JDK 二. 检查 HomeBrew 安装 检查 HomeBrew 是否安装,终端输入命令:brew -v Mac安装HomeBrew …...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...