在transformer横行的时代,一些经典的图卷积网络框架貌似失去了原有的光辉。但是,
因此,本文将讲解与回顾CV领域经典的图卷积网络框架:
LeCun认为,使用机器学习的技术解决模式识别问题变得越发重要。他写这篇论文的一个重要目的就是证明模式识别的系统可以依赖自动学习的技术,而不是手工设计的启发式方法。
在使用机器学习自动识别字符之前,研究者通常使用人工设计特征抽取的方式,将图像的特征抽取出来,然后使用分类器进行分类,得到字符识别的结果。

上述提取特征需要人为去设定,何不来利用机器去自主学习特征?接下来就是重点内容,我们介绍一下LeNet-5的结构。LeNet-5是用来处理手写字符的识别问题的。总共有7层。其结果如下:

输入:32x32的灰度图像,也就是一个通道,那么一个图像就是一个2维的矩阵,没有RGB三个通道。
Layer1:6个大小为5x5的卷积核,步长为1。因此,到这里的输出变成了28x28x6。
Layer2:2x2大小的池化层,使用的是average pooling,步长为2。那么这一层的输出就是14x14x6。
Layer3:16个大小为5x5的卷积核,步长为1。但是,这一层16个卷积核中只有10个和前面的6层相连接。也就是说,这16个卷积核并不是扫描前一层所有的6个通道。

Layer4:和第二层一样,2x2大小的池化层,使用的是average pooling,步长为2。
Layer5:全连接卷积层,120个卷积核,大小为1x1。
这里的第五层转换理解起来有点困难,第四层结束输出为16x5x5,相当于这里16x5x5展开为400个特征,然后使用120神经元去做全连接,如下图所示:

Layer6:全连接层,隐藏单元是84个。
Layer7:输出层,输出单元是10个,因为数字识别是0-9。
最终,LeNet-5的总结如下:

LeNet有一些操作,在现在看来并不是很常见。
AlexNet是2012年 ImageNet 竞赛冠军获得者 Hinton 和他的学生 Alex Krizhevsky 设计的。AlexNet 中包含了几个比较新的技术点,也是首次在CNN中成功应用了ReLU、Dropout 和 LRN 等Trick。同时AlexNet 也使用了GPU进行运算加速。
AlexNet 将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:

Alexnet 网络是由五个卷积层和三个全连接层构成,其中最后的输出被送到1000维的softmax函数。
AlexNet网络的计算的过程如下:

输入 → 输出的大小计算过程为:(W - K + 2P) / S + 1,
VGGNet 是由⽜津⼤学计算机视觉组参加图像分类竞赛时提出的,VGG即Visual Geometry Group,VGGNet相对于AlexNet来说,其在深度上翻了⼀番,最深可达19层,所以叫做Very Deep。
VGG研究卷积网络深度的初衷是想搞清楚卷积 “网络深度” 是如何影响大规模图像分类与识别的精度和准确率的,最初是VGG-16号称非常深的卷积网络全称为(GG-Very-Deep-16 CNN),VGG在加深网络层数同时为了避免参数过多,在所有层都采用3x3的小卷积核,卷积层步长被设置为1。
VGG的输入被设置为224x244大小的RGB图像,在训练集图像上对所有图像计算RGB均值,然后把图像作为输入传入VGG卷积网络,使用3x3或者1x1的filter,卷积步长被固定1。
VGG全连接层有3层,根据卷积层+全连接层总数目的不同可以从VGG11 ~ VGG19,最少的VGG11有8个卷积层与3个全连接层,最多的VGG19有16个卷积层+3个全连接层.
此外VGG网络并不是在每个卷积层后面跟上一个池化层,还是总数5个池化层,分布在不同的卷积层之下,下图是VGG11 ~GVV19的结构图:

conv1^2 64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 ->
conv4^3 (512) ->pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096)
-> fc8 (1000) -> softmax。 ^3代表重复3次。

上图中的网络共2(卷积层)+2(卷积层)+3(卷积层)+3(卷积层)+3(卷积层)+1(全连接层)+1(全连接层)+1(全连接层)=16层,因此是一个VGG16网络。

与AlexNet相比,VGG网络的评估结果更好,损失更低,精确度更高,但是VGG网络运行时间更久,由于网络更深,参数更多,耗费了更多的资源,占据了更多的内存。
VGGNet结构所有卷积层的kernel都只有3 x 3。VGGNet中连续使用3组3 x 3kernel(stride为1)的原因是它和使用1个7 x 7kernel产生的效果相同(下图以一维卷积为例解释效果相同的原理),然而更深的网络结构会学习到更复杂的非线性关系使得模型效果更好。该操作带来的另一个好处是参数数量的减少,因为对于一个有C个kernel的卷积层来说,原来的参数个数为7 x 7 x C,而新的参数个数为3 x(3 x 3 x C)。

除此之外,3个串联的3x3卷积层的参数数量要比一个7x7卷积层的参数数量小得多,即333C2/77C2 = 55%,更少的参数意味着减少过拟合,而且更重要的是3个3x3卷积层拥有比1个7x7的卷积层更少的非线性变换(前者拥有3次而后者只有一次),使得CNN对特征的学习能力更强。

GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量来提升网络性能。但这种方式存在以下问题:
解决这些问题的方法当然就是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到,
但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。
那么,有没有一种方法既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,就如人类的大脑是可以看做是神经元的重复堆积,因此,GoogLeNet团队提出了Inception网络结构,就是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。
Inception模块的基本机构如下图,整个Inception结构就是由多个这样的Inception模块串联起来的。


最主要的就是1x1的卷积核,如何发挥作用?
举个例子:
比如,上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后(stride=1,padding=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256= 819200。
而假如上一层输出先经过具有32个通道的1x1卷积层,再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,大约减少了4倍。
基于Inception构建了GoogLeNet的网络结构如下(共22层):

另一种表示:


注:上表中的 #3x3 reduce,#5x5 reduce 表示 在3x3,5x5卷积操作之前使用了1x1卷积的数量。
GoogLeNet网络结构明细表解析如下:
输入:原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
第一层(卷积层):使用7x7的卷积核(滑动步长2,padding为3),64通道,输出为112x112x64,卷积后进行ReLU操作,经过3x3的max pooling(步长为2),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作。
第二层(卷积层)使用3x3的卷积核(滑动步长为1,padding为1),192通道,输出为56x56x192,卷积后进行ReLU操作,经过3x3的max pooling(步长为2),输出为((56 - 3+1)/2)+1=28,即28x28x192,再进行ReLU操作
第三层(Inception 3a层),分为四个分支,采用不同尺度的卷积核来进行处理
第三层(Inception 3b层)
第四层(4a,4b,4c,4d,4e)、第五层(5a,5b)……,与3a、3b类似,在此就不再重复。
主要贡献:
比较:
因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。
ResNet是一种残差网络,是由来自Microsoft Research的4位学者提出的卷积神经网络,在2015年的ImageNet大规模视觉识别竞赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)中获得了图像分类和物体识别的优胜。 残差网络的特点是:
1) 网络的深度为什么重要?
CNN能够提取 low/mid/high-level 的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息。
2) 为什么不能简单地增加网络层数?
对于原来的网络,如果简单地增加深度,会导致梯度弥散或梯度爆炸。
虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。注意,这个不能解释为overfit,因为overfit应该表现为在训练集上表现更好才对。
作者通过实验:通过浅层网络 + y=x 等同映射构造深层模型,结果深层模型并没有比浅层网络有等同或更低的错误率,推断出,
3) 深度网络的退化问题

实验发现深度网络出现了退化问题(Degradation problem):网络深度增加时,网络准确度出现饱和,甚至出现下降。这个现象可以在图中直观看出来:56层的网络比20层网络效果还要差。
4) 怎么解决退化问题?
这有点类似与电路中的“短路”,所以是一种短路连接(shortcut connection)。

残差:观测值与估计值之间的差。
这里H(x)就是观测值,x就是估计值(也就是上一层ResNet输出的特征映射)。
我们一般称x为identity Function,它是一个跳跃连接;称F(x)为ResNet Function。
假设F是求和前网络映射,H是从输入到求和后的网络映射。比如把5映射到5.1,那么引入残差前是F’(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化。
作者由VGG19设计出了plain 网络和残差网络,如下图中部和右侧网络。然后利用这两种网络进行实验对比。

从上图中可以看到,
从表中可以看到,对于18-layer和34-layer的ResNet,其进行的两层间的残差学习,当网络更深时,其进行的是三层间的残差学习,三层卷积核分别是1x1,3x3和1x1,一个值得注意的是隐含层的feature map数量是比较小的,并且是输出feature map数量的1/4。

设计网络的规则:
对于残差网络,维度匹配的shortcut连接为实线,反之为虚线。维度不匹配时,同等映射有两种可选方案:
AlexNee、VGG-19、Incepetion之后,CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是,
而DenseNet(Densely connected convolutional networks) 模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。
DenseNet的另一大特色是,

相比ResNet,DenseNet提出了一个更激进的密集连接机制:即互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入。


可以看到,ResNet是每个层与前面的某层(一般是2~3层)短路连接在一起,连接方式是通过元素级相加。而在DenseNet中,每个层都会与前面所有层在channel维度上连接(concat)在一起(这里各个层的特征图大小是相同的,后面会有说明),并作为下一层的输入。相比ResNet,这是一种密集连接。
综合来看,DenseNet的优势主要体现在以下几个方面:
要注意的一点是,如果实现方式不当的话,DenseNet可能耗费很多GPU显存,一种高效的实现如图所示,更多细节可以见这篇论文Memory-Efficient Implementation of DenseNets。

【1】https://blog.csdn.net/u013963380/article/details/93316111
【2】https://blog.csdn.net/happy488127311/article/details/124192601
【3】https://blog.csdn.net/qq_44766883/article/details/112011420
上一篇:节能有我绿色共享系列活动总结 节能有我绿色生活宣传活动 节能有我绿色共享演讲
下一篇:银行开展最新或2023(历届)征信宣传活动总结 邮储银行2021年征信宣传活动主题 2023银行征信宣传活动总结