卷积神经网络的发展及各模型的优缺点及说明

作者:Jeremy_lf 时间:2023-04-04 21:58:06 

前沿

在CV领域,我们需要熟练掌握最基本的知识就是各种卷积神经网络CNN的模型架构,不管我们在图像分类或者分割,目标检测,NLP等,我们都会用到基本的CNN网络架构。

CNN从最初的2012年AlexNet横空出世到2014年VGG席卷世界以及2015年ResNet奠定了该领域的霸主地位,网络模型变得越变越深,而且也得到证明,越深的网络拟合效果越好,但网络相应的参数量计算量都极速增加,不利于技术的推广和应用。

因此,一些轻量级的网络结构也慢慢随之出现,比如MobileNet系列,ShuffleNet系列,以及ResNext、DenseNet、EfficenceNet等模型,他们都互相吸取彼此的优点,不但降低了参数量或者计算量,同时分类精度更高,因而受到了更多的关注。

接下来我们就对CNN的各种网络结构以及他们的优缺点进行一次详细的解读!

AlexNet(2012)

卷积神经网络的发展及各模型的优缺点及说明

1、增加了relu非线性激活函数,增强了模型的非线性表达能力。成为以后卷积层的标配。

2、dropout层防止过拟合,成为以后fc层的标配。

3、通过数据增强,来减少过拟合。

4、引入标准化层(Local Response Normalization):通过放大那些对分类贡献较大的神经元,抑制那些对分类贡献较小的神经元,通过局部归一的手段,来达到作用。

VGG(2014)

卷积神经网络的发展及各模型的优缺点及说明

论文的主要创新点在于:

1、用3x3小卷积核代替了5x5或者7x7的卷积核

2、基于ALexnet加深了网络深度,证明了更深的网络,能更好的提取特征。

GoogleNet(2014)

卷积神经网络的发展及各模型的优缺点及说明

在设计网络结构时,不仅仅考虑网络的深度,也会考虑网络的宽度,并将这种结构定义为Inception结构。

卷积神经网络的发展及各模型的优缺点及说明

1、引入1x1卷积的主要目的是为了减少维度,还用于修正线性激活(ReLU)

2、网络最后采用了average pooling(平均池化)来代替全连接层

后面的Inception v2/v3都是基于v1的这种方法在扩展,主要目标有:

1、参数量降低,计算量减少。

2、网络变深,网络非线性表达能力更强

ResNet(2015)

问题:

1、增加深度带来的首个问题就是梯度 * /消散的问题,这是由于随着层数的增多,在网络中反向传播的梯度会随着连乘变得不稳定,变得特别大或者特别小。这其中经常出现的是梯度消散的问题。

2、为了克服梯度消散也想出了许多的解决办法,如使用BatchNorm,将激活函数换为ReLu,使用Xaiver初始化等,可以说梯度消散已经得到了很好的解决

卷积神经网络的发展及各模型的优缺点及说明

已知有网络degradation的情况下,不求加深度能提高准确性,能不能至少让深度网络实现和浅层网络一样的性能,即让深度网络后面的层至少实现恒等映射的作用,根据这个想法,作者提出了residual模块来帮助网络实现恒等映射。

卷积神经网络的发展及各模型的优缺点及说明

ResNet的设计特点:

1、核心单元模块化,可进行简单堆叠。

2、Shortcut方式解决网络梯度消失问题。

3、Average Pooling层代替fc层。

4、引入BN层加快网络训练速度和收敛时的稳定性。

5、加大网络深度,提高模型的特征抽取能力。

MobileNet v1

谷歌在2017年提出专注于移动端或者嵌入式设备中的轻量级CNN网络:MobileNet。最大的创新点是深度可分离卷积。

通过将标准卷积分解为深度卷积核逐点卷积,能够显著的降低参数量和计算量。引入Relu6激活函数。

卷积神经网络的发展及各模型的优缺点及说明

参数量计算量的计算

卷积神经网络的发展及各模型的优缺点及说明

网络结构如下:

卷积神经网络的发展及各模型的优缺点及说明

MobileNet v2

改进点主要有以下几个方面:

1、引入残差结构,先升维再降维,增强梯度的传播,显著减少推理期间所需的内存占用

Inverted Residuals

残差模块:输入首先经过1x1的卷积进行压缩,然后使用3x3的卷积进行特征提取,最后在用1x1的卷积把通道数变换回去。整个过程是“压缩-卷积-扩张”。这样做的目的是减少3x3模块的计算量,提高残差模块的计算效率。

卷积神经网络的发展及各模型的优缺点及说明

