文章目录

  • 摘要
  • 1 LeNet-5
    • 1.1 模型介绍
    • 1.2 模型结构
    • 1.3 各层参数详解
    • 1.4 模型特性
  • 2 AlexNet
    • 2.1 模型介绍
    • 2.2 模型结构
    • 2.3 模型特性
  • 3 VGGNet
    • 3.1 模型介绍
    • 3.2 模型结构
    • 3.3 模型特性
  • 4 GoogLeNet
    • 4.1 模型介绍
    • 4.2 模型结构
      • 4.2.1 Inception_v1
      • 4.2.2 Inception_v2
      • 4.2.3 Inception_v3
      • 4.2.4Inception_v4
    • 4.3 模型特性
  • 5 ResNet
    • 5.1 模型介绍
    • 5.2 模型结构
    • 5.3 模型特性

摘要

图像分类技术一直都是计算机视觉领域的研究热点。近几年来,深度学习算法在图像分类方面取得了突破性进展,通过建立层级特征自动提取模型,得到更准确且接近图像高级语义的特征。卷积神经网络(CNN)是一种识别率很高的深度学习模型,能够提取具有平移、缩放、旋转等不变性的结构特征。这一篇文章是对常用的图像分类模型做总结,包括LeNet-5、AlexNet、VGGNet、GoogLeNet、Resent、ResNeXt、Densenet、SeNet、EfficientNet、EfficientNetV2以及最新的Transformer 模型ConViT 。

如果大家认可,请多转发收藏,有不对的地方也请大家指正。

1 LeNet-5

1.1 模型介绍

LeNet-5是由LeCun在1994年提出的一种用于识别手写数字和机器印刷字符的卷积神经网络(Convolutional Neural Network,CNN),是卷积神经网络的开山之作,其命名来源于作者LeCun的名字,5则是其研究成果的代号,是LeNet的第五个版本。LeNet-5阐述了图像中像素特征之间的相关性能够由参数共享的卷积操作所提取,同时使用卷积、下采样(池化)和非线性映射这样的组合结构,是当前流行的大多数深度图像识别网络的基础。

1.2 模型结构

如上图所示,LeNet-5一共包含7层(输入层不作为网络结构),分别由2个卷积层、2个下采样层和3个连接层组成。

1.3 各层参数详解

1、输入层-INPUT
首先是数据 INPUT 层,输入图像的尺寸统一ReSize为32∗3232*3232∗32。

注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。

2、C1C1C1​层-卷积层
卷积层的计算公式参考这篇文章:CNN基础——卷积神经网络的组成_AI浩-CSDN博客

输入图片:32×3232×3232×32

卷积核大小:5×55×55×5

卷积核种类:666

输出featuremap大小:28×28(32−5+1)=2828×28 (32-5+1)=2828×28(32−5+1)=28

神经元数量:28×28×628×28×628×28×6

可训练参数:(5×5+1)×6(5×5+1) × 6(5×5+1)×6(每个滤波器5×5=255×5=255×5=25个unit参数和一个bias参数,一共6个滤波器)

连接数:(5×5+1)×6×28×28=122304(5×5+1)×6×28×28=122304(5×5+1)×6×28×28=122304

