Author:louwill
From:深度学习笔记
在对卷积的含义有了一定的理解之后,我们便可以对CNN在最简单的计算机视觉任务图像分类中的经典网络进行探索。CNN在近几年的发展历程中,从经典的LeNet5网络到最近号称最好的图像分类网络EfficientNet,大量学者不断的做出了努力和创新。本讲我们就来梳理经典的图像分类网络。
自从神经网络和深度学习方法引入到图像领域,经过近些年来的发展,从一开始的图像分类逐渐延伸到目标检测和图像分割领域,深度学习也逐渐在计算机视觉领域占据绝对的主导地位。如果要想利用深度学习技术开启计算机视觉领域的研究,明确并深刻理解计算机视觉的三大任务非常关键。计算机视觉三大任务如图1所示。从图中我们可以简单描述计算机视觉三大任务的要义。图像分类就是要回答这张图像是一只猫的问题,跟传统的机器学习任务并无区别,只是我们的输入由数值数据变成图片数据。本节的内容就是介绍CNN在图像分类的发展历史上出现的一些经典的网络。而目标检测则不仅需要回答图像中有什么,而且还得给出这些物体在图像中位置问题,以图中为例就是不仅要识别图中的猫和狗,还得给出猫和狗的具体定位。所以目标检测的任务简单而言就是分类+定位。在无人驾驶的应用中,我们的目标是训练出一个具有极高准确率的物体检测器,在工业产品的瑕疵检测中,我们的目标是能够快速准确的找出产品中的瑕疵区域,在医学肺部结节的检测中,我们的任务是能够根据病人肺部影像很好的检测出结节的位置。图2是一个自动驾驶场景下对于各个目标物体的检测和识别。图像分割则是需要实现像素级的图像分割,以图中为例就是要把每个物体以像素级的标准分割开来,这对算法的要求则更高。图3就是一个定位和实例分割示例。在神经网络和深度学习领域,Yann LeCun可以说是元老级人物。他于1998年在 IEEE 上发表了一篇42页的长文,文中首次提出卷积-池化-全连接的神经网络结构,由LeCun提出的七层网络命名为LeNet5,因而也为他赢得了卷积神经网络之父的美誉。LeNet5的网络结构如图4所示。LeNet5共有7层,输入层不计入层数,每层都有一定的训练参数,其中三个卷积层的训练参数较多,每层都有多个滤波器,也叫特征图,每个滤波器都对上一层的输出提取不同的像素特征。所以LeNet5的简略结构是这样:输入-卷积-池化-卷积-池化-卷积(全连接)-全连接-全连接(输出)。作为标准的卷积网络结构,LeNet5对后世的影响深远,以至于在16年后,谷歌提出 Inception网络时也将其命名为GoogLeNet,以致敬Yann LeCun对卷积神经网络发展的贡献。然而LeNet5提出后的十几年里,由于神经网络的可解释性以及数据和计算资源等原因,神经网络的发展一直处于低谷。故事的转折发展在2012年,也就是现代意义上的深度学习元年。2012年,深度学习三巨头之一Geoffrey Hinton的学生Alex Krizhevsky率先提出了AlexNet,并在当年度的ILSVRC(ImageNet大规模视觉挑战赛)以显著的优势获得当届冠军,top5的错误率降至了16.4%,相比于第二名26.2%的错误率有了极大的提升。这一成绩引起了学界和业界的极大关注,计算机视觉也开始逐渐进入深度学习主导的时代。AlexNet继承了LeCun的LeNet5思想,将卷积神经网络的发展到很宽很深的网络当中,相较于LeNet5的六万个参数,AlexNet包含了6亿3千万条连接,6000万个参数和65万个神经元,其网络结构包括5层卷积,其中第一、第二和第五层卷积后面连接了最大池化层,然后是3个全连接层。AlexNet的网络架构图5所示。AlexNet不算池化层总共有8层,前5层为卷积层,其中第一、第二和第五层卷积都包含了一个最大池化层,后三层为全连接层。所以 AlexNet 的简略结构如下:输入-卷积-池化-卷积-池化-卷积-卷积-卷积-池化-全连接-全连接-全连接-输出。AlexNet 就像是打开了深度学习的潘多拉魔盒,此后不断有新的网络被提出,这些都极大的繁荣了深度学习的理论和实践,致使深度学习逐渐发展兴盛起来。在2013年的ILSVRC 大赛中,Zeiler和Fergus在AlexNet的基础上对其进行了微调提出了ZFNet,使得top5的错误率下降到11.2%,夺得当年的第一,ZFNet和AlexNet的结构很相似,这里就不再单独细述。到了2014年,不断的积累实践和日益强大的计算能力使得研究人员敢于将神经网络的结构推向更深层。在2014年提出的 VGG中,首次将卷积网络结构拓展至16和19层,也就是著名的VGG16 和VGG19。相较于此前的LeNet5和AlexNet的5*5卷积和11*11卷积,VGG结构中大量使用3*3的卷积滤波器和2*2的池化滤波器。VGG的网络虽然开始加深但其结构并不复杂,但作者的实践却证明了卷积网络深度的重要性。深度卷积网络能够提取图像低层次、中层次和高层次的特征,因而网络结构需要的一定的深度来提取图像不同层次的特征。VGG16的结构如图6所示。VGG 的网络结构非常规整,2-2-3-3-3的卷积结构也非常利于编程实现。卷积层的滤波器数量的变化也存在明显的规律,由64到128再到256和512,每一次卷积都是像素呈规律的减少和通道数呈规律的增加。VGG16在当年的ILSVRC以7.32%的top5错误率取得了当年大赛的第二名。这么厉害的网络为什么是第二名?因为当年有比VGG更厉害的网络,也就是前文提到的致敬LeNet5的GoogLeNet。GoogLeNet在借鉴此前1*1卷积思想的基础上,通过滤波器组合构建Inception模块,使得网络可以走向更深且表达能力更强。从2014 年获得当届ILSVRC冠军的Inception v1到现在,Inception网络已经更新到v4了,Inception真正实现了Go Deeper的目的。通常在构建卷积结构时,我们需要考虑是使用1*1卷积、3*3卷积还是5*5卷积以及是否需要添加池化操作。而GoogLeNet的Inception模块就是帮你决定采用什么样的卷积结构。简单而言,Inception模块就是分别采用了1*1卷积、3*3卷积和5*5卷积构建了一个卷积组合然后输出也是一个卷积组合后的输出。对于28*28*192的像素输入,我们分别采用1*1卷积、3*3卷积和5*5卷积以及最大池化四个滤波器对输入进行操作,将对应的输出进行堆积,即32+32+128+64=256,最后的输出大小为 28*28*256。所以总的而言,Inception网络的基本思想就是不需要人为的去决定使用哪个卷积结构或者池化,而是由网络自己决定这些参数,决定有哪些滤波器组合。这是Inception的通道组合功能。Inception另一个关键在于大量使用1*1卷积来生成瓶颈层(Bottleneck Layer)来达到降维的目的,在不降低网络性能的情况下大大缩减了计算量,可谓是Inception网络的点睛之笔。一个基于1*1卷积的Inception模块如图7所示。构建好Inception模块后,将多个类似结构Inception模块组合起来便是一个Inception网络,这是最初的Inception v1版本。Inception v2对网络加入了BN(Batch Normalization)层,进一步提高了网络的性能。Inception v3在v2的基础上提出了卷积分解的方法,比如将3*3卷积分解为1*3和3*1,这样做的好处是既可以提高计算速度又可以将一个卷积拆分为两个,从而加深网络深度。Inception v4最大的特点是在v3的基础上加入了残差连接,形成了Inception-ResNet v1和Inception-ResNet v2两个优秀的网络结构。Inception v1在当年度激烈的ILSVRC大赛中以6.67%的top5错误率荣膺第一名,让同样出色的VGG只能屈居第二,此后每一版本的Inception网络在ImageNet任务上均能达到SOTA(State of the Art)的水准。通过VGG和GoogLeNet 中,我们了解到卷积神经网络也可以进行到很深层,VGG16 和VGG19就是证明。但卷积网络变得更深呢?当然是可以的。深度神经网络能够从提取图像各个层级的特征,使得图像识别的准确率越来越高。但在2014年前后,将卷积网络变深且取得不错的训练效果并不是一件容易的事。深度卷积网络一开始面临的最主要的问题是梯度消失和梯度爆炸。那什么是梯度消失和梯度爆炸呢?所谓梯度消失,就是在深层神经网络的训练过程中,计算得到的梯度越来越小,使得权值得不到更新的情形,这样算法也就失效了。而梯度爆炸则是相反的情况,是指在神经网络训练过程中梯度变得越来越大,权值得到疯狂更新的情形,这样算法得不到收敛,模型也就失效了。当然,通过设置ReLu和归一化激活函数层等手段使得我们很好的解决这些问题。但当我们将网络层数加到更深时却发现训练的准确率在逐渐降低。这种并不是由过拟合造成的神经网络训练数据识别准确率降低的现象我们称之为退化(Degradation)。图6.8是两个网络训练和测试误差情况。我们可以看到56层的普通卷积网络不管是在训练集还是测试集上的训练误差都要高于20层的卷积网络,这是个典型的退化现象。退化问题不解决,深度学习就无法go deeper. 于是何恺明等一众学者就提出了残差网络ResNet。要理解残差网络,就必须理解残差块(residual block)这个结构,因为残差块是残差网络的基本组成部分。回忆一下我们之前学到的各种卷积网络结构(LeNet5/AlexNet/VGG),通常结构就是卷积池化再卷积池化,中间的卷积池化操作可以很多层。类似这样的网络结构何恺明在论文中将其称为普通网络(Plain Network),何凯明认为普通网络解决不了退化问题,我们需要在网络结构上做出创新。何恺明给出的创新在于给网络之间添加一个捷径(shortcuts)或者也叫跳跃连接(skip connection),可以让捷径之间的网络能够学习一个恒等函数,使得在加深网络的情形下训练效果至少不会变差。残差块的基本结构如图9所示。残差块是一个两层的网络结构,输入X经过两层的加权和激活得到F(X)的输出,这是典型的普通卷积网络结构。但残差块的区别在于添加了一个从输入X到两层网络输出单元的shortcut,这使得输入节点的信息单元直接获得了与输出节点的信息单元通信的能力 ,这时候在进行ReLu激活之前的输出就不再是F(X)了,而是F(X)+X。当很多个具备类似结构的这样的残差块组建到一起时,就构成了残差网络。残差网络能够顺利训练很深层的卷积网络,能够很好的解决网络的退化问题。或许你可能会问凭什么加了一条从输入到输出的捷径网络就能防止退化训练更深层的卷积网络?或是说残差网络为什么能有效?我们将上述残差块的两层输入输出符号改为和 ,相应的就有: 在网络中加入L2正则化进行权值衰减或者其他情形下,l+2层的权值是很容易衰减为零的,假设偏置同样为零的情形下就有等号成立。深度学习的试验表明学习这个恒等式并不困难,这就意味着,在拥有跳跃连接的普通网络即使多加几层,其效果也并不逊色于加深之前的网络效果。当然,我们的目标不是保持网络不退化,而是需要提升网络表现,当隐藏层能够学到一些有用的信息时,残差网络的效果就会提升。所以,残差网络之所以有效是在于它能够很好的学习上述那个恒等式,而普通网络学习恒等式都很困难,残差网络在两者相较中自然胜出。
当多个残差块组合到一起便形成了残差网络ResNet。ResNet在2015年ILSVRC大赛上 top5单模型的错误率缩小到了3.57%,在其他数据集上也有着惊人的表现,结果当然就是收割各类奖项了。以上几个网络除了早期的LeNet5之外都是在ILSVRC大赛的助力下不断向前发展的,从这一点来看,ILSVRC大赛和ImageNet数据集对深度学习的发展具有重大意义。ILSVRC大赛于2017年正式停办,但在开办的6年来极大地促进了深度学习和计算机视觉的发展。ImageNet历年top方案如表1所示。 | | | |
| | | ImageNet Classification with Deep Convolutional Neural Networks |
| | | Visualizing and understanding convolutional networks |
| | | Going Deeper with Convolutions |
| | | Very deep convolutional networks for large-scale image recognition |
| | | Deep Residual Learning for Image Recognition |
| | | Aggregated Residual Transformations for Deep Neural Networks |
| | | Squeeze-and-Excitation Networks |
由表1可以看到,2017年的冠军方案SENet的错误率已经降至2.25%,这个精度已经超过人类视觉水平,I LSVRC大赛也在这一年停办,但深度学习和计算机视觉的研究仍然继续向前发展。2017年,刘壮等人在ResNet的基础上提出了DenseNet网络,作为2017年CVPR的最佳论文,作者通过大量使用跨层的密集连接,强化了卷积过程中特征重要性,另外也缩减了模型参数,进一步提高了深度卷积网络的性能。DenseNet密集连接结构如图10所示。除了以上各种优秀的深度卷积网络之外,近几年各种网络都在存储和速度问题上不断做出改进和创新。近两年提出的SqueezeNet、MobileNet、ShuffleNet、NASNet和Xception等深度网络正是致力于让CNN走出实验室达到工业应用的目的而提出的网络结构。作为本节的结尾,我们想重点提一下去年5月份谷歌大脑发布的号称目前最好的CNN分类网络的EfficientNet。EfficientNet在吸取此前的各种网络优化经验的基础上提出了更加泛化的解决方法。什么叫更加泛化的方法呢?作者认为,我们之前关于网络性能优化要么是从网络深度、要么是从网络宽度(通道数)、要么是从输入图像的分辨率单独来进行模型缩放调优的。但实际上网络性能在这三个维度上并不是相互独立的。EfficientNet的核心在于提出了一种混合的模型缩放方法(Compound Model Scaling)算法来综合优化网络深度、宽度和分辨率,通过这种思想设计出来的网络能够在达到当前最优精度的同时,大大减少参数数量和提高计算速度。Compound Model Scaling的设计思想如图11所示。作为谷歌这样超级巨头,自然有大量的数据资源和计算资源来做出这样更加泛化的研究。对于普通人而言,很难有这样的算力来进行成百上千次的大规模调参。但EfficientNet也提高了我们普通人做深度学习的baseline,站在巨人的肩膀上,一直都是件值得兴奋的事情。LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1-9.He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.Huang G, Liu Z, Van Der Maaten L, et al. Densely connected convolutional networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4700-4708.Tan M, Le Q V. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[J]. arXiv preprint arXiv:1905.11946, 2019.