倒残差模块:输入首先经过1x1的卷积进行通道扩张,然后使用3x3的depthwise卷积,最后使用1x1的pointwise卷积将通道数压缩回去。整个过程是“扩张-卷积-压缩”。

对低维度做ReLU运算,很容易造成信息的丢失。而在高维度进行ReLU运算的话,信息的丢失则会很少。

卷积神经网络的发展及各模型的优缺点及说明

Linear Bottleneck

这个模块是为了解决一开始提出的那个低维-高维-低维的问题,即将最后一层的ReLU6替换成线性激活函数,而其他层的激活函数依然是ReLU6。

MobileNet v3

V3结合了V1的深度可分离卷积,V2的Inverted Residuals 和 Linear Bottleneck,以及加入SE模块、利用NAS(神经结构的搜索)来搜索网络参数。

卷积神经网络的发展及各模型的优缺点及说明

互补搜索技术 —— NAS & NetAdapt

h-swish激活函数

out = F.relu6(x + 3., self.inplace) / 6.
return out * x

改进一:下图是MobileNet-v2的整理模型架构,可以看到,网络的最后部分首先通过1x1卷积映射到高维,然后通过GAP收集特征,最后使用1x1卷积划分到K类。所以其中起抽取特征作用的是在7x7分辨率上做1x1卷积的那一层。

而V3是先进行池化然后再进行1x1卷积提取特征,V2是先1X1卷积提取特征再池化。

卷积神经网络的发展及各模型的优缺点及说明

ShuffleNet

组卷积

Group convolution是将输入层的不同特征图进行分组,然后采用不同的卷积核再对各个组进行卷积,这样会降低卷积的计算量。因为一般的卷积都是在所有的输入特征图上做卷积,可以说是全通道卷积,这是一种通道密集连接方式(channel dense connection),而group convolution相比则是一种通道稀疏连接方式(channel sparse connection)。

depthwise convolution,这是一种比较特殊的group convolution,此时分组数恰好等于通道数,意味着每个组只有一个特征图。分组卷积的会带来一个矛盾就是特征通信。group convolution层另一个问题是不同组之间的特征图需要通信。所以MobileNet等网络采用密集的1x1 pointwise convolution,因为要保证group convolution之后不同组的特征图之间的信息交流。

为达到特征通信目的,我们不采用dense pointwise convolution,考虑其他的思路:channel shuffle

卷积神经网络的发展及各模型的优缺点及说明

ShuffleNet的核心是采用了两种操作:pointwise group convolution和channel shuffle,这在保持精度的同时大大降低了模型的计算量

其基本单元则是在一个残差单元的基础上改进而成。

卷积神经网络的发展及各模型的优缺点及说明

来源:https://blog.csdn.net/Jeremy_lf/article/details/105501697

标签:卷积神经网络,模型
0
投稿

猜你喜欢

  • asp如何显示数据库中的图片和超级链接?

    2010-06-08 09:38:00
  • pyinstaller打包遇到的问题解决

    2021-07-22 07:56:24
  • 斜角滑动门导航条 DIV+CSS

    2008-07-19 15:45:00
  • div遮罩层实现实例代码

    2009-01-11 18:38:00
  • 如何自动备份Oracle数据库

    2008-06-13 16:54:00
  • 用JavaScript实现UrlEncode和UrlDecode功能

    2008-01-27 11:30:00
  • python文件拆分与重组实例

    2021-10-10 18:10:25
  • 一起来学习一下python的数字类型

    2023-03-10 05:28:30
  • Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法

    2023-08-06 15:58:18
  • oracle快速删除重复的记录

    2010-07-23 13:03:00
  • SQL Server表空间碎片化回收的实现

    2024-01-21 14:08:43
  • 十分钟利用Python制作属于你自己的个性logo

    2021-08-25 05:12:41
  • python输出结果刷新及进度条的实现操作

    2022-09-24 15:13:15
  • 使用Mybatis对数据库进行单表操作的实现示例

    2024-01-16 13:50:45
  • MySQL百万级高并发网站实战攻略

    2009-03-25 15:49:00
  • python字符串定义的三种方式

    2022-05-27 08:17:57
  • php中-> 、=>、::、$this->四种常见符号使用方法技巧

    2023-05-30 07:46:24
  • 详解express + mock让前后台并行开发

    2024-05-03 15:54:35
  • Django框架视图介绍与使用详解

    2021-03-29 08:50:46
  • Python读取sqlite数据库文件的方法分析

    2024-01-21 11:57:15
  • asp之家 网络编程 m.aspxhome.com