详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 5×55×55×5 的卷积核),得到6个C1C1C1特征图(6个大小为28×28的 feature maps, 32−5+1=2832-5+1=2832−5+1=28)。我们再来看看需要多少个参数,卷积核的大小为5×55×55×5,总共就有6×(5×5+1)=1566×(5×5+1)=1566×(5×5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5×5个像素和1个bias有连接,所以总共有156×28×28=122304156×28×28=122304156×28×28=122304个连接(connection)。有122304122304122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。3、S2S2S2​层-池化层(下采样层)
输入:28×2828×2828×28​

采样区域:2×22×22×2

采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

采样种类:666

输出featureMap大小:14×14(28/2)14×14(28/2)14×14(28/2)

神经元数量:14×14×614×14×614×14×6

连接数:(2×2+1)×6×14×14(2×2+1)×6×14×14(2×2+1)×6×14×14

S2中每个特征图的大小是C1中特征图大小的1/4。

详细说明:第一次卷积之后紧接着就是池化运算,使用 2×2核 进行池化,于是得到了S2,6个14×1414×1414×14的 特征图(28/2=14)(28/2=14)(28/2=14)。S2这个pooling层是对C1中的2×2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。同时有5×14×14×6=58805×14×14×6=58805×14×14×6=5880个连接。

4、C3层-卷积层
输入:S2中所有6个或者几个特征map组合

卷积核大小:5×55×55×5

卷积核种类:16

输出featureMap大小:10×10(14−5+1)=1010×10 (14-5+1)=1010×10(14−5+1)=10

C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合

存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。

则:可训练参数:6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=15166×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=15166×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516

连接数:10×10×1516=15160010×10×1516=15160010×10×1516=151600

详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个10∗1010*1010∗10​的特征图,卷积核大小是 5×55×55×5​. 我们知道S2 有6个 14×14 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:

C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为5×55×55×5,所以总共有6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=15166×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=15166×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516个参数。而图像大小为10×10,所以共有151600个连接。

C3与S2中前3个图相连的卷积结构如下图所示:

上图对应的参数为 3×5×5+13×5×5+13×5×5+1,一共进行6次卷积得到6个特征图,所以有6×(3×5×5+1)6×(3×5×5+1)6×(3×5×5+1)参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。

5、S4层-池化层(下采样层)
输入:10×1010×1010×10

采样区域:2×22×22×2

采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

采样种类:16

输出featureMap大小:5×5(10/2)5×5(10/2)5×5(10/2)

神经元数量:5×5×16=4005×5×16=4005×5×16=400

连接数:16×(2×2+1)×5×5=200016×(2×2+1)×5×5=200016×(2×2+1)×5×5=2000

S4中每个特征图的大小是C3中特征图大小的1/4

详细说明:S4是pooling层,窗口大小仍然是2×2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。有5×5×5×16=20005×5×5×16=20005×5×5×16=2000个连接。连接的方式与S2层类似。

6、C5层-卷积层
输入:S4层的全部16个单元特征map(与s4全相连)

卷积核大小:5×55×55×5

卷积核种类:120120120

输出featureMap大小:1×1(5−5+1)1×1(5-5+1)1×1(5−5+1)

可训练参数/连接:120×(16×5×5+1)=48120120×(16×5×5+1)=48120120×(16×5×5+1)=48120

详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5×5×16+1)×120=48120(5×5×16+1)×120 = 48120(5×5×16+1)×120=48120个参数,同样有48120个连接。C5层的网络结构如下:

7、F6层-全连接层
输入:c5 120维向量

计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。

可训练参数:84×(120+1)=1016484×(120+1)=1016484×(120+1)=10164

详细说明:6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120+1)∗84=10164(120 + 1)*84=10164(120+1)∗84=10164​。F6层的连接方式如下:

8、Output层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

上式wijw_ijwi​j 的值由i的比特图编码确定,i从0到9,j取值从0到7∗12−17*12-17∗12−1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84×10=84084×10=84084×10=840​​个参数和连接。

上图是LeNet-5识别数字3的过程。

各层参数总结

网络层 输入尺寸 核尺寸 输出尺寸 可训练参数量
卷积层C1C_1C1​ 32×32×132\times32\times132×32×1 5×5×1/1,65\times5\times1/1,65×5×1/1,6 28×28×628\times28\times628×28×6 (5×5×1+1)×6(5\times5\times1+1)\times6(5×5×1+1)×6
下采样层S2S_2S2​ 28×28×628\times28\times628×28×6 2×2/22\times2/22×2/2 14×14×614\times14\times614×14×6 (1+1)×6(1+1)\times6(1+1)×6 $ _{注1}$
卷积层C3C_3C3​ 14×14×614\times14\times614×14×6 5×5×6/1,165\times5\times6/1,165×5×6/1,16 10×10×1610\times10\times1610×10×16 1516注21516_{注2}1516注2​
下采样层S4S_4S4​ 10×10×1610\times10\times1610×10×16 2×2/22\times2/22×2/2 5×5×165\times5\times165×5×16 (1+1)×16(1+1)\times16(1+1)×16
卷积层C5C_5C5​∗^*∗ 5×5×165\times5\times165×5×16 5×5×16/1,1205\times5\times16/1,1205×5×16/1,120 1×1×1201\times1\times1201×1×120 (5×5×16+1)×120(5\times5\times16+1)\times120(5×5×16+1)×120
全连接层F6F_6F6​ 1×1×1201\times1\times1201×1×120 120×84120\times84120×84 1×1×841\times1\times841×1×84 (120+1)×84(120+1)\times84(120+1)×84
输出层 1×1×841\times1\times841×1×84 84×1084\times1084×10 1×1×101\times1\times101×1×10 (84+1)×10(84+1)\times10(84+1)×10

