CNN系列之图像分类

发布 : 2020-01-23 分类 : 深度学习 浏览 :

LeNet

LeNet 是一种典型的卷积神经网络的结构,由 Yann LeCun 发明。它的网路结构如下图:
LeNet-5-structure.png

代码实现参考下图结构:
f3xo7y48br.png
LeNet-5 网络是针对灰度图进行训练的,输入图像大小为32*32*1

AlexNet

  • 1.贡献:ILSVRC2012 冠军,展现出了深度 CNN 在图像任务上的惊人表现,掀起 CNN 研究的热潮,是如今深度学习和 AI 迅猛发展的重要原因。ImageNet 比赛为一直研究神经网络的 Hinton 提供了施展平台,AlexNet 就是由 hinton 和他的两位学生发表的,在 AlexNet 之前,深度学习已经沉寂了很久。
  • 2.网络结构:如下图所示,8 层网络,参数大约有 60 million,使用了 relu 函数,头两个全连接层使用了 0.5 的 dropout。使用了 LRN 和重叠的池化,现在 LRN 都不用了,一般用 BN 作 Normalization。当时使用了多 GPU 训练。
  • 3.预处理:先 down-sample 成最短边为 256 的图像,然后剪出中间的 256x256 图像,再减均值做归一化(over training set)。 训练时,做数据增强,对每张图像,随机提取出 227x227 以及水平镜像版本的图像。除了数据增强,还使用了 PCA 对 RGB 像素降维的方式来缓和过拟合问题。
  • 4.预测:对每张图像提取出 5 张(四个角落以及中间)以及水平镜像版本,总共 10 张,平均 10 个预测作为最终预测。
  • 5.超参数:SGD,学习率 0.01,batch size 是 128,momentum 为 0.9,weight decay 为 0.0005(论文有个权重更新公式),每当 validation error 不再下降时,学习率除以 10。权重初始化用(0,0.01)的高斯分布,二四五卷积层和全连接层的 bias 初始化为 1(给 relu 提供正值利于加速前期训练),其余 bias 初始化为 0。
  • AlexNet Architecture

architecture.png

  • AlexNet 每层的超参数及参数数量

VGG16

VGGNet是由牛津大学计算机视觉组和 Google DeepMind 项目的研究员共同研发的卷积神经网络模型,包含 VGG16 和 VGG19 两种模型,其网络模型如图所示。

从网络模型可以看出,VGG16 相比 AlexNet 类的模型具有较深的深度,通过反复堆叠3*3的卷积层和2*2的池化层,VGG16 构建了较深层次的网络结构,整个网络的卷积核使用了一致的3*3的尺寸,最大池化层尺寸也一致为2*2。与 AlexNet 主要有以下不同:

  • Vgg16 有 16 层网络,AlexNet 只有 8 层;
  • 在训练和测试时使用了多尺度做数据增强。

1.感受野

对于给定的感受野,采用堆积的小卷积核优于采用大的卷积核,因为可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。

VGG 中,使用 3 个 3x3 卷积核来代替 7x7 卷积核,使用了 2 个 3x3 卷积核来代替 5*5 卷积核,这样做的主要目的是在保证具有相同感受野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。

此外 VGG 使用相同大小的卷积核,还利于模块化设计,方便代码实现。

2.模型参数

VGG 层之间高和宽减半、通道数翻倍的设计使得多数卷积层都有相同的模型参数尺寸和计算复杂度。由于每个卷积层的窗口大小一样,所以每层的模型参数尺寸和计算复杂度与输入高、输入宽。输入通道数和输出通道数的乘积成正比。

NIN

全称Network in network,顾名思义,该网络的目的就是用某种方式堆叠小的网络。

左图展示了 AlexNet 和 VGG 的网络结构,右图展示了 NiN 的网络结构。

1.局部块

nin.png

左图是 AlexNet 和 VGG 的网络结构局部,右图是 NiN 的网络结构局部

NiN 块是 NiN 中的基础块。它由一个卷积层加两个充当全连接层的卷积层串联而成。其中第一个卷积层的超参数可以自行设置,而而第二和第三个卷积层的超参数一般是固定的。

如果要堆叠小模型,那么就无法避免全连接层,而将卷积结果的特征图转为全连接的维度转换,将耗费大量的资源。而使用 1x1 的卷积层正好可以完成这一替换。1x1 的卷积层,可以看成全连接层,其中空间维度(高和宽)上的每个元素相当于样本,通道相当于特征。因此,NIN 使用 1x1 卷积层来替代全连接层,从而使空间信息能够自然传递到后面的层。

2.替代 FC,使用全局平均池化层求分类

NiN 还有一个设计与 AlexNet 显著不不同:NiN 去掉了了 AlexNet 最后的 3 个全连接层,取而代之地,NiN 使用用了输出通道数等于标签类别数的 NiN 块,然后使用全局平均池化层对每个通道中所有元素求平均并直接用于分类。
这里的全局平均池化层即窗口形状等于输入空间维形状的平均池化层。
NiN 的这个设计的好处是可以显著减小模型参数尺寸,从而缓解过拟合。然而,该设计有时会造成获得有效模型的训练时间的增加。

