图像识别-经典网络学习总结
Posted AI研习图书馆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像识别-经典网络学习总结相关的知识,希望对你有一定的参考价值。
AI研习图书馆,发现不一样的世界
学习笔记:深度学习-经典图像分类算法AlexNet、VGGNet、GoogLeNet、ResNet重要知识点总结
目录
0、历史
1、AlexNet
1.1 技术架构
1.2 AlexNet特点
2.1 技术架构
2.2 VGGNet特点
3、GoogLeNet
3.1 技术架构
3.2 GoogLeNet是如何进一步提升性能的呢
3.3 GoogLeNet特点
4、ResNet
4.1 技术架构
4.2 深层模型
4.3 ResNet特点
2、VGGNet
0、历史
1、AlexNet
1.1 技术架构
1.2 AlexNet特点
使用ReLU激活函数;
提出Dropout防止过拟合;
使用数据扩充增强数据集(Data augmentation);
水平翻转图像、随机裁剪、平移变换、颜色变换、光照变换等
使用多GPU进行训练;
将上层的结果按照通道维度拆分为2份,分别送入2个GPU,如上一层输出的27×27×96的像素层(被分成两组27×27×48的像素层放在两个不同GPU中进行运算);
LRN局部归一化的使用;
使用重叠池化(3*3的池化核)。
2、VGGNet
2.1 技术架构
2.2 VGGNet特点
VGGNet可以看成是加深版本的AlexNet,都是由卷积层、全连接层两大部分构成。VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降。
1、小卷积核:使用2个3*3卷积核来代替5*5卷积核;
不但具有相同的感受野,且参数更少;
且引入了更多的非线性因素,增强了模型的表达;
2、小池化核:2*2;
3、通道数多:可以提取更多的信息;
4、全连接转卷积(在测试阶段)-解放了输入图片size的限制(通过卷积操作,其最后输出的维度仅为人为定义的通道数);
3、GoogLeNet
GoogLeNet是谷歌(Google)研究出来的深度网络结构,为什么不叫“GoogleNet”,而叫“GoogLeNet”,据说是为了向“LeNet”致敬,因此取名为“GoogLeNet”。
3.1 技术架构
3.2 GoogLeNet是如何进一步提升性能的呢?
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:
(1)参数太多,如果训练数据集有限,很容易产生过拟合;
(2)网络越大、参数越多,计算复杂度越大,难以应用;
(3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
解决这些问题的方法当然就是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。
如何减少参数?
第一步通过2个3*3的卷积核来代替一个5*5的卷积核,感受野相同的情况下,两个3*3的卷积核的参数为2*3*3=18,而5*5卷积核的参数为25个;
在卷积之前通过1*1的卷积核来降低feature map维度,之后再卷积;
将n*n的卷积核替换为1*n和n*1两个卷积核。
3.3 GoogLeNet特点
参数更少:GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍;
性能更好:占用更少的内存和计算资源,且模型结果的性能却更加优越。
4、ResNet
4.1 技术架构
4.2 深层模型
4.2.1 模型加深存在的问题
通过实验可以发现:随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目以后,训练精度和测试精度迅速下降,这说明当网络变得很深以后,深度网络就变得更加难以训练了。
4.2.2 深层模型难以训练的原因
链式法则与梯度弥散:
神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在传播过程中会逐渐消失(假如采用Sigmoid函数,对于幅度为1的信号,每向后传递一层,梯度就衰减为原来的0.25,层数越多,衰减越厉害),导致无法对前面网络层的权重进行有效的调整。
4.3 ResNet特点
假设:假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不应该带来训练集上误差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,便是著名深度残差网络ResNet的灵感来源。
假定某段神经网络的输入是x,期望输出是H(x),即H(x)是期望的复杂潜在映射,如果是要学习这样的模型,则训练难度会比较大;
回想前面的假设,如果已经学习到较饱和的准确率(或者当发现下层的误差变大时),那么接下来的学习目标就转变为恒等映射的学习,也就是使输入x近似于输出H(x),以保持在后面的层次中不会造成精度下降。
在上图的残差网络结构图中,通过“shortcut connections(捷径连接)”的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。于是,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) = H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。
这种残差跳跃式的结构,打破了传统的神经网络n-1层的输出只能给n层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。
至此,神经网络的层数可以超越之前的约束,达到几十层、上百层甚至千层,为高级语义特征提取和分类提供了可行性。
因为经过“shortcut-connections(捷径连接)”后,H(x)=F(x)+x,如果F(x)和x的通道相同,则可直接相加,那么通道不同怎么相加呢。上图中的实线、虚线就是为了区分这两种情况的:
实线的Connection部分,表示通道相同,如上图的第一个粉色矩形和第三个粉色矩形,都是3x3x64的特征图,由于通道相同,所以采用计算方式为H(x)=F(x)+x;
虚线的的Connection部分,表示通道不同,如上图的第一个绿色矩形和第三个绿色矩形,分别是3x3x64和3x3x128的特征图,通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度的。
三层的残差单元
两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),其目的主要就是为了降低参数的数目。左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个1x1的卷积把256维通道降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了16.94倍,因此,右图的主要目的就是为了减少参数量,从而减少计算量。
经典网络虽然已成为过往,但是其间蕴含的研究思想历久弥新,永远值得我们认真研究,借鉴学习~
深度学习基础入门系列,图像识别专栏文章持续完善中,后期会更新系列算法详细解析文章,欢迎关注~
推荐阅读文章
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
......
关注AI研习图书馆,发现不一样的精彩世界
以上是关于图像识别-经典网络学习总结的主要内容,如果未能解决你的问题,请参考以下文章
CV开山之作:《AlexNet》深度学习图像分类经典论文总结学习笔记(原文+总结)
卷积神经网络CNN在图像识别问题应用综述(20191219)