​ 注1 在LeNet中,下采样操作和池化操作类似,但是在得到采样结果后会乘以一个系数和加上一个偏置项,所以下采样的参数个数是(1+1)×6(1+1)\times6(1+1)×6而不是零。

注2 C3C_3C3​卷积层可训练参数并未直接连接S2S_2S2​中所有的特征图(Feature Map),而是采用如图4.2所示的采样特征方式进行连接(稀疏连接),生成的16个通道特征图中分别按照相邻3个特征图、相邻4个特征图、非相邻4个特征图和全部6个特征图进行映射,得到的参数个数计算公式为6×(25×3+1)+6×(25×4+1)+3×(25×4+1)+1×(25×6+1)=15166\times(25\times3+1)+6\times(25\times4+1)+3\times(25\times4+1)+1\times(25\times6+1)=15166×(25×3+1)+6×(25×4+1)+3×(25×4+1)+1×(25×6+1)=1516,在原论文中解释了使用这种采样方式原因包含两点:限制了连接数不至于过大(当年的计算能力比较弱);强制限定不同特征图的组合可以使映射得到的特征图学习到不同的特征模式。

1.4 模型特性

  • 卷积网络使用一个3层的序列组合:卷积、下采样(池化)、非线性映射(LeNet-5最重要的特性,奠定了目前深层卷积网络的基础)
  • 使用卷积提取空间特征
  • 使用映射的空间均值进行下采样
  • 使用tanhtanhtanh或sigmoidsigmoidsigmoid进行非线性映射
  • 多层神经网络(MLP)作为最终的分类器
  • 层间的稀疏连接矩阵以避免巨大的计算开销

2 AlexNet

2.1 模型介绍

​ AlexNet是由Alex Krizhevsky 提出的首个应用于图像分类的深层卷积神经网络,该网络在2012年ILSVRC(ImageNet Large Scale Visual Recognition Competition)图像分类竞赛中以15.3%的top-5测试错误率赢得第一名。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。 这对于传统的机器学习分类算法而言,已经相当的出色。

AlexNet中包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU、Dropout和LRN等Trick。同时AlexNet也使用了GPU进行运算加速。

AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:

(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。

(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。

(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

(5)使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。

(6)数据增强,随机地从256256的原始图像中截取224224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。

2.2 模型结构

​ 首先这幅图分为上下两个部分的网络,论文中提到这两部分网络是分别对应两个GPU,只有到了特定的网络层后才需要两块GPU进行交互,这种设置完全是利用两块GPU来提高运算的效率,其实在网络结构上差异不是很大。为了更方便的理解,我们假设现在只有一块GPU或者我们用CPU进行运算,我们从这个稍微简化点的方向区分析这个网络结构。网络总共的层数为8层,5层卷积,3层全连接层。

第一层:卷积层1,输入为 224 × 224 × 3 的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×311 × 11 × 311×11×3,stride = 4,stride表示的是步长,padding = 2。
卷积后的图形大小是怎样的呢?
wide = (224 + 2 * padding - kernel_size) / stride + 1 = 55
height = (224 + 2 * padding - kernel_size) / stride + 1 = 55
dimention = 96
然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map
最终第一层卷积的输出为96×55×5596×55×5596×55×55

第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×485 × 5 × 485×5×48, padding = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3), stride = 2;

第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3 × 3 × 256 ), padding = 1, 第三层没有做LRN和Pool

第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3 × 3 ), padding = 1, 和第三层一样,没有LRN和Pool

第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3 × 3 ), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;

第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。

下图是对上面参数的总结。

