当前位置: 首页 > news >正文

【深度学习】卷积神经网络之图像分类|CNN、AlexNet、VGG、GoogLeNet、ResNet

一、CNN

卷积神经网络分为卷积层、池化层、全连接层、softmax层。
卷积层:卷积核与输入层中的一个区域相连,计算内积后加上权重。
激活函数层:激活函数层包括在卷积层中,将相连的神经元进行激活,通常使用ReLu激活函数 m a x ( 0 , x ) max(0,x) max(0,x)
池化层:又称为下采样层,通常包括max pooling和average pooling,不会改变通道数量。
全连接层:将特征图拉直,转化为1 × \times × 1 × \times × 4096的向量。
softmax层:将全连接层4096个神经元转化为1000个类别,通过计算交叉熵使得每个类别对应一个概率值,最后通过将概率值排序,得到结论

1. 卷积层

卷积层有两个特点:局部感知权值共享

局部感知: 在提取图片特征时,只需得到图片的某一些特征,而一些模式化特征比整张图片小很多,并且一个神经元不需要看到整个图片发现模式。所以,让每个卷积核只与输入图片的一个局部区域连接,该连接空间的大小叫做神经元的感受野(receptive field),它的尺寸是一个超参数。其通道数量总与输入的通道数相同即在空间维度(宽高)上是局部的,而在深度上总是和输入数据的深度一致。
权值共享: 由于同样的模式可能出现在不同的区域,所有采用权值共享的方法,该方法对不同的感受野使用的卷积核参数相同,当权值共享时就相当于卷积核扫过了一整张图片。在卷积层中使用权值共享是用来控制参数的数量。
激活函数层: 通常使用非线性激活函数 m a x ( 0 , x ) max(0,x) max(0,x)

2. 池化层

它的作用是组建降低特征图的维度,减少参数数量,也能有效控制过拟合和进行特征的融合。池化层包含最大值池化和平均池化。无需参数需要学习。
在这里插入图片描述

3. 全连接层

全连接层就是普通的神经网络,具有全局感受野可去除空间信息,换句话说全连接层和卷积层之间的唯一不同就是卷积层中的卷积核只与输入图片的一个局部区域连接,并且在卷积列中的卷积核共享参数,类比到全连接层则是全局感受野,等效于全局卷积。

4. softmax层

softmax层是以交叉熵损失函数为基础的一层,对应最后一个全连接输出的1000个类别,根据交叉损失函数计算出1000类标签的概率值。
特点:将实数值压缩到(0,1);所有元素和为1。

5. CNN设计准则

  1. 避免瓶颈信息:数据量 H , W , C H,W,C H,W,C要缓慢变小
  2. 通道数量保存在可控范围
  3. 感受野要足够大
  4. 分组计算降低计算量
  5. 低秩分解降低计算量

二、AlexNet

AlexNet由5个卷积层和3个全连接层组成,其中卷积层中使一些最大池化层以及3个全连接层后的1000个softmax输出。为加快训练速度采用非饱和线性函数和能进行高效卷积运算的GPU实现。为减少全连接层中的过拟合,采用了数据增强、dropout正则化两种防止过拟合的方法。

在这里插入图片描述

1. LRN

局部响应归一实现了一种模仿真实神经元的横向抑制,从而在使用不同内核计算的神经元输出之间产生较大的竞争。它是指在某个batch中某个位置(x,y)上跨通道方向上的归一化。

在这里插入图片描述

2. Data Augmentation

数据增强有两种方式:数据增强 × \times × 10、图像像素去中心化

  1. 从256 × \times × 256的图像中提取5个224 × \times × 224的图像(四角+中心),对五个图像做翻转,得到10个图像
  2. RGB减去各自通道的均值

3. Dropout

Dropout会以50%的概率将隐藏层的神经元输出置为0,以这种方法被置0的神经元不参与网络的前馈和反向传播。因此,每次给网络提供了输入后,神经网络都会采用一个不同的结构,但这些结构都权重共享。这种技术减少了神经元的复杂适应性,因为神经元无法依赖于其他特定的神经元而存在。它被迫学习更强大更鲁棒的功能。测试时,我们试着使用了所有的神经元,并将它们的输出乘以0.5。最后使用Dropout的网络可以更好地解决过拟合现象。
在这里插入图片描述


三、VGG

VGG-16的核心思想就是将大卷积核转化多个小卷积核替代:5 × \times × 5卷积用2个3 × \times × 3卷积代替;7 × \times × 7卷积用3个3 × \times × 3卷积代替。
在这里插入图片描述


四、GoogLeNet

1. Inception-V1

为什么提出Inception?
在提出GoogLeNet之前,为提高网络性能只能提高网络的深度和宽度(增加隐藏层和各层神经元的数量),但这种方法存在问题:

  • 导致更大的参数空间、更容易过拟合
  • 需要更多的计算资源
  • 网络越深,梯度容易消失
    为解决上述问题,GoogLeNet作者提出把全连接改成稀疏连接,卷积层也是稀疏连接,但是不对称的稀疏数据数值计算效率低下,因为硬件全是针对密集矩阵优化的,所以,我们要找到卷积网络可以近似的最优局部稀疏结构,并且该结构下可以用现有的密度矩阵计算硬件实现,产生的结果就是Inception。

