Introduction
本文主要总结了卷积神经网络在机器视觉领域的重要发展及其应用。我们将介绍几篇重要的公开发表的论文,讨论它们为何重要。前一半的论文(AlexNet到ResNet)将主要涉及整体系统架构的发展和演变,后一半论文将主要集中在一些有趣的子领域应用上。
AlexNet (2012)
这篇文章算是深度学习的起源(尽管有些学者认为Yann LeCun在1998年的论文 paper 才是真正的起源)。文章标题是“ImageNet Classification with Deep Convolutional Networks”,已经获得了共6184次引用,并被广泛认为是业内最具深远影响的一篇。Alex Krizhevsky, Ilya Sutskever, 以及Geoffrey Hinton三人创造了一个“大规模、有深度的卷积神经网络”,并用它赢得了2012年度ILSVRC挑战(ImageNet Large-Scale Visual Recognition Challenge)。ILSVRC作为机器视觉领域的奥林匹克,每年都吸引来自全世界的研究小组,他们拿出浑身解数相互竞争,用自己组开发的机器视觉模型/算法解决图像分类、定位、检测等问题。2012年,当CNN第一次登上这个舞台,在前五测试错误率top 5 test error rate项目上达到15.4%的好成绩。(前五错误Top 5 error指的是当输入一幅图像时,模型的预测结果可能性前五中都没有正确答案)。排在它后面的成绩是26.2%,说明CNN相对其它方法具有令人震惊的优势,这在机器视觉领域引起了巨大的震动。可以说,从那时起CNN就变成了业内家喻户晓的名字。
这篇文章主要讨论了一种网络架构的实现(我们称为AlexNet)。相比现在的架构,文中所讨论的布局结构相对简单,主要包括5个卷积层、最大池化层、丢包dropout层,以及3个全连通层。该结构用于针对拥有1000个可能的图像类别进行分类。
图中文字:AlexNet架构采用两个不同的数据“流”使得它看起来比较奇怪。这是因为训练过程的计算量极大因此需要将步骤分割以应用两块GPU并行计算。
文中要点
- 利用ImageNet数据库进行网络训练,库中包含22000种类的1500万标签数据。
- 利用线性整流层ReLU的非线性函数。(利用线性整流层ReLU后,运行速度比传统双曲正切函数快了几倍)
- 利用了数据扩容方法data augmentation,包括图像变换、水平反射、块提取patch extractions等方法;
- 为解决训练集过拟合问题而引入了丢包层dropout layer。
- 使用批量随机梯度下降法batch stochastic gradient descent进行训练,为动量momentum和权重衰退weight decay设定限定值。
- 使用两块GTX 580 GPU训练了5~6天。
本文重要性
本文的方法是机器视觉领域的深度学习和CNN应用的开山怪。它的建模方法在ImageNet数据训练这一历史性的难题上有着很好的表现。它提出的许多技术目前还在使用,例如数据扩容方法以及丢包dropout层。这篇文章真真切切地用它在竞赛中的突破性表现给业内展示了CNN的巨大优势。
ZF Net (2013)
AlexNet在2012年大出风头之后,2013年随即出现了大量的CNN模型。当年的的ILSVRC比赛胜者是来自纽约大学NYU的Matthew Zeiler以及Rob Fergus设计的模型,叫做ZF Net。它达到了11.2%的错误率。ZF Net的架构不仅对之前的AlexNet进行了进一步的优化,而且引入了一些新的关键技术用于性能改进。另外一点,文章作者用了很长的篇幅讲解了隐藏在卷积网络ConvNet之下的直观含义以及该如何正确地将滤波器及其权重系数可视化。
本文标题是“Visualizing and Understanding Convolutional Neural Networks”。在文章开头,Zeiler和Fergus提出CNN的复兴主要依靠的是大规模训练集以及GPU带来的计算能力飞跃。他们指出,目前短板在于研究人员对模型的内部运行机理知之甚少,若是不能解决这个问题,针对模型的改进就只能依靠试错。“development of better models is reduced to trial and error”. 虽然相较3年前,我们现在对模型有了进一步的了解;然而这依然是一个重要问题。本文的主要贡献是一个改进型AlexNet的细节及其可视化特征图层feature map的表现方式。
文章要点
- 除了一些微小改进外,模型架构与AlexNet非常相似
- AlexNet训练集规模为1500万张图像,ZF Net仅为130万张
- 相比AlexNet在第一层使用的11*11滤波器,ZF Net使用7*7的滤波器及较小步长。如此改进的深层次原因在于,在第一卷积层中使用较小尺寸的滤波器有助于保留输入数据的原始像素信息。事实证明,在第一卷积层中使用11*11滤波器会忽略大量相关信息。
- 随着网络层数深入,使用的滤波器数量同样增加。
- 激活方法activation function使用了线性整流层ReLUs,误差函数error function(疑为作者笔误,应该是损失函数loss function)使用了交叉熵损失函数cross-entropy loss,训练方法使用了批量随机梯度下降法batch stochastic gradient descent。
- 用1块GTX580 GPU训练了12天
- 发明一种卷积网络可视化技术,名为解卷积网络Deconvolutional Network,有助于检查不同激活特征以及它们与输入空间的关系。命名为“解卷积网络”"deconvnet"是因为它把特征投影为可见的像素点,这跟卷积层把像素投影为特征的过程是刚好相反的。
DeConvNet
解卷积的基本工作原理是,针对训练后的CNN网络中的每一层,都附加一个解卷积层deconvnet用于将感知区回溯path back到图像像素。在CNN的工作流程总,我们把一幅图像输入给CNN,一层一层地计算其激活值activations,这是前向传递。现在,假设我们想要检查第四卷积层中针对某个特征的激活值,我们把这层对应的特征图层中的这个激活值保存起来,并把本层中其它激活值设为0,随后将这个特征图层作为解卷积网络的输入。这个解卷积网络与原先的CNN有相同的滤波器设置。输入的特征图层通过一系列的反池化(最大池化求反),整流(反整流?),以及滤波(反滤波?),随后到达输入端。
隐藏在这整套流程之下的原因是,我们想要知道当给定某个特征图层时,什么样的图像结构能够激活它。下图给出了第一和第二层的解卷积层的可视化结果。
图中文字:第一层与第二层的可视化表示。每层都表示为两幅图片:其一表示为滤波器;另一表示为输入原始图像中的一部分结构,在给定的滤波器和卷积层之下,这些结构能够激发最强的激活信号。图中第二解卷积层的左图,展示了16个不同的滤波器。(跟第一层9个组合起来)
就像我们在Part 1中讨论过的,图中卷积网络ConvNet的第一层通常是由一些用于检测简单边缘、颜色等信息的低阶特征检测子组成。从图中也可以看出,第二层则是更多的圆形特征。让我们看看下图3,4,5层的情形。
图中这几层展示出更进一步的高阶特征,例如狗的脸部特征或是花朵的特征等。也许你还记得,在第一卷积层后,我们应用了一个池化层pooling layer用于图像下采样(例如,将32*32*3的图像转换为16*16*3)。它带来的效果是第二层的滤波器视野(检测范围scope)更宽了。想要获取更多有关解卷积网络以及这篇论文的信息,请参考Zeiler的发表视频presenting。
本文重要性
ZF Net不仅仅是2013年度竞赛的冠军,而且它为CNN提供了更加直观的展示能力,同时提供了更多提升性能的技巧。这种网络可视化的方法有助于研究人员理解CNN的内部工作原理及其网络架构。迷人的解卷积网络可视化以及阻塞实验让这篇文章成了我的最爱。
VGG Net (2014)
简单但有深度。2014年度ILSVRC其中一个模型最好地利用了这两个特点达到了7.3%的错误率(但并不是当年的冠军)。牛津大学的Karen Simonyan以及Andrew Zisserman两位创造了一个19层的CNN,网络中仅使用了3*3尺寸的滤波器,步长stride和填充padding都为1,池化层使用2*2的最大池化函数,步长为2。是不是很简单?
文章要点
- 仅使用3*3滤波器,这与之前的AlexNet的首层11*11滤波器、ZF Net的7*7滤波器都大不相同。作者所阐述的理由是,两个3*3的卷积层结合起来能够生成一个有效的5*5感知区。因此使用小尺寸滤波器既能保持与大尺寸相同的功能又保证了小尺寸的优势。优势其中之一就是参量的减少,另一个优势在于,针对两个卷积网络我们可以使用多一个线性整流层ReLU。(ReLU越多,越能降低系统线性性?)
- 3个3*3卷积层并排起来相当于一个有效的7*7感知区。
- 输入图像的空间尺寸随着层数增加而减少(因为通过每层的卷积或是池化操作),其深度反而随着滤波器越来越多而增加。
- 一个有趣的现象是,每个最大池化层之后,滤波器数量都翻倍,这进一步说明了数据的空间尺寸减少但深度增加。
- 模型不仅对图像分类有效,同样能很好地应用在本地化任务中(翻译任务)。作者在文章中进行了一系列的回归分析说明此事。(论文第10页很好地说明了此事paper)
- 用Caffe工具箱进行建模
- 在训练中使用了尺寸抖动技术scale jittering进行数据扩容data augmentation
- 每卷积层后紧跟一个线性整流层ReLU并使用批量梯度下降法batch gradient descent进行训练
- 用4块Nvidia Titan Black GPU进行训练2~3周。
本文重要性
VGG Net是我印象中影响最为深远的一篇文章,原因在于它强调了卷积网络中的深度,CNN必须保证拥有一个足够深的网络结构才能体现它在处理视觉数据的层次性。保持深度、保持简单。
GoogLeNet (2015)
还记得刚才我们所说的简单法则吗?然而Google在自己的架构Inception Module里把这个原则抛到了九霄云外。GoogLeNet是一个22层的CNN,它以6.7%的错误率赢得了2014年度ILSVRC的冠军。据我所知,这是第一个跟传统方法,也就是卷积层与池化层简单叠加以形成序列结构的方法不同的一种CNN的新架构。文章作者强调,他们的新模型也特别重视内存与计算量的使用(这是之前我们没有提到的:多层堆积以及大量滤波器的使用会耗费很多计算与存储资源,同样也会提升过拟合的几率)。
Inception Module
当我们第一眼看到GoogLeNet的架构时,会发现并不是像之前架构那样,所有流程都是顺序执行的。系统的许多部分是并行执行的。
下图就称为Inception module。让我们仔细研究一下它的构成。
底部的绿色模块就是我们的输入,而顶部绿色模块是输出(把它顺时针转90°就可以跟之前的GoogLeNet架构图对应起来了)。基本上在传统卷积网络ConvNet中,你需要选择当前输入是用于执行池化pooling操作还是卷积操作(同样要选择滤波器尺寸)。然而在Inception module里,你可以让它们同时跑一遍。实际上,这正是作者一开始设计时的“天真”想法。
为什么说它“天真”呢?答案是它会导致太多的输出。最终我们会得到一个具有极为巨大深度的数组。为了解决这个问题,作者在3*3以及5*5卷积层之前,采用了一个1*1卷积操作。1*1卷积(或称为网络中的网络架构NIN)提供了降维的效果。打个比方,假设你有一个100*100*60的输入图像(尺寸无关紧要,可以看成是其中某一层的输出)。将其进行20个1*1的卷积操作,则会将尺寸变为100*100*20(不太明白了,估计20个滤波器尺寸应当是1*1*60)。这意味着之后3*3以及5*5卷积所要面对的图像数据变少了。这就像是一个“特征池化pooling of features”的操作,就跟在一般模型中的最大池化maxpooling层中降低空间尺寸的操作类似,在这里我们降低了数据的深度。另外一点在于这些滤波器后跟线性整流层ReLU(有关这些1*1滤波器的作用,更多信息请参考Aaditya Prakash的相关文章great post)。另外同样提供了一段视频video介绍了本方法的相关滤波器知识。
你可能会问“这架构有啥用?”。事实上,在这个由网络中的网络NIN层,中型滤波器,大型滤波器以及池化操作组成的架构中,NIN层能够从输入数据中提取出极为精细的图像细节信息,5*5滤波器能够覆盖较大的感知区与提取其内部的信息。同样,池化操作流程能够帮你减少空间尺寸,处理过拟合问题。另外,每个卷积层都配有一个线性整流层ReLU,它能够降低你的系统线性度。基本来说,这个架构能够以一个可接受的计算量处理这些复杂操作。此外,文章中还提到了一个更高层次的用途,是有关稀疏及稠密连接sparsity and dense connections的。(请参考论文3,4节paper,事实上博主自己还没看懂,求大神点解)
文章要点
- 模型里共使用9个Inception module模块,深度总计100层!
- 并没有使用全连通层,而是用一个平均池化层average pool取而代之,将7*7*1024的数据降低为1*1*1024。这个构造大大降低了参量个数。
- 比AlexNet的参量个数少了12倍。
- 在测试时,使用相同输入图像的多个副本multiple crops(?)作为系统输入,将其结果进行归一化指数函数softmax平均操作后得到其最终结果。
- 在模型中引入了区域卷积网络R-CNN的概念(之后会提到)
- Inception module现在不断更新中(现在版本6,7)
- “用一些高端GPU训练1周即可”
本文重要性
GoogLeNet是最先提出CNN模型中的非序列叠加模型这一概念的。文章作者通过介绍Inception module模块,为业内展示了一个独具创造性的,有着较高运行效率的模型。本文为随后出现的一些精彩的模型奠定了基石。
说得好,小李子。说得好!
Microsoft ResNet (2015)
想象一个很深的CNN架构,把它的层数翻两番,它的深度可能还比不上ResNet,它是微软亚研MRA在2015年提出的架构。ResNet是一个拥有152层网络架构的新秀,它集分类、检测与翻译功能于一身。除开层数破了纪录,ResNet自身的表现也破了ILSVRC2015的记录,达到了不可思议的3.6%(通常人类也只能达到5~10%的出错率,跟专业领域和技能相关。请参考Andrej Karpathy以自身经验撰写的,有关ImageNet挑战中人类与卷积网络ConvNet竞赛的雄文great post)。
Residual Block
文章中提出的残差区块residual block概念,其设计思路是这样的:当我们的输入x通过卷积-线性整流-卷积系列操作后,产生的结果设为F(x),将其与原始输入x相加,就有H(x)=F(x)+x。对比传统CNN,只有H(x)=F(x)。而ResNet需要把卷积结果F(x)与输入x相加。下图的子模块表现了这样一个计算过程,它相当于对输入x计算了一个微小变化"delta",这样输出H(x)就是x与变化delta的叠加(在传统CNN中,输出F(x)完全是一个全新的表达,它并不包含输入x的信息)。文章作者认为,“这种残差映射关系residual mapping比起之前的无关映射unreferenced mapping更加容易优化”。
残差区块的另外一个优势在于反向传播操作时,梯度信息流由于这些附加的计算,从而更加容易传播flow easily through the effective。
文章要点
- “极度深寒Ultra-deep” - Yann LeCun
- 152层...
- 一个有意思的特点是,最初两层处理后,输入图像的空间尺寸由224*224压缩至56*56
- 作者声明若在平层网络plain nets中随意增加层数会导致训练计算量以及错误率上升(参考论文paper图1)
- 研究团队曾尝试使用1202层网络架构,结果精确度反而降低了,推测原因是过拟合。
- 训练使用一个8GPU的机器,持续了2~3周
文章重要性
模型达到的3.6%错误率本身就极具说服力了。ResNet模型是目前最棒的CNN架构,同时是残差学习residual learning的一项重要创新。2012年以来,随着错误率逐年下降,我很怀疑在ILSVRC2016上是否能看到更好的成绩。我想我们也许已经到了一个瓶颈,仅依靠往模型中堆砌更多的卷积层已经难以获取算法性能上的提升了。就像之前的两年那样,今年的竞赛一定会有更具创造性的新型模型架构。2016.9.16,这是今年比赛结果揭晓之日。别忘了。
额外参考文章:ResNets inside of ResNets. Yeah. I went there.
Region Based CNNs (R-CNN - 2013, Fast R-CNN - 2015, Faster R-CNN - 2015)
也许会有人认为比起之前所说的那些新架构,R-CNN才是最重要,对业内影响最大的CNN模型。UC Berkeley的Ross Girshick团队发明了这种在机器视觉领域有着深远影响的模型,其相关论文被引量超过了1600次。如同标题所说的,Fast R-CNN以及Faster R-CNN方法使我们的模型能够更好更快地解决机器视觉中的目标检测问题。
目标检测的主要目的是:给出一副图像,把其中所有物体都框起来。这个过程可以分为两个主要的部分:目标标定、分类。
作者提出,针对区域标定方法,任何类不可知区域检测法class agnostic region proposal method都是合适的。其中Selective Search方法特别适用于RCNN模型。Selective Search算法在运行的过程中会生成2000个不同的,有最大可能性标定图像中的目标的区域标定region proposals。获取到这些标定区域后,算法把它们“变形warped”转换为一幅图像并输入一个已训练好的CNN中(例如AlexNet),进行特征向量的提取。随后将这些向量作为一系列线性SVM分类器的输入进行分类。同样将这些向量输入给区域边界的回归分析器regressor,用于进一步精确获取目标的位置。
随后,模型采用一个非极大值抑制算法用于去除那些互相重叠的区域。
Fast R-CNN
Fast R-CNN针对之前模型的改进主要集中在这3个方面的问题。多个阶段的训练(卷积网络ConvNet、SVM、区域边界回归分析)计算负载很大且十分耗时。Fast R-CNN通过优化流程与改变各生成标定区域的顺序,先计算卷积层,再将其结果用于多个不同的功能计算模块,以此解决速度的问题。在模型中,输入图像首先通过一个ConvNet,从其最后输出的特征图层中获取特征标定区域(更多信息参考论文2.1节paper),最后将其同时输入全连通层、回归分析模块以及分类模块。(译者按:这段基本上为字面翻译,然而有许多不合常理的地方。从图中看出标定区域似乎是在ConvNet之前,跟文中所述矛盾;另外图中似乎应该有多个ROI区域,并行地进行ConvNet,输出结果再并行输入FC,regressor等)
Faster R-CNN
Faster R-CNN用于解决在R-CNN和Fast R-CNN中的一些复杂的训练流程。作者在最后一层卷积层后插入了一个区域标定网络region proposal network(RPN)。RPN能够从其输入的特征图层中生成标定区域region proposals。之后流程则跟R-CNN一样(ROI池化、全连通、分类以及回归)
文章重要性
首先它能检测图像中的特定物体;更重要的是它能够找到这个物体在图像中的具体位置,这是机器学习的一个重要进步。目前,Faster R-CNN已经成为目标检测算法的标杆。
Generative Adversarial Networks (2014)
根据Yann LeCun的说法Yann LeCun,这个网络架构可以说又是一个大进步。在介绍这篇文章之前,我们先谈谈对抗样本adversarial examples。例如,有一个经过ImageNet数据训练好的CNN,现在给一副图(如下图左)加一些扰动或微小修改(中,右),输入后导致预测错误率增加了许多。虽然图像看起来跟原来似乎是一样的,但是最终分类却与原先已经不同了。归纳起来,对抗样本就是那些故意愚弄并破坏卷积网络ConvNets结果的图像。
图中文字:左列图像为正确样本,中间一列表示左和右图之间的扰动,右列图像的大部分都被归类为鸵鸟ostrich。事实上,人眼几乎难以分辨左右图之间的差异,然而卷积网络ConvNet在分类时竟会产生如此夸张的错误。
对抗样本Adversarial examples (paper) 吓到了许多研究人员并马上成为议论的热点。现在让我们谈谈这个generative adversarial networks模型。这里有两个模型:产生模型generative model和判别模型discriminative model。判别模型discriminative model用于判断某幅图像是天然的(直接来自数据集里)还是人为制造的。产生模型generator则创造样本供给判别模型discriminator训练。这可以看成是一个零和zero-sum游戏或是最小最大minimax游戏。文章中用的类比是这样的,产生模型generative model就像是“一群造假币的”,而判别模型discriminative model则像是“抓造假币者的警察”。产生模型不停地试图欺骗判别模型而判别模型试图识破欺骗。随着模型的训练,二者的能力不断提升最后达到“赝品和正品已经完全分不清楚了”的程度。
论文重要性
听起来这么的简单,那为什么我们要关注这个模型呢?就像Yann LeCun在Quora网站上的帖子post所述,因为判别模型discriminator已经能够识别来自数据集中的真实图像以及人工仿造的图像,因此可以说其探悉了“数据的内在表达”。因此,这个模型可用作CNN中的特征提取器;另外你也可以用它来仿造一些以假乱真的图像。(link).
Generating Image Descriptions (2014)
当你把CNN和RNN(循环神经网络)结合在一起会产生什么?抱歉,别想错了,你并不能得到R-CNN;-);但确实能得到一个很不错的模型。Andrej Karpathy(我个人最喜欢的作者之一)和Fei-Fei Li所写的这篇文章就是着重于研究将CNN与双向RNN bidirectional RNN相结合生成用于描述图像区域的自然语言描述器。基本上这个模型通过输入一副图像,产生如下的输出:
看起来非常不可思议。让我们看看它跟普通CNN有什么不同。在传统的模型中,针对训练数据中的每一张图片,都只有一个确定的标签与之对应。但本文所描述的模型则通过一个句子(或标题)与图像相关联。这种标签形式被称为弱标签,其语句中的成分与图像中的(未知)部分相关联。使用这样的训练集,让一个深度神经网络模型“推断语句成分与其描述的图像区域之间的潜在结合alignment关系(文中语)”;另外还有一个网络模型则将图像作为输入,生成其文字描述。现在让我们分别看看这两个部分:配对alignment与产生generation。
Alignment Model
这个部分的主要目的在于将视觉信息和文字信息进行配对结合(图像和描述文字)。模型输入一幅图像与一句话,然后对它们俩的匹配程度进行打分作为输出(有关这个模型工作的具体细节,作者Karpathy引用了另外一篇论文paper。模型主要使用兼容/不兼容图文对compatible and incompatible image-sentence pairs进行训练。)
现在看一下该如何表现一幅图像。首先,把一幅图像输入一个用ImageNet数据训练过的R-CNN网络,检测其中的物体。前19个检测出来的物体(加上自身)表现为深度为500维的维度空间。那么现在我们有了20个500维向量(文章中表示为v),这就是图像中的信息。随后,我们需要获取语句中的信息。我们利用双向RNN架构,把输入语句嵌入同样的多模态维度空间。在模型的最高层,输入的语句内容会以给定的句式(given sentence)表现出来。这样,图像的信息和语句信息就处于同一个建模空间内,我们通过计算其内积就可以求得相似度了。
Generation Model
刚才说了,配对alignment模型创建了一个存放图像信息(通过RCNN)和对应文本信息(通过BRNN)的数据集。现在我们就可以利用这个数据集来训练产生generation模型,让模型从给定图像中生成一个新的描述文本信息。模型将一幅图像输入CNN,忽略其softmax层,其全连通层的输出直接作为另一个RNN的输入。这个RNN的主要功能则是为语句的不同单词形成一个概率分布函数。(同样需要另外训练)
声明:这绝对是最难懂的文章之一,如果大家对我的讲述有不同意见和建议,请一定在评论区留言。
文章重要性
对我来说,本文要点在于利用了看起来似乎不同的两种模型RNN和CNN,创造了一个结合机器视觉和自然语言处理两方面功能的应用。它打开了新世界的大门,提供了一个新的思路,使得深度学习模型更加聪明并能够胜任跨学科领域的任务。
Spatial Transformer Networks (2015)
最后,让我们介绍一个最近的文章。这篇文章是由Google Deepmind研究组在一年前撰写的。它提出了一种空间变形模块Spatial Transformer module。模块将输入图像进行某种变形从而使得后续层处理时更加省时省力。比起修改CNN的主要结构,作者更关注于对输入图像进行改造。它进行的改造主要有两条:姿态正规化pose normalization(主要指图像场景中的物体是否倾斜、是否拉伸)以及空间聚焦spatial attention(主要指在一个拥挤的图像中如何聚焦某个物体)。在传统CNN中,如果想要保证模型对尺度和旋转具有不变性,那么需要对应的大量训练样本。而在这个变形模块中,则不需要如此麻烦,下面就让我们看看它是怎么做的。
在传统CNN中,应对空间不变性的模块主要是最大池化maxpooling层。其背后的直观原因在于最大池化层能够提取特征信息(在输入图像中有着高激活值的那些区域)的相对位置作为一个重要属性,而不是绝对位置。而文中所述的空间变形模块则是通过一种动态的方式对输入图像进行变换(扭曲、变形)。这种形式不像传统的最大池化操作那样简单与死板。让我们看看它的组成:
- 一个局部网络结构,通过输入图像计算出应该对图像采用的形变参数并将其输出。形变参数称作theta,定义为一个6维的仿射变换向量。
- 一个正规化网格经过上述参数的仿射变换之后生成的采样网格产物。
- 用作对输入图层变换的采样器sampler
这样的一个模块可以插入于CNN网络的任何地方,帮助整个网络结构学习特征图层形变,降低训练成本。
图中文字:在一个全连通网络架构用于扭曲手写MNIST库的数字识别的项目中,添加空间变形模块spatial transformer作为架构的第一层的运行结果:(a)输入数据是MNIST手写库中的图像,图像上施加了随机变换、缩放、旋转以及其它干扰噪声clutter。(b)空间变形模块预测的图像形变。(c)通过空间变形模块处理后的结果。(d)随后通过全连通网络分类预测后的结果。附带空间变形模块的网络架构在训练时仅使用了最后的正确标签,也就是数字标签,而并没有使用正确变形参数作为标签进行训练。
文章重要性
这篇文章吸引眼球的地方在于它提出这样的一种可能性:对CNN的改进并不一定要对网络架构的大规模修改,也不需要创造出另外一个ResNet或Inception module这样的复杂模型。这篇文章通过实现了一个对输入图像进行仿射变换的简单功能从而让模型拥有了很强的形变、伸缩、旋转不变性。如果对本文所述的模型还有兴趣的同学,可以看一下这个Deepmind团队的视频video,对CNN加空间形变模块的结果有很好的展示,同时也可以参考这个Quora讨论贴discussion。
这就是我们的卷积网络入门的三部曲。希望大家能从中获益。如果你觉得文中遗漏了什么重要的信息,请在评论区告知我。如果你想知道更多这方面的信息,我再次强烈推荐Stanford的CS 231n视频课程,你只需在YouTube上搜一下就能找到。