2.3 模型特性

  • 所有卷积层都使用ReLU作为非线性映射函数,使模型收敛速度更快
  • 在多个GPU上进行模型的训练,不但可以提高模型的训练速度,还能提升数据的使用规模
  • 使用LRN对局部的特征进行归一化,结果作为ReLU激活函数的输入能有效降低错误率
  • 重叠最大池化(overlapping max pooling),即池化范围z与步长s存在关系z>s(如[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HkWEhXO-1629694836350)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]中核尺度为3×3/2),避免平均池化(average pooling)的平均效应
  • 使用随机丢弃技术(dropout)选择性地忽略训练中的单个神经元,避免模型的过拟合

3 VGGNet

3.1 模型介绍

​ VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军(冠军由GoogLeNet以6.65%的错误率夺得)和25.32%的错误率夺得定位任务(Localization)的第一名(GoogLeNet错误率为26.44%),网络名称VGGNet取自该小组名缩写。VGGNet是首批把图像分类的错误率降低到10%以内模型,同时该网络所采用的 卷积核的思想是后来许多模型的基础,该模型发表在2015年国际学习表征会议(International Conference On Learning Representations, ICLR)后至今被引用的次数已经超过1万4千余次,yyds!。很多的物体检测模型的主干网络(例如SSD、M2Det)都是采用VGGNet、还有图像风格迁移、图像分割等等,所以VGGNet是我们深度学习必学的模型之一。

3.2 模型结构

上图是VGG16-3模型,在原论文中的VGGNet包含了6个版本的演进,分别对应VGG11、VGG11-LRN、VGG13、VGG16-1、VGG16-3和VGG19,如下图:

不同的后缀数值表示不同的网络层数(VGG11-LRN表示在第一层中采用了LRN的VGG11,VGG16-1表示后三组卷积块中最后一层卷积采用卷积核尺寸为1×1 ,相应的VGG16-3表示卷积核尺寸为 3×3),本节介绍的VGG16为VGG16-3,参数的详细配置如下表:

网络层 输入尺寸 核尺寸 输出尺寸 参数个数
卷积层 C_11 224×224×3 3×3×64/1 224×224×64 (3×3×3+1)×64
卷积层 C_12 224×224×64 3×3×64/1 224×224×64 (3×3×64+1)×64
池化 Max Pool 1 224×224×64 2×2/2 112×112×64 0
卷积层 C_21 112×112×64 3×3×128/1 112×112×128 (3×3×64+1)×128
卷积层 C_22 112×112×128 3×3×128/1 112×112×128 (3×3×128+1)×128
池化 Max Pool 2 112×112×128 2×2/2 56×56×128 0
卷积层 C_31 56×56×128 3×3×256/1 56×56×256 (3×3×128+1)×256
卷积层 C_32 56×56×256 3×3×256/1 56×56×256 (3×3×256+1)×256
卷积层 C_33 56×56×256 3×3×256/1 56×56×256 (3×3×256+1)×256
池化 Max Pool 3 56×56×256 2×2/2 28×28×256 0
卷积层 C_41 28×28×256 3×3×512/1 28×28×512 (3×3×256+1)×512
卷积层 C_42 28×28×512 3×3×512/1 28×28×512 (3×3×512+1)×512
卷积层 C_43 28×28×512 3×3×512/1 28×28×512 (3×3×512+1)×512
池化 Max Pool 4 28×28×512 2×2/2 14×14×512 0
卷积层 C_51 14×14×512 3×3×512/1 14×14×512 (3×3×512+1)×512
卷积层 C_52 14×14×512 3×3×512/1 14×14×512 (3×3×512+1)×512
卷积层 C_53 14×14×512 3×3×512/1 14×14×512 (3×3×512+1)×512
池化 Max Pool 5 14×14×512 2×2/2 7×7×512 0
全连接层 FC_1 7×7×512 (7×7×512)×4096 1×4096 (7×7×512+1)×4096
全连接层 FC_2 1×4096 4096×4096 1×4096 (4096+1)×4096
全连接层 FC_3 1×4096 4096×1000 1×1000 (4096+1)×1000

3.3 模型特性