NiN 的以上设计思想影响了后面一系列卷积神经网络的设计。

GoogLeNet

GoogleNet是 2014 年 ImageNet 图像识别挑战赛中的冠军。这里介绍的是其第一个版本。网络结构如下:
net.png

1.Inception 块

inception.svg
Inception 块结构

该块采用四条线路提取不同空间尺度下的信息,其中 1x1 卷计层用来减少输入通道数或调整输出通道数,以降低模型复杂度。4 条线路都使用了合适的填充来使输入与输出的高和宽一致。

2.结构

arch.png

3.总结

  • Inception 块相当于一个有 4 条线路的子网络。它通过不同窗口形状的卷积层和最大池化层来并行抽取信息,并使用 1x1 卷积层减少通道数从而而降低模型复杂度。
  • GoogLeNet 将多个设计精细的 Inception 块和其他层串联起来。其中 Inception 块的通道数分配之比是在 ImageNet 数据集上通过大量的实验得来的。
  • GoogLeNet 和它的后继者们一度是 ImageNet 上最高效的模型之一:在类似的测试精度下,它们的计算复杂度往往更低。

ResNet

ResNet有效的解决了深度卷积神经网络难训练的问题。梯度可以认为是信息量,当模型能够完全抽取数据的特征时,梯度就为零了,即模型完全收敛时,模型的梯度变为零。梯度的大小可以认为是你的模型还差多少能够拟合到数据。当做反向传播时,是从顶层往回传递的。而此时,误差很容易被离输出层近的层吸收掉。所以当模型深度很深的情况下,接近输出层的层很可能已经抓取了数据的信息,而到输出层时,梯度已经变为 0.一旦梯度变为零,将会造成收敛变得很慢。

ResNet 通过增加跨层的连接来解决梯度逐层回传时变小的问题。

下面演示了一个跨层的连接。
1.png
最底下那层的输入不仅仅是输出给中间层,而且其与中间层结果相加进入最上层。这样在梯度反传时,最上层梯度可以直接跳过中间层传到最下层,从而避免最下层梯度过小的情况。

为什么叫做残差网络呢?我们可以将上面示意图里的结构拆成两个网络的和,一个一层,一个两层,最下面层是共享的。
2.png
在训练过程中,左边网络因为更简单所以更容易训练,这个小网络没有拟合到的不封,称为残差,则被右边的网络抓取住。
所以直观上来说,即使加深网络,跨层连接仍然可以使得底层网络可以充分的训练,从而不会让训练更难。

1.Residual 块

3.png
残差块里首先有 2 个有相同输出通道数的卷积层。每个卷积层后接一个批量归一化层和 ReLU 激活函数。

ResNet 则使用 4 个由残差块组成的模块,每个模块使用若干个同样输出通道数的残差块。第一个模块的通道数同输入通道数一致。由于之前已经使用了步幅为 2 的最大池化层,所以无须减小高和宽。之后的每个模块在第一个残差块里里里将上一个模块的通道数翻倍,并将高和宽减半。

2.模型结构

4.png

3.复杂度对比

functionclasses.svg
左:非嵌套函数类。实际上,随着复杂度的增加,距离可能会增加。右:使用嵌套函数类不会发生这种情况。¶

  • 网络变宽是平方复杂度,容易过拟合。而变深是线性复杂度,效果更好。

4.总结

  • 残差块通过跨层的数据通道从而能够训练出有效的深度神经网网络。
  • ResNet 深刻影响了后来的深度神经网络的设计。

DenseNet

DenseNet与 ResNet 区别主要在于它将 ResNet 的残差块中的相加变为了 channel 的连结。
1.png
DenseNet 的主要构建模块是稠密块(dense block)和过渡层(transition layer)。前者定义了输入和输出是如何连结的,后者则用来控制通道数,使之不不过大。

1.稠密快

DenseNet 使用了 ResNet 改良版的“BN->relu->conv”结构,它组成了基本的卷积块 conv_block。

稠密块由多个 conv_block 组成,每块使用相同的输出通道数。但在前向计算时,我们将每块的输入和输出在通道维上连结。

2.过渡层

由于每个稠密块都会带来通道数的增加,使用用过多则会带来过于复杂的模型。过渡层用来控制模型复杂度。它通过卷积层来减小通道数,并使用步幅为 2 的平均池化层减半高和宽,从而进一步降低模型复杂度。

3.模型结构

2.png

4.总结

  • 在跨层连接上,不同于 ResNet 中将输入与输出相加,DenseNet 在通道维上连结输入与输出。
  • DenseNet 的主要构建模块是稠密块和过渡层。
本文作者 : HeoLis
原文链接 : https://ishero.net/CNN%E7%B3%BB%E5%88%97%E4%B9%8B%E5%9B%BE%E5%83%8F%E5%88%86%E7%B1%BB.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

学习、记录、分享、获得

微信扫一扫, 向我投食

微信扫一扫, 向我投食