近年来,深度学习的发展日新月异,想要跟上深度学习进步的速度越来越难。几乎每天都有关于深度学习的创新,而深度学习的大部分创新都隐藏在ArXiv和Spinger发表的那些研究论文中。本文介绍了深度学习的一些最新进展和创新,以及Keras库中的实现代码,并提供了原始论文的链接。为了简洁起见,本文只介绍计算机视觉领域比较成功的深度学习架构。另外,文章基于神经网络的知识,对Keras相当熟悉。如果您不熟悉这些主题,我强烈建议您先阅读以下文章:《Fundamentals of Deep Learning – Starting with Artificial Neural Network》《Tutorial: Optimizing Neural Networks using Keras (with Image recognition case study)》什么是深度学习的“高层架构”?深度学习算法涉及的模型比简单的机器学习算法要广泛得多。这样做的原因是神经网络在构建完整模型方面具有很大的灵活性。有时,我们也可以将神经网络比作乐高积木,可以用来搭建任何简单或复杂的小楼。我们实际上可以简单地将“高级架构”定义为具有成功模型记录的深度学习架构。这种“高级架构”主要出现在像ImageNet这样的挑战中。在这些挑战中,您的任务是解决问题,例如使用给定数据完成图像识别。简单来说,ImageNet是一个关于数据集的挑战,数据集是从ILSVR(ImageNetLarge-ScaleVisualRecognition)中获得的。就像下面提到的这些架构,每一个架构之间都存在着细微的差异,正是这些差异使得它们区别于普通模型,让它们在解决问题的时候能够发挥出普通模型所没有的优势。这些架构也属于“深度模型”类别,因此它们也可能优于“浅层”模型。不同类型的“计算机视觉任务”本文重点介绍“计算机视觉”,因此自然而然地提到“计算机视觉”任务。顾名思义,“计算机视觉任务”就是建立一个可以复制人类视觉任务的计算机模型。这本质上意味着我们的眼睛看到和感知的是一个程序,可以在人造系统中理解和完成。计算机视觉任务的主要类型有:物体识别/分类:在物体识别中,给你一张原始图像,你的任务是找出这张图像属于哪个类别。分类和定位:如果图像中只有一个物体,那么你的任务就是找到那个物体的位置。这个问题应该更具体地表述为“定位问题”。对象检测:在对象检测中,您的任务是识别对象在图像中的位置。这些对象可能属于同一个类别,也可能属于不同的类别。图像分割:图像分割是一项稍微复杂的任务,其目的是将图像的各个像素映射到它们各自的类别。各种深度学习架构到目前为止,我们已经研究了深度学习的“高级架构”并探索了各种类型的计算机视觉任务。那么,接下来,我们将列出最重要的深度学习架构,并对这些架构进行简要介绍:1.AlexNetAlexNet是第一个深度学习架构,由深度学习的先驱之一——GeoffreyHinton和他的同事共同开发研究和介绍。AlexNet是一种看似简单但功能非常强大的网络架构,它为当今深度学习领域的开创性研究铺平了道路。下图是AlexNet架构:从分解图中我们可以看出AlexNet其实是一个简单的架构,卷积层和累积层相互叠加,最上面是全连接层。AlexNet模型早在1980年代就已经在概念上进行了描述。AlexNet区别于其他模型的关键是它的任务规模和它用于训练的GPU规模。八十年代,用来训练神经网络的是CPU。而AlexNet率先使用了GPU,将训练速度提升了大约十倍。虽然AlexNet现在有些过时,但它仍然是应用神经网络完成各种任务的起点。无论是完成计算机视觉任务还是语音识别任务,AlexNet还是必不可少的。代码实现的原论文链接链接2。VGGNet“VGGNet”是由牛津大学“视觉图像研究组”的研究人员推出的。VGG网络最大的特点是它的金字塔形状,靠近图像底部较宽,而顶层相对较窄和较深。如图所示,VGGNet包含连续的卷积层,后面是卷积层。堆积层负责使各个层变窄。在这篇由该组研究人员共同撰写的论文中,他们提出了各种类型的网络,其主要区别在于深度。VGG网络的优势在于它是一种非常有效的网络架构,用于对特定任务进行基准测试。同时,互联网上有大量免费的VGG预训练网络,因此VGG通常被用于各种应用。另一方面,VGG的主要缺点是如果从头开始训练它的训练速度会很慢。即使有相当不错的GPU,它仍然需要一个多星期才能正常运行。原论文链接代码实现链接3.GoogleNetGoogleNet(也称为“InceptionNet”)是谷歌研究人员设计的一种网络架构。GoogleNet在2014年赢得了ImageNet比赛,证明了它是一个强大的模型。在这种网络架构中,研究人员不仅加深了网络深度(GoogleNet包含22层,而VGG网络只有19层),还开发了一种名为“Inception模块”的新方法。如上图所示,这个架构和我们之前看到的有序架构相比,发生了巨大的变化。各种“特征提取器”出现在一个层中。这间接地提高了网络的性能,因为网络在处理任务时在自我训练期间有广泛的选择。它可以选择对输入进行卷积,也可以直接对输入进行累加。最终的架构由许多Inception模块组成,一个一个地堆叠在另一个之上。大多数顶层都有自己的输出层,因此GoogleNet的训练方式与其他模型略有不同。但这些差异可以帮助模型更快地完成卷积,因为这些层不仅有共同训练,也有独立训练。GoogleNet的优点是:GoogleNet的训练速度比VGGNet快。与预训练的VGG网络相比,预训练的GoogleNet占用的规模更小。一个VGG模型可以占用500多MB,而GoogleNet只占用96MB。到目前为止,GoogleNet没有直接的缺陷,但文章提出了一些有助于GoogleNet进一步改进的更改。其中一项更改称为“XceptionNet”,其中提高了“初始模块”的发散限制。从理论上讲,它的分歧现在可以是无限的。原论文链接代码实现链接4.ResNetResNet是真正定义深度学习架构深度的网络架构。“残差网络”,或者我们所说的ResNet,由许多连续的“残差模块”组成,这些模块构成了ResNet架构的基础。一个“残差模块”如下图所示:简单来说,一个“残差模块”有两个选项——它可以选择对输入执行一组功能,也可以选择跳过这些步骤。与GoogleNet类似,这些“残差模块”相互叠加形成一个完整的网络。ResNet引入的一些新技术是:使用标准SGD而不是奇特的“自适应学习”技术。这是通过使训练保持正常的初始化函数完成的。通过在将输入馈送到网络之前对输入进行批处理来更改输入的预处理方式。ResNet的主要优点是可以使用数千个残差层来构建网络,并且它们都可以用于训练。这与通常的“顺序网络”略有不同,“顺序网络”的性能会因为层数的增加而下降。原论文链接代码实现链接5.ResNeXt据说ResNeXt是迄今为止最先进的物体识别技术。ResNeXt建立在inception和ResNet的基础上,是一种全新改进的网络架构。下图总结了ResNeXt的一个残差模块:原论文链接代码实现链接6.RCNN(RegionBasedCNN)RCNN据说是深度学习架构中解决物体识别问题最有影响力的网络架构。为了解决识别和检测的问题,RCNN试图将图像中的所有物体框起来,然后识别图像中的物体是什么。运行过程如下:RCNN结构如下:原论文链接代码实现链接7.YOLO(YouOnlyLookOnce)YOLO是迄今为止最先进的实时图像识别系统,它基于深度学习。正如我们在下图中看到的,它首先将图像划分为小方块;然后在这些格子上一一运行识别算法,确定每个格子属于哪个物体类别,然后将同一类别的方格合并起来,一一形成最准确的物体框。这些操作都是独立完成的,所以可以实时运行。一秒钟最多可处理40张图像。虽然与对应的RCNN相比,YOLO的性能有所下降,但其实时处理能力在处理日常问题时仍然具有巨大优势。以下是YOLO网络架构:原论文链接代码实现链接8.SqueezeNetSqueezeNet架构是一种比较强大的网络架构,在移动平台这样的低带宽场景中非常有用。这种网络架构只占用了4.9MB的空间,而Inception却占用了100多MB的空间。如此重大的变化来自一种叫做“火力模块”的结构。“firemodule”如下图所示:下图是squeezeNet的最终架构:OriginalPaperlink代码实现链接9.SegNetSegNet是一种用于图像分割的深度学习架构。它由一系列处理层(编码器)和一组相应的像素分类解码器组成。下图总结了SegNet的运行过程:SegNet的一个关键特点是在分割后的图像中保留了高频细节,因为编码网络的积累指标和解码网络的积累指标是相互关联的。简而言之,信息的传递是直接的,而不是通过间接卷积实现的。SegNet是处理图像分割问题时最好的模型。原论文链接代码实现链接10.GAN(GenerativeAdversarialNetwork)GAN是一种完全不同的神经网络架构,其中神经网络用于生成一个新的图像,该图像不存在,看似已经出现在训练数据集中,但事实并非如此。下图是GAN的分解示意图。