整个网络都使用了同样大小的卷积核尺寸3×3和最大池化尺寸2×2。
1×1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
两个3×3的卷积层串联相当于1个5×5的卷积层,感受野大小为5×5。同样地,3个3×3的卷积层串联的效果则相当于1个7×7的卷积层。这样的连接方式使得网络参数量更小,而且多层的激活函数令网络对特征的学习能力更强。
注:VGGNet在训练时有一个小技巧,先训练浅层的的简单网络VGG11,再复用VGG11的权重来初始化VGG13,如此反复训练并初始化VGG19,能够使训练时收敛的速度更快。在训练过程中使用多尺度的变换对原始数据做数据增强,使得模型不易过拟合。

VGG Pytorch复现参考:【图像分类】一文学会VGGNet(pytorch)_AI浩-CSDN博客

VGG 实战:【图像分类】实战——使用VGG16实现对植物幼苗的分类(pytroch)_AI浩-CSDN博客

4 GoogLeNet

4.1 模型介绍

GoogLeNet作为2014年ILSVRC在分类任务上的冠军,以6.65%的错误率力压VGGNet等模型,在分类的准确率上面相比过去两届冠军ZFNet和AlexNet都有很大的提升。从名字GoogLeNet可以知道这是来自谷歌工程师所设计的网络结构,而名字中GoogLeNet更是致敬了LeNet。GoogLeNet中最核心的部分是其内部子网络结构Inception,该结构灵感来源于NIN,至今已经经历了四次版本迭代(Inception_v1-4)。下表是Inception_v1-4提出的时间表

Inception不同版本的性能比较图

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:
1)参数太多,如果训练数据集有限,很容易产生过拟合;
2)网络越大、参数越多,计算复杂度越大,难以应用;
3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
我们希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。在这种需求和形势下,Google研究人员提出了Inception的方法。

4.2 模型结构

如图所示,GoogLeNet相比于以前的卷积神经网络结构,除了在深度上进行了延伸,还对网络的宽度进行了扩展,整个网络由许多块状子网络的堆叠而成,这个子网络构成了Inception结构。为了更详细的了解Inception,下面对Inception_v1、Inception_v2、Inception_v3、Inception_v4做更详细的说明。

4.2.1 Inception_v1

Inception_v1在同一层中采用不同的卷积核,并对卷积结果进行合并; 下面的两张图展示Inception_v1采用的两种卷积模块a和b。

对上图做以下说明:

1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;

2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;

3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。

4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。

但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴NIN2,采用1x1卷积核来进行降维。

例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

具体改进后的Inception Module如下图:

GoogLeNet中Inception_v1网络参数配置

网络层 输入尺寸 核尺寸 输出尺寸 参数个数
卷积层 C_ 11 H× W ×C_1 1 ×1 × C_2 /2 frac H 2 × frac W 2 × C_2 (1 ×1 × C_1 +1) × C_2
卷积层 C_ 21 H × W × C_2 1 ×1 × C_2 /2 frac H 2 × frac W 2 × C_2 (1 ×1 × C_2 +1) × C_2
卷积层 C_ 22 H × W × C_2 3 ×3 × C_2 /1 H × W × C_2 /1 (3 ×3 × C_2 +1) × C_2
卷积层 C_ 31 H × W × C_1 1 ×1 × C_2 /2 frac H 2 × frac W 2 × C_2 (1 ×1 × C_1 +1) × C_2
卷积层 C_ 32 H × W × C_2 5 ×5 × C_2 /1 H × W × C_2 /1 (5 ×5 × C_2 +1) × C_2
下采样层 S_ 41 H × W × C_1 3 ×3/2 frac H 2 × frac W 2 × C_2 0
卷积层 C_ 42 frac H 2 × frac W 2 × C_2 1 ×1 × C_2 /1 frac H 2 × frac W 2 × C_2 (3 ×3 × C_2 +1) × C_2
合并层 M frac H 2 × frac W 2 × C_2 ( ×4) 拼接 frac H 2 × frac W 2 ×( C_2 ×4) 0

4.2.2 Inception_v2

Inception_v2组合不同卷积核的堆叠形式,并对卷积结果进行合并;把55的卷积改成了两个33的卷积串联,它说一个55的卷积看起来像是一个55的全连接,所以干脆用两个3*3的卷积,第一层是卷积,第二层相当于全连接,这样可以增加网络的深度,并且减少了很多参数。模型的结构如下图:

Inception_v2还引入了使用了Batch Normalization,加了这个以后训练起来收敛更快,学习起来自然更高效,可以减少dropout的使用。

