关于图像分类的经典
磐创AI本文介绍十年来最佳图像分类论文,来帮助你快速学习计算机视觉
前言计算机视觉是一门将图像和视频转换成机器可理解信号的学科,有了这些信号,程序员可以基于这种高阶进一步控制机器的行为。在计算机视觉任务中,图像分类是最基本的任务之一,它不仅可以用于许多真实的产品,比如googlephoto的标签和AI内容调节,而且还是许多更高级的视觉任务奠定了基础,比如目标检测和视频理解。自从深度学习技术爆发以来,由于该领域的快速变化,初学者往往会觉得学习起来太困难,与典型的软件工程学科不同,使用DCNN进行图像分类的好书并不多,理解这一领域的最好方法是阅读学术论文。
但读什么论文呢?我从哪里开始读起呢?在本篇文章中,我将为初学者介绍10篇最佳论文。通过这些论文,我们可以看到这一领域是如何发展的,以及研究人员是如何根据先前的研究成果提出新的想法的,即使你已经在这个领域工作了一段时间,但它仍然有助于你理清脉络。那么,让我们开始吧。1998年:LeNet深度学习在文档识别中的应用
LeNet于1998年推出,为未来使用卷积神经网络的图像分类研究奠定了基础。许多经典的CNN技术(例如池化层,全连接层,填充和激活层)被该模型用来提取特征并进行分类,借助均方误差损失函数和20个训练周期,在MNIST测试集上的准确率达到99.05%。即使在20年后,许多最先进的分类网络仍然大体上遵循这种模式。2012年:AlexNet深度卷积神经网络的ImageNet分类
尽管LeNet取得了巨大的成就,显示了CNN的潜力,但由于计算能力和数据量有限,该领域的发展停滞了10年。CNN似乎只能解决一些简单的任务,如数字识别,但是对于更复杂的特征(如人脸和物体),带有SVM分类器的HarrCascade或SIFT特征提取器是更可取的方法。然而,在2012年ImageNet大规模视觉识别挑战赛中,Alex Krizhevsky提出了一种基于CNN的解决方案,并将ImageNet测试集top-5的准确率从73.8%大幅提高到84.7%。他们的方法继承了LeNet的多层CNN思想,但大大增加了CNN的规模。从上图中可以看出,与LeNet的32x32相比,AlexNet的输入为224x224,LeNet卷积核有6个通道,但AlexNet的有192个通道。虽然设计没有太大的变化,但随着参数的增加,网络捕捉和表示复杂特征的能力也提高了数百倍。
为了训练一个大模型,亚历克斯使用了两个GTX580GPU,每个GPU有3GB的内存,这开创了GPU训练的潮流,此外,ReLU非线性函数的使用也有助于降低计算成本。除了为网络带来更多的参数外,它还探讨了一个大网络使用一个Dropout层带来的过拟合问题。虽然它的局部响应规范化方法在后来并没有得到太多的普及,但是启发了其他重要的规范化技术,如 BatchNorm 被用来解决梯度饱和问题。总之,AlexNet定义了未来10年的分类网络框架:卷积、ReLu非线性激活、MaxPooling和全连接层的组合。2014年:VGG用于大型图像识别的超深度卷积网络
利用CNN进行视觉识别取得了巨大成功,整个研究界都大吃一惊,所有人都开始研究为什么这种神经网络能够如此出色地工作,例如在2013年发表的“可视化和理解卷积网络”中,马修·齐勒(Matthew Zeiler)讨论了CNN如何获取特征并可视化中间表示,突然之间,每个人都开始意识到CNN在2014年将成为计算机视觉的未来。在所有直接关注者中,Visual Geometry Group的VGG网络是最吸引眼球的网络,在ImageNet测试集上,top-5的准确度达到93.2%,top-1的准确度达到了76.3%。
遵循AlexNet的设计,VGG网络有两个主要更新:1)VGG不仅使用了像AlexNet这样更广泛的网络,而且使用了更深的网络,VGG-19具有19个卷积层,而AlexNet中只有5个。2)VGG还展示了一些小的3x3卷积滤波器可以代替AlexNet的单个7x7甚至11x11滤波器,在降低计算成本的同时实现更好的性能。由于这种优雅的设计,VGG也成为了其他计算机视觉任务中许多开拓性网络的骨干网络,例如用于语义分割的FCN和用于对象检测的Faster R-CNN。随着网络的层数越来越大,从多层反向传播中消失梯问题成为一个更大的问题,该问题限制了研究人员继续添加更多的网络层,因为太深的网络层数会造成网络很难拟合。为了解决这个问题,VGG还讨论了预训练和权重初始化的重要性,但是两年后,学术界为此找到更好的解决方案。2014年:GoogLeNet探索卷积
VGG外形美观,结构简单易懂,但在ImageNet 2014年的所有决赛中,它的表现并不是最好的。GoogLeNet,又名InceptionV1,赢得了最后的奖项。与VGG一样,GoogLeNet的主要贡献之一就是通过22层结构来推动网络深度的极限,这再次证明,向更深更广的方向发展确实是提高准确性的正确方向。与VGG不同的是,GoogLeNet试图正面解决计算和梯度递减问题,而不是提出一种具有更好的预训练模式和权重初始化的解决方案。
首先,它通过使用一个名为Inception的模块探索了非对称网络设计的思想(见上图)。理想情况下,他们希望通过稀疏卷积或密集层来提高特性效率,但现代硬件设计并不是针对这种情况而定制的,因此他们认为网络拓扑级别的稀疏性也有助于功能的融合,同时有利于利用现有的硬件功能。其次,它借鉴了《网络中的网络》(Network in Network)一文的思想,解决了计算量大的问题。1x1卷积滤波器被引入,以在通过像5x5卷积内核这样的繁重计算操作之前减少特征的维数,这种结构后来被称为“瓶颈”,在许多后续网络中得到了广泛的应用,同时它还使用了平均池层来代替最终的全连接层,以进一步降低成本。第三,为了帮助梯度流到更深的层,GoogLeNet还对一些中间层输出或辅助输出使用了监控。由于其复杂性,这种设计在以后的图像分类网络中并不是很流行,而是在计算机视觉的其他领域如沙漏网络的姿态估计中得到了广泛的应用。作为后续工作,谷歌团队为Inception系列撰写了一系列的论文。
InceptionV2:“批量标准化:通过减少内部协变量的变化来加速深度网络训练”2015年的InceptionV3:“重新思考计算机视觉的初始架构”2015年的InceptionV4:“Inception-v4,Inception ResNet和残余连接对学习的影响”每一篇论文都在原有的初始网络基础上进行了更多的改进,取得了较好的效果。2015年:批量标准化批量标准化:通过减少内部协变量的变化来加速深度网络的训练Inception网络帮助研究人员在ImageNet数据集上达到了超人般的精确度,然而CNN作为一种统计学习方法,受到特定训练数据集统计性质的限制。因此,为了获得更好的准确性,我们通常需要预先计算整个数据集的平均值和标准差,然后使用它们来规范化我们的输入,以确保网络中的大多数层输入是接近的,这意味着更好的激活响应性。这种近似方法非常麻烦,有时对于新的网络结构或新的数据集根本不起作用,因此深度学习模型仍然被视为难以训练。为了解决这个问题,Sergey Ioffe和创建GoogLeNet的Chritian Szegedy决定发明一种更聪明的方法,称为批处理规范化。
批处理规范化的思想并不难:只要训练足够长的时间,我们就可以使用一系列小批量的统计数据来近似整个数据集的统计信息,此外我们可以引入两个更可学习的参数“scale”和“shift”,而不是手动计算统计数据,这可以让网络学习如何自己规范每一层。上图显示了计算批次标准化值的过程。如我们所见,我们取整个小批量的平均值并计算方差,接下来,我们可以用这个小批量的均值和方差来规范化输入,最后通过一个尺度和一个移位参数,网络将学习如何调整批量标准化结果,以最适合以下层(通常是ReLU)。
有一点需要注意的是,我们在推理过程中没有小批量信息,所以解决方法是在训练期间计算移动平均值和方差,然后在推理路径中使用这些移动平均值,这个小小的创新是如此的有影响力,所有后来的网络都马上开始使用它。2015: ResNet深度残差学习用于图像识别2015年可能是十年来计算机视觉发展最好的一年,我们看到了很多伟大的想法,不仅在图像分类方面,而且在各种各样的计算机视觉任务(如对象检测,语义分割等)中都应运而生。2015年诞生了一个新的网络,称为ResNet,或称为残差网络,该网络由Microsoft Research Asia的一组中国研究人员提出。
正如我们在前面讨论的VGG网络,进一步深入的最大障碍是梯度消失问题,也就是说,当反向传播到更深的层时,导数变得越来越小,最终达到现代计算机体系结构无法真正有意义地表示的程度。GoogLeNet试图通过使用辅助监督和非对称初始模块来解决这一问题,但它只在一定程度上缓解了这个问题。如果我们想用50层甚至100层,有没有更好的方法让渐变流通过网络?ResNet的答案是使用残差模块。
ResNet为输出添加了一个Identity输入,每个残差模块不能预测输入的是什么,从而不会迷失方向。更重要的是,残差模块不是希望每一层都直接适合所需的特征映射,而是尝试学习输出和输入之间的差异,这使得任务更加容易,因为所需的信息增益较少。假设你正在学习数学,对于每一个新的问题,你都会得到一个类似问题的解决方案,所以你需要做的就是扩展这个解决方案,并努力使它发挥作用,这比为你遇到的每一个问题想出一个全新的解决方案要容易得多。或者正如牛顿所说,我们可以站在巨人的肩膀上,Identity输入就是残差模块的那个巨人。
除了Identity Mapping,ResNet还借用了Inception networks的瓶颈和批处理规范化,最终它成功地建立了一个有152个卷积层的网络,在ImageNet上达到了80.72%的最高精度。残差法后来也成为了许多其他网络的默认选择,如exception、Darknet等,并且由于其简洁美观的设计,在当今许多生产性视觉识别系统中仍被广泛应用。
随着残差网络的大肆宣传,出现了许多的不变量。在《Identity Mappings in Deep Residual Networks》中,ResNet的原作者把激活放在残差模块之前,取得了更好的效果,这一设计后来被称为ResNetV2。此外,在2016年的一篇论文“Aggregated Residual Transformations for Deep Neural Networks(聚合深度神经网络的残差变换)”中,研究人员提出了ResNeXt,它为残差模块添加了并行分支,以聚合不同变换的输出。2016年:XceptionXception:具有深度可分卷积的深度学习
随着ResNet的发布,图像分类器中的大多数容易实现的目标看起来已经被抢先实现了,研究人员开始考虑研究CNN的内部机制原理。由于跨通道卷积通常会引入大量参数,因此Xception网络选择调查此操作以了解其效果的全貌。就像它的名字一样,Xception源自Inception网络。在Inception模块中,将不同转换的多个分支聚合在一起以实现拓扑稀疏性,但是为什么这种稀疏起作用了?Xception的作者,也是Keras框架的作者,将这一思想扩展到了一种极端情况,在这种情况下,一个3x3卷积对应于最后一个串联之前的一个输出通道,在这种情况下,这些并行卷积核实际上形成了一个称为深度卷积的新操作。
如上图所示,与传统的卷积不同,传统的卷积方法只对每个通道分别计算卷积,然后将输出串联在一起,这减少了通道之间的特征交换,但也减少了许多连接,因此产生了一个参数较少的层,但是此操作将输出与输入相同数量的通道(如果将两个或多个通道组合在一起,则输出的通道数更少),因此,一旦信道输出被合并,我们需要另一个常规的1x1滤波器,或点卷积,来增加或减少信道的数量,就像常规卷积一样。这个想法早在一篇名为“Learning visual representations at scale(学习视觉表征的规模)”的论文中有描述,偶尔也会在InceptionV2中使用。
Exception更进一步的用这种新类型取代了几乎所有的卷积。模型实验结果很好,它超越了ResNet和InceptionV3,成为一种新的SOTA图像分类方法,这也证明了CNN中的交叉相关和空间相关性的映射可以完全解耦,此外,Exception与ResNet有着相同的优点,它的设计也简单美观,因此它的思想也被许多后续的研究所使用,如MobileNet、DeepLabV3等。2017年:MobileNetMobileNets:用于移动视觉应用的高效卷积神经网络Exception在ImageNet上获得了79%的top-1准确率和94.5%的top-5准确率,但与之前的SOTA InceptionV3相比,这两项改进分别只有0.8%和0.4%。一种新的图像分类网络的边际收益越来越小,因此研究者开始将注意力转移到其他领域。MobileNet在资源受限的环境中引领了图像分类的重大进展。
与Exception类似,MobileNet使用了上述的深度可分离卷积模块,并强调了高效率和低参数。
上式中的分子是深度可分卷积所需的参数总数,分母是相似正则卷积的参数总数,这里D[K]是卷积核的大小,D[F]是特征映射的大小,M是输入通道的数目,N是输出通道的数目。由于我们将通道和空间特征的计算分开了,所以我们可以将乘法转化为加法,这是一个较小的数量级,而且从这个比率可以看出,输出通道的数目越大,使用这种新的卷积就可以节省更多的计算。MobileNet的另一个贡献是宽度和分辨率乘数。MobileNet团队希望找到一种标准的方法来缩小移动设备的模型尺寸,而最直观的方法就是减少输入和输出通道的数量,以及输入图像的分辨率。为了控制这种行为,比率alpha与通道相乘,比率rho与输入分辨率相乘(这也会影响特征映射的大小),因此参数总数可以用以下公式表示:
尽管这一变化在创新方面看起来很幼稚,但它具有巨大的工程价值,因为这是研究人员首次总结出一种规范的方法来调整网络以适应不同的资源限制,同时它也总结了改进神经网络的最终解决方案:更大分辨率的输入导致更好的精度,更薄和低分辨率的输入导致更差的精度。2018年和2019年晚些时候,MobiletNet团队还发布了MobileNetV2和MobileNetV3。在MobileNetV2中,使用了倒置残差结构。
在MobileNetV3中,它开始使用神经体系结构搜索技术来搜索最佳架构组合,我们将在下面介绍。2017年:NASNet学习可转换的可伸缩图像识别体系结构就像资源受限环境下的图像分类一样,神经架构搜索是2017年左右出现的另一个领域。通过ResNet、Inception和exception,我们似乎达到了一个人类可以理解和设计的最佳网络拓扑结构,但是如果有一个更好、更复杂的组合远远超出人类的想象呢?
2016年,一篇名为“Neural Architecture Search with Reinforcement Learning(强化学习的神经结构搜索)”的论文提出了一种利用强化学习在预先定义的搜索空间内搜索最优组合的思想。强化学习是一种寻找最优解的方法,具有明确的目标和对搜索主体的奖励,但是由于计算能力的限制,本文只讨论了在一个小型CIFAR数据集上的应用。
为了找到像ImageNet这样的大型数据集的最佳结构,NASNet为ImageNet定制了一个搜索空间。希望设计一个特殊的搜索空间,使CIFAR上的搜索结果也能在ImageNet上正常运行。
首先,NASNet假设在像ResNet和exception这样的良好网络中常见的手工制作的模块在搜索时仍然有用,因此NASNet不再搜索随机连接和操作,而是搜索这些模块的组合,这些模块已经在ImageNet上被证明是有用的。其次,实际的搜索仍然是在分辨率为32x32的CIFAR数据集上执行的,因此NASNet只搜索不受输入大小影响的模块。为了使第二点起作用,NASNet预定义了两种类型的模块模板:Reduction和Normal。与输入相比,还原单元可以具有简化的特征映射,而对于正常单元,则是相同的。
尽管NASNet比人工设计网络有更好的指标,但它也有一些缺点,即搜索最优结构的成本非常高,只有像谷歌和Facebook这样的大公司才能负担得起,而且最终的结构对人类来说没有太大意义,因此在生产环境中更难维护和改进。
2018年晚些时候,“MnasNet:Platform-Aware Neural Architecture Search for Mobile”通过使用预定义的链式块结构限制搜索步骤,进一步扩展了NASNet的思想,同时通过定义权重因子,mNASNet给出了一种在特定资源约束下更系统地搜索模型的方法,而不是仅仅基于FLOPs进行评估。
2019年:效率网EfficientNet:对卷积神经网络模型缩放的再思考2019年,CNN的监督图像分类似乎再也没有令人兴奋的想法了。网络结构的急剧变化通常只会提高一点点精度,更糟糕的是,当同一个网络应用于不同的数据集和任务时,先前声称的技巧似乎不起作用了,这就导致了对这些网络的批评,认为这些改进是否只是过度适应了ImageNet数据集。另一方面,有一个技巧永远不会辜负我们的期望:使用更高分辨率的输入,为卷积层添加更多通道,并添加更多层。虽然看上去简单粗暴,但似乎有一个原则性的方法来扩大网络的需求。MobileNetV1在2017年提出了这一点,但后来重点转移到了更好的网络设计上。
在NASNet和mNASNet之后,研究人员意识到即使在计算机的帮助下,架构的改变也不会带来太多的好处,所以他们开始退回到扩大网络的规模上,效率网就是建立在这个假设之上的。一方面,它使用从MNASNET的最佳构建块来确保开始的良好基础。另一方面,它定义了三个参数alpha、beta和rho来控制网络的深度、宽度和分辨率,通过这样做,即使没有一个大的GPU池来搜索最佳结构,工程师仍然可以依赖这些原则性参数来根据他们的不同需求来调整网络。
最后,EfficientNet给出了8种不同宽度、深度和分辨率的变体,在小型和大型模型上都取得了良好的性能,换言之,如果你想要高精度,就选择600x600和66M参数的EfficientNet-B7,如果你想要低延迟和更小的型号,请选择224x224和5.3M参数的EfficientNet-B0。阅读更多如果你读完了以上10篇论文,那么你应该对CNN的图像分类的发展历史有了一个相当好的了解。
如果你想继续学习这个领域,可以阅读下面列出的一些其他有趣的论文,这些论文虽然不在前十名之列,但它们在各自领域都很有名,并激励了许多其他研究者的研究。
2014年:SPPNet用于视觉识别的深度卷积网络中的空间金字塔池SPPNet从传统的计算机视觉特征提取中借鉴了特征金字塔的思想,这种金字塔形成了一个具有不同尺度特征的词包,可以适应不同的输入大小,摆脱了固定大小的全连接层。这个想法也进一步启发了DeepLab的ASPP模块,以及用于目标检测的FPN。
2016年:DenseNet紧密连接的卷积网络康奈尔大学的DenseNet进一步扩展了ResNet的思想,它不仅提供了层间的跳转连接,而且还提供了所有前一层的跳转连接。
2017年:SENetSqueeze-and-Excitation NetworksExcitation Networks表明,交叉信道相关性与空间相关性没有太大关系,但是作为上一届ImageNet竞赛的冠军,SEnet设计了一个Squeeze和Excitation块,并讲述了另一个不同的看法。SE块首先使用全局池将所有通道压缩到较少的通道中,应用全连接的变换,然后使用另一个全连接层将它们“激发”回原始通道数。从本质上讲,FC层帮助网络学习输入特征映射的注意信息。
2017年:ShuffleNetShuffleNet:一种用于移动设备的高效卷积神经网络基于mobilenev2的倒置瓶颈模块,ShuffleNet认为深度可分离卷积中的逐点卷积牺牲了精度,以换取更少的计算量。为了弥补这一点,ShuffleNet增加了一个额外的通道Shuffle操作,以确保逐点卷积不会总是应用于同一个“点”。而在ShuffleNetV2中,这种通道Shuffle机制也进一步扩展到ResNet的Identity输入分支,因此Identity输入分支也会被用于Shuffle。
2018年:Bag of Tricks卷积神经网络在图像分类中的应用Bag of Tricks主要介绍了图像分类领域中常用的技巧。当工程师需要提高基准性能时,它可以作为一个很好的参考。这些技巧,如混合增强和余弦学习率,有时比一个新的网络架构能取得更好的改善。
结论随着EfficientNet的发布,ImageNet分类基准测试似乎走到了尽头。在现有的深度学习方法下,除非发生另一种范式转换,否则我们永远不会有一天在ImageNet上达到99.999%的准确率,因此,研究者们正积极研究一些新的领域,如用于大规模视觉识别的自监督或半监督学习,同时在现有的方法下,工程师和企业家面临的更大问题是如何找到这种不完美的技术在现实世界中的应用。