0
点赞
收藏
分享

微信扫一扫

图像分类,一文入魂(上)



文章目录


  • ​​摘要​​
  • ​​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 ∗ 32 32*32 32∗32。

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

2、 C 1 C1 C1层-卷积层

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

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

卷积核种类: 6 6 6

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

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

可训练参数: ( 5 × 5 + 1 ) × 6 (5×5+1) × 6 (5×5+1)×6(每个滤波器 5 × 5 = 25 5×5=25 5×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 × 5 5×5 5×5 的卷积核),得到6个 C 1 C1 C1特征图(6个大小为28×28的 feature maps, 32 − 5 + 1 = 28 32-5+1=28 32−5+1=28)。我们再来看看需要多少个参数,卷积核的大小为 5 × 5 5×5 5×5,总共就有 6 × ( 5 × 5 + 1 ) = 156 6×(5×5+1)=156 6×(5×5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5×5个像素和1个bias有连接,所以总共有 156 × 28 × 28 = 122304 156×28×28=122304 156×28×28=122304个连接(connection)。有 122304 122304 122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。​3、 S 2 S2 S2层-池化层(下采样层)

输入: 28 × 28 28×28 28×28​

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

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

采样种类: 6 6 6

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

神经元数量: 14 × 14 × 6 14×14×6 14×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 × 14 14×14 14×14的 特征图 ( 28 / 2 = 14 ) (28/2=14) (28/2=14)。S2这个pooling层是对C1中的2×2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。同时有 5 × 14 × 14 × 6 = 5880 5×14×14×6=5880 5×14×14×6=5880个连接。

4、C3层-卷积层

输入:S2中所有6个或者几个特征map组合

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

卷积核种类:16

输出featureMap大小: 10 × 10 ( 14 − 5 + 1 ) = 10 10×10 (14-5+1)=10 10×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 ) = 1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516

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

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

图像分类,一文入魂(上)_神经网络_02

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 × 5 5×5 5×5,所以总共有 6 × ( 3 × 5 × 5 + 1 ) + 6 × ( 4 × 5 × 5 + 1 ) + 3 × ( 4 × 5 × 5 + 1 ) + 1 × ( 6 × 5 × 5 + 1 ) = 1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516个参数。而图像大小为10×10,所以共有151600个连接。

图像分类,一文入魂(上)_原力计划_03

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

图像分类,一文入魂(上)_计算机视觉_04

上图对应的参数为 3 × 5 × 5 + 1 3×5×5+1 3×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 × 10 10×10 10×10

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

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

采样种类:16

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

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