28x28 的 Inception 模块的数量由 2 增加到了 3.

Inception 模块,Ave 和 Max Pooling 层均有用到. 参考表格。

两个 Inception 模块间不再使用 pooling 层;而在模块 3c 和 4e 中的 concatenation 前采用了 stride-2 conv/pooling 层.

详细的参数列表

4.2.3 Inception_v3

Inception_v3则在v_2基础上进行深度组合的尝试,输入改为299×299×3。

Inception_V3出了采用Inception_V2中,将5×5的卷积分解成两个3×3的卷积,还衍生出了非对称分解,将一个3x3的卷积分解为3x1和1x3,进一步衍生出了一种混合两种分解方式的结构Inception_V3三种结构如下图:

4.2.4Inception_v4

Inception_v4结构相比于前面的版本更加复杂,不仅使用了前面的Inception,同时子网络中嵌套着子网络,作者还尝试了 **Residual Connection。**Inception_v4的输入是384×384×3

4.3 模型特性

  • Inception V1——构建了1x1、3x3、5x5的 conv 和3x3的 pooling 的分支网络,同时使用 MLPConv全局平均池化,扩宽卷积层网络宽度,增加了网络对尺度的适应性;

  • Inception V2——提出了 Batch Normalization,代替 DropoutLRN,其正则化的效果让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高,同时学习 VGG 使用两个3×33×33×3的卷积核代替5×55×55×5的卷积核,在降低参数量同时提高网络学习能力;

  • Inception V3——引入了 Factorization,将一个较大的二维卷积拆成两个较小的一维卷积,比如将3×33×33×3卷积拆成1×31×31×3卷积和3×13×13×1卷积,一方面节约了大量参数,加速运算并减轻了过拟合,同时增加了一层非线性扩展模型表达能力,除了在 Inception Module 中使用分支,还在分支中使用了分支(Network In Network In Network);

  • Inception V4——研究了 Inception Module 结合 Residual Connection,结合 ResNet 可以极大地加速训练,同时极大提升性能,在构建 Inception-ResNet 网络同时,还设计了一个更深更优化的 Inception v4 模型,能达到相媲美的性能

5 ResNet

5.1 模型介绍

ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常明显。

5.2 模型结构

模型的创新点在于提出残差学习的思想,在网络中增加了直连通道,将原始输入信息直接传到后面的层中,如下图所示:


传统的卷积网络或者全连接网络在信息传递的时候或多或少会存在信息丢失,损耗等问题,同时还有导致梯度消失或者梯度爆炸,导致很深的网络无法训练。ResNet在一定程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络只需要学习输入、输出差别的那一部分,简化学习目标和难度。VGGNet和ResNet的对比如下图所示。ResNet最大的区别在于有很多的旁路将输入直接连接到后面的层,这种结构也被称为shortcut或者skip connections。

在ResNet网络结构中会用到两种残差模块,一种是以两个33的卷积网络串接在一起作为一个残差模块,另外一种是11、33、11的3个卷积网络串接在一起作为一个残差模块。如下图所示:

ResNet有不同的网络层数,比较常用的是18-layer,34-layer,50-layer,101-layer,152-layer。他们都是由上述的残差模块堆叠在一起实现的。 下图展示了不同的ResNet模型。

5.3 模型特性

  • 网络较深,控制了参数数量。

  • 存在明显层级,特征图个数层层递进,保证输出特征的表达能力。

  • 使用较少池化层,大量采用下采样,提高传播效率。

  • 没有使用dropout,利用BM和全局平均池化进行正则化,加快训练速度。

  • 层数较高时减少了3x3卷积核的个数,用1x1卷积核控制3x3卷积的输入输出特征map的数量。

    注:代码复现以及实战:

    【图像分类】手撕ResNet——复现ResNet(Pytorch)_AI浩-CSDN博客

    【图像分类】实战——使用ResNet实现猫狗分类(pytorch)_AI浩-CSDN博客