1.1. Inception

在这里插入图片描述
将本来一个串行的网络结构替换为四个分支并行,分别为1 × \times × 1卷积、3 × \times × 3卷积、5 × \times × 5卷积和一个max pooling层。采用大小不同的卷积核意味着感受野的大小不同,可得到不同的尺寸,再再此的基础上增加了3个1 × \times × 1卷积,避免了5 × \times × 5卷积计算量太大的问题。

Inception的作用: 替代了人工确定卷积层中过滤器的类型或者是否创建卷积层和池化层,让网络自己学习它具体需要什么参数。

1.2. 取消全连接层

替代了人工确定卷积层中过滤器的类型或者是否创建卷积层和池化层,让网络自己学习它具体需要什么参数。

1.3. 辅助分类器

有一个深层分类器和浅层分类器,为防止梯度消失。

2. Inception-V2

Inception-V2的主要贡献是提出Batch Normalization,其次改进了部分v1。

Batch Normalization
在训练深度网络时作者提出一个问题“Internal Covariate Shift”。这是由于在训练过程中,网络参数变化所致。具体来说,对于一个神经网络,第n层的输入就是第n-1层的输出,在训练过程中每训练一轮参数就会发送变化,对于一个网络相同的输入,但n-1层的输出却不一样,这导致了第n层的输入也不一样,为解决这个问题提出了Batch Normalization。

Batch Normalization层是一个可学习、有参数的网络层,其本质是在网络的每一层输入的时候,又插入了一个归一化层先做一个归一化处理,用于重新调整数据的分布,然后再进入网络的下一层。使用了近似白化的预处理对数据进行规范化到(0,1)的操作。

Batch Normalization同时解决Internal Covariate Shift问题(内部neuron的数据分布发 生变化),允许较高学习率,取代部分Dropout。

3. Inception-V3

Inception-V3的主要贡献是进一步改进Inception模块。

分解卷积核尺寸:

  • 将卷积核分解为对称的小卷积核
  • 将卷积核分解为不对称的卷积核

取消辅助分类器: 只留下深层分类器,取消浅层辅助分类器。

改变降低特征图尺寸的方式: 有两个通道,一个是卷积层,一个是pooling层,两个通道生成的特征图大小一样,concat在一起即可。

在这里插入图片描述

4. Inception-V4

Inception-V4就是将Inception-V2和Res Net结合。在这里插入图片描述


五、ResNet

ResNet的主要贡献就是增加了一个skip connection将残差和恒等映射结合。
在这里插入图片描述
为什么引入ResNet? 这是由于网络的加深会造成梯度爆炸和梯度消失的问题。


参考文章

🌟https://blog.csdn.net/weixin_39953502/article/details/80966046
https://blog.csdn.net/weixin_39953502/article/details/81027477
https://blog.csdn.net/Love_wanling/article/details/64906206
https://blog.csdn.net/fengbingchun/article/details/114167581
https://blog.csdn.net/sunny_yeah_/article/details/89430124
https://blog.csdn.net/ai_faker/article/details/115935086
https://zhuanlan.zhihu.com/p/52802896

相关文章:

  • 手把手完成智慧路灯的开发,完成设备上云【华为云IoT】
  • SpringBoot数据层测试事务回滚
  • 【计算机毕业设计选题】10套易过的精品毕设项目分享(源码+论文)
  • 【CVAdd】Filter 滤波器
  • 常用安卓开发技巧汇总
  • Vue组件库实现按需引入可以这么做
  • 精选32个最新Python实战项目(附源码),拿走就用
  • MYSQL-约束,条件判断,组函数
  • Docker环境下使用docker-compose一键式搭建RocketMQ(4.5.0版本)集群及其管理工具(外网版)
  • Python爬虫之Js逆向案例(11)-百度翻译
  • NX二次开发-外部开发模式exe(不打开NX进行后台操作)以及封装exe传参调用
  • 分享8个前端可以制作360度WebVr全景视图框架
  • 物联网毕设 -- 智能厨房检测系统
  • I2C基础
  • 社区老年人服务系统设计与实现(安卓APP+SSH后台+MYSQL)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • bearychat的java client
  • FineReport中如何实现自动滚屏效果
  • gops —— Go 程序诊断分析工具
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JS基础之数据类型、对象、原型、原型链、继承
  • LeetCode29.两数相除 JavaScript
  • ReactNative开发常用的三方模块
  • 回流、重绘及其优化
  • 简单数学运算程序(不定期更新)
  • 使用 Xcode 的 Target 区分开发和生产环境
  • postgresql行列转换函数
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #图像处理
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (52)只出现一次的数字III
  • (C11) 泛型表达式
  • (floyd+补集) poj 3275
  • (function(){})()的分步解析
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (ZT)薛涌:谈贫说富
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)原生js案例之数码时钟计时
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (实战篇)如何缓存数据
  • (转)Linux整合apache和tomcat构建Web服务器
  • ***监测系统的构建(chkrootkit )
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net core 依赖注入的基本用发
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net连接oracle数据库
  • .NET是什么
  • @property括号内属性讲解