连接数: 16 × ( 2 × 2 + 1 ) × 5 × 5 = 2000 16×(2×2+1)×5×5=2000 16×(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 = 2000 5×5×5×16=2000 5×5×5×16=2000个连接。连接的方式与S2层类似。

6、C5层-卷积层

输入:S4层的全部16个单元特征map(与s4全相连)

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

卷积核种类: 120 120 120

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

可训练参数/连接: 120 × ( 16 × 5 × 5 + 1 ) = 48120 120×(16×5×5+1)=48120 120×(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层的网络结构如下:

图像分类,一文入魂(上)_计算机视觉_05

7、F6层-全连接层

输入:c5 120维向量

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

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

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

图像分类,一文入魂(上)_原力计划_06

8、Output层-全连接层

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

图像分类,一文入魂(上)_原力计划_07

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

图像分类,一文入魂(上)_神经网络_08

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

各层参数总结

网络层

输入尺寸

核尺寸

输出尺寸

可训练参数量

卷积层 C 1 C_1 C1

32 × 32 × 1 32\times32\times1 32×32×1

5 × 5 × 1 / 1 , 6 5\times5\times1/1,6 5×5×1/1,6

28 × 28 × 6 28\times28\times6 28×28×6

( 5 × 5 × 1 + 1 ) × 6 (5\times5\times1+1)\times6 (5×5×1+1)×6

下采样层 S 2 S_2 S2

28 × 28 × 6 28\times28\times6 28×28×6

2 × 2 / 2 2\times2/2 2×2/2

14 × 14 × 6 14\times14\times6 14×14×6

( 1 + 1 ) × 6 (1+1)\times6 (1+1)×6 $ _{注1}$

卷积层 C 3 C_3 C3

14 × 14 × 6 14\times14\times6 14×14×6

5 × 5 × 6 / 1 , 16 5\times5\times6/1,16 5×5×6/1,16

10 × 10 × 16 10\times10\times16 10×10×16

151 6 注 2 1516_{注2} 1516注2

下采样层 S 4 S_4 S4

10 × 10 × 16 10\times10\times16 10×10×16

2 × 2 / 2 2\times2/2 2×2/2

5 × 5 × 16 5\times5\times16 5×5×16

( 1 + 1 ) × 16 (1+1)\times16 (1+1)×16

卷积层 C 5 C_5 C5 ∗ ^* ∗

5 × 5 × 16 5\times5\times16 5×5×16

5 × 5 × 16 / 1 , 120 5\times5\times16/1,120 5×5×16/1,120

1 × 1 × 120 1\times1\times120 1×1×120

( 5 × 5 × 16 + 1 ) × 120 (5\times5\times16+1)\times120 (5×5×16+1)×120

全连接层 F 6 F_6 F6

1 × 1 × 120 1\times1\times120 1×1×120

120 × 84 120\times84 120×84

1 × 1 × 84 1\times1\times84 1×1×84

( 120 + 1 ) × 84 (120+1)\times84 (120+1)×84

输出层

1 × 1 × 84 1\times1\times84 1×1×84

84 × 10 84\times10 84×10

1 × 1 × 10 1\times1\times10 1×1×10

( 84 + 1 ) × 10 (84+1)\times10 (84+1)×10


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

注2 C 3 C_3 C3卷积层可训练参数并未直接连接 S 2 S_2 S2中所有的特征图(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 ) = 1516 6\times(25\times3+1)+6\times(25\times4+1)+3\times(25\times4+1)+1\times(25\times6+1)=1516 6×(25×3+1)+6×(25×4+1)+3×(25×4+1)+1×(25×6+1)=1516,在原论文中解释了使用这种采样方式原因包含两点:限制了连接数不至于过大(当年的计算能力比较弱);强制限定不同特征图的组合可以使映射得到的特征图学习到不同的特征模式。


1.4 模型特性


  • 卷积网络使用一个3层的序列组合:卷积、下采样(池化)、非线性映射(LeNet-5最重要的特性,奠定了目前深层卷积网络的基础)
  • 使用卷积提取空间特征
  • 使用映射的空间均值进行下采样
  • 使用 t a n h tanh tanh或 s i g m o i d sigmoid sigmoid进行非线性映射
  • 多层神经网络(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)数据增强,随机地从256​256的原始图像中截取224​224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。

2.2 模型结构

图像分类,一文入魂(上)_计算机视觉_09

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

第一层:卷积层1,输入为 224 × 224 × 3 的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11 × 11 × 3 11 × 11 × 3 11×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 × 55 96×55×55 96×55×55

第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为: 5 × 5 × 48 5 × 5 × 48 5×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。

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

图像分类,一文入魂(上)_神经网络_10

2.3 模型特性


  • 所有卷积层都使用ReLU作为非线性映射函数,使模型收敛速度更快
  • 在多个GPU上进行模型的训练,不但可以提高模型的训练速度,还能提升数据的使用规模
  • 使用LRN对局部的特征进行归一化,结果作为ReLU激活函数的输入能有效降低错误率
  • 重叠最大池化(overlapping max pooling),即池化范围z与步长s存在关系z>s(如图像分类,一文入魂(上)_计算机视觉_11[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 模型结构

图像分类,一文入魂(上)_计算机视觉_12

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

图像分类,一文入魂(上)_计算机视觉_13

不同的后缀数值表示不同的网络层数(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,能够使训练时收敛的速度更快。在训练过程中使用多尺度的变换对原始数据做数据增强,使得模型不易过拟合。

4 GoogLeNet

4.1 模型介绍

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

图像分类,一文入魂(上)_图像处理_14 Inception不同版本的性能比较图

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:

1)参数太多,如果训练数据集有限,很容易产生过拟合;

2)网络越大、参数越多,计算复杂度越大,难以应用;

3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。

我们希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。在这种需求和形势下,Google研究人员提出了Inception的方法。

4.2 模型结构

图像分类,一文入魂(上)_深度学习_15

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

4.2.1 Inception_v1

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

图像分类,一文入魂(上)_图像处理_16

对上图做以下说明:

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如下图:

图像分类,一文入魂(上)_神经网络_17

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

图像分类,一文入魂(上)_神经网络_18图像分类,一文入魂(上)_神经网络_19

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

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

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

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

详细的参数列表

图像分类,一文入魂(上)_原力计划_20

4.2.3 Inception_v3

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

图像分类,一文入魂(上)_计算机视觉_21

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

图像分类,一文入魂(上)_计算机视觉_22图像分类,一文入魂(上)_原力计划_23图像分类,一文入魂(上)_原力计划_24

4.2.4Inception_v4

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

图像分类,一文入魂(上)_深度学习_25

图像分类,一文入魂(上)_神经网络_26

4.3 模型特性


  • Inception V1​——构建了1x1、3x3、5x5的 conv 和3x3的 pooling 的​分支网络​,同时使用 ​MLPConv​ 和​全局平均池化​,扩宽卷积层网络宽度,增加了网络对尺度的适应性;
  • Inception V2​——提出了 ​Batch Normalization​,代替 ​Dropout​ 和 ​LRN​,其正则化的效果让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高,同时学习 ​VGG​ 使用两个 3 × 3 3×3 3×3的卷积核代替 5 × 5 5×5 5×5的卷积核,在降低参数量同时提高网络学习能力;
  • Inception V3​——引入了 ​Factorization​,将一个较大的二维卷积拆成两个较小的一维卷积,比如将 3 × 3 3×3 3×3卷积拆成 1 × 3 1×3 1×3卷积和 3 × 1 3×1 3×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 模型结构

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

图像分类,一文入魂(上)_计算机视觉_27

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

图像分类,一文入魂(上)_深度学习_28

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

图像分类,一文入魂(上)_图像处理_29

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

图像分类,一文入魂(上)_原力计划_30

5.3 模型特性


  • 网络较深,控制了参数数量。
  • 存在明显层级,特征图个数层层递进,保证输出特征的表达能力。
  • 使用较少池化层,大量采用下采样,提高传播效率。
  • 没有使用dropout,利用BM和全局平均池化进行正则化,加快训练速度。
  • 层数较高时减少了3x3卷积核的个数,用1x1卷积核控制3x3卷积的输入输出特征map的数量。
举报

相关推荐

0 条评论