图像分类,一文入魂(上)相关推荐

  1. 两万字深度介绍分布式系统原理,一文入魂

    1 概念 1.1 模型 节点 在具体的工程项目中,一个节点往往是一个操作系统上的进程.在本文的模型中,认为节点是一个完整的.不可分的整体,如果某个程序进程实际上由若干相对独立部分构成,则在模型中可以将 ...

  2. 一文入魂!聊透分布式系统一致性!

    作者 | bdseeker 来源 | BigData之路(ID:bigdata3186) 头图 |  CSDN 下载自视觉中国 前言 上一篇<CAP>写完之后,我又反复回看了多次,发现最后 ...

  3. 科普文:服务器上如何 Node 多版本共存 #31

    科普文:服务器上如何 Node 多版本共存 #31 背景 很多公司的服务器环境没有做隔离,就是全局安装一个 Node.js Runtime,一般很少升级. nvs / nvm 等可以用来切换版本,但无 ...

  4. “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法...

    在win7系统下,Word2010出现了不能正常关闭.打开一个已有word文档,点击右上角关闭按钮后,先提示"word已停止工作,windows正在检查该问题的解决方案",随后提示 ...

  5. django文件——django + jquery-file-upload上传篇(二)-- 插件实现文件上传+进度条显示 +拖入文件上传...

    django + jquery-file-upload 插件实现文件上传+进度条显示 1.model.py class Fujian(models.Model):name = models.CharF ...

  6. win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退。

    #问题描述 win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退. #解决方案 开始卸载重装也不行 安装TiM也一样会发生,最后删除找到错误报告提示的c盘 ...

  7. 使用PicGo+阿里云OSS实现md文档图片上传

    使用PicGo+阿里云OSS实现md文档图片上传 这次给大家带来的是PicG0+阿里云Oss+typora的图床环境搭建,帮助大家提高工作效率+写博客速度! 1.typora安装 给大家一个链接:ty ...

  8. 救助:Word文档页面上下方黑线如何去除-非页眉页角

    Word文档页面上下方黑线如何去除-非页眉页角 情况描述: 昨天建的文档,保存完没仔细看,今天打开发现所有页面上下都有一条黑线,是不可选中的,在正常状态下是纯黑色,点进页眉页脚后变成灰色,所以它是不属 ...

  9. 开发一番赏盲盒小程序怎么抽才能一发入魂呢

    很多人都想做属于自己的一番赏小程序,包括许多玩家在内,但是盲盒一番赏具体的瓦房是怎么样的呢 今天小编就抽时间给大家讲解一下,希望玩家朋友,平台 一发入魂!!! 一番赏盲盒的玩法: 1.全无: 赏品自由 ...

最新文章

  1. Confluence 6 推荐的更新通知设置和禁用
  2. 微信小程序-开心大转盘(圆盘指针)代码分析
  3. 期末Java面向对象程序设计复习稳过不挂指南(更新中)
  4. N个数依次进栈,求所有可能的出栈方式
  5. CDN加速小水管动态应用技巧
  6. ajax上传文件 获取失败,Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法...
  7. office365 自定义_IT外包观察,足不出户,Office365打造教学新体验?
  8. oracle rac standby,oracle RAC数据库建立STANDBY(二)
  9. Spring实现多数据源配置
  10. 什么样的人才容易被骗?
  11. 今天终于结束了考试,不知道结果
  12. 继续教育计算机组成原理a试卷,计算机组成原理试卷.docx
  13. robotframework-selenium2library-导入可选参数
  14. 摄影构图学83年绝版_摄影师拍照好看的6个秘密:拍照必会构图技巧
  15. php 错误503的原因,网站503错误原因和解决方法
  16. 一些大任务SQL的优化方案
  17. Android自定义人脸识别框,android自定义虹软人脸识别框/人脸抓拍框/人脸追踪框...
  18. 撩妹代码html,Web前端
  19. 泰坦尼克号沉船练习(Titanic Practice)
  20. 关于DM36x IPNC中IRCUT的使用

热门文章

  1. Elasticsearch如何提升查询效率
  2. 谷歌浏览器检查元素时,开发者工具打开的很慢
  3. 微信小程序关于wx:key的警告
  4. nginx 实现备案域名的配置 + 跨域配置
  5. Adobe软件试用下载
  6. 职场中最重要的情商,是管理情绪
  7. 计算机科学的四大领域,计算机科学CS四大名校解析
  8. mnist手写数字模型训练、保存、加载及图片预测
  9. 计算机课程教学措施,计算机教学改革主要内容和措施
  10. Spring Boot@Bean