论文标题:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

    标题翻译:OverFeat:使用卷积神经网络集成识别,定位和检测

论文作者:Pierre Sermanet  David Eigen  Xiang Zhang  Michael Mathieu  Rob Fergus  Yann LeCun

论文地址:https://arxiv.org/pdf/1312.6229v4.pdf

声明:小编翻译论文仅为学习,如有侵权请联系小编删除博文,谢谢!

  小编是一个机器学习初学者,打算认真研究论文,但是英文水平有限,所以论文翻译中用到了Google,并自己逐句检查过,但还是会有显得晦涩的地方,如有语法/专业名词翻译错误,还请见谅,并欢迎及时指出。

  这篇论文是纽约大学 Yann LeCun 团队中 Pierre Sermanet,David Eigen和 Xiang Zhang等人在13年撰写的一篇论文,本文改进了 AlexNet,并用图像缩放和滑窗方法在 test 数据集上测试网络;提出一种图像定位的方法;最后通过一个卷积网络来同时进行分类,定位和检测三个计算机视觉任务,并在 ILSVRC2013中获得了很好的结果。

摘要

  我们提出了一个使用卷积网络进行分类,定位和检测的集成框架。我们展示了如何在 ConvNet 中有效的实现多尺度滑动窗口方法。我们还介绍了一种新的深度学习方法,通过学习预测对象边界来定位。然后累加而不是抑制边界框,以增加检测置信度。我们证明了使用一个共享网络可以同时学习不同的任务。该集成框架是 2013年 ImageNet 大规模视觉识别挑战赛(ILSVRC 2013)定位任务的获胜者,在检测和分类任务中取得了非常有竞争力的结果。从赛后工作中,我们为检测任务建立了一种新的状态。最后,我们从我们最好的模型中发布了一个叫做 OverFeat 的特征提取器。

1,引言

  识别图像中主要对象的类别是卷积网络(ConvNets)【17】多年来一直应用的一项任务,无论对象是手写字符【16】,门牌编号【24】,无纹理玩具【18】,交通标志【3,26】,Caltech-101数据集【14】中的对象,还是 1000类别的对象 ImageNet数据集【15】。ConvNets 在Caltech-101 等小型数据集上的准确度虽然不错,但并没有打破记录。然而,更大数据集的出现使ConvNets 能够显著提高数据集的技术水平,如 1000类的 ImageNet【5】。

  对于许多这样的分类任务,卷积网络的主要优势是从原始像素到最终类别,整个系统都提供 end-to-end 解决方案,从而减少了手动设计合适的特征提取器的要求;劣势就是对于标签数据集很贪婪。所以在大的数据集上面取得了很大的突破,但是在小的数据集上面突破不是很大。

  本文的主要目的是表明:训练一个卷积网络以同时对图像中的对象进行分类,定位和检测可以提高分类精度以及所有任务的检测和定位精度。本文提出了一种使用单个 ConvNet进行对象检测,识别和定位的新集成方法。我们还介绍了一种通过累计预测边界框进行定位和检测的新方法。我们建议通过结合许多定位预测,无需对背景样本进行训练就可以检测,并且可以避免耗时且复杂的自举训练过程。不进行背景样本训练也可以使网络仅专注于正样本的分类,以获得更高的准确性。

  在ImageNet ILSVRC 2012 和 2013数据集上进行了实验,建立了 ILSVRC 2013 定位和检测任务的最新结果。

  尽管从ImageNet数据集上选择的分类图片,物体大致分布在图片中心,但是感兴趣的物体常常在尺寸和位置(以滑窗的方式)上有变化;解决这个问题的第一个想法就是在不同位置和不同缩放比例上应用卷积网络。但是一种滑窗的可视窗口可能只包含物体的一个部分(比如狗的头),而不是整个物体;对于分类任务是可以接受的,但是对于定位和检测有些不适合。第二个想法就是训练一个卷积网络不仅产生类别分布,还产生一个物体位置的预测和 Bounding box 的尺寸;第三个想法就是积累在每个位置和尺寸对应类别的置信度。

  许多作者建议使用 ConvNets  进行检测和定位,在多尺度上使用滑动窗口可以追溯到20世纪90年代早期的多字符串【20】,人脸【30】和手【22】。最近,ConvNets被证明在自然图像中的文本检测【4】,面部检测【8, 23】和行人检测方面具有最先进的性能。

  一些作者还提出训练 ConvNets 来直接预测待定位对象的实例化参数,例如相对于观察窗口的位置或对象的姿势。例如Osadchy等人【23】描述一个用于同时进行人脸检测和姿态估计的ConvNet。面由九维输出空间中的三维流行表示。歧管(manifold)上的位置指示姿势(俯仰,偏航和侧滚)。当训练图像为人脸时,训练网络在流形上的已知姿态处产生一个点。如果图像不是一个面,则输出被推离流形。在测试时,到流形的距离表示图像是否包含面,流形上最近点的位置表示姿势。泰勒等人【27,28】使用ConvNets来估计身体部位(手,头等)的位置,从而得出人体姿势。他们使用一个度量学习准则来训练网络以产生身体姿势流形上的点。Hinton等人他们还建议训练网络计算特征的显式实例化参数,作为识别过程的一部分。

  其他作者提出通过基于 ConvNet的分割来实现目标定位。最简单的方法是训练ConvNet将其观察窗口的中心像素(或体积图像的体素)分类为区域之间的边界【13】。但当区域必须分类时,最好进行语义分割。其主要实现是训练ConvNet将观察窗口的中心像素与其所属对象的类别进行分类,并将窗口作为决策的上下文。应用范围从生物图像分析【21】,到移动机器人的障碍物标记【10】到照片的标记【7】。这种方法的优点是边界轮廓不必说矩形,区域也不必是边界良好的对象。缺点是需要密集的训练。这种分割预处理或对象建议步骤最近在传统的计算机视觉中得到了广泛的应用,以减少用于检测的位置,比例和纵横比的搜索空间【19,2,6,29】。因此,可以在搜索空间的最佳位置应用昂贵的分类方法,从而提高识别精度。另外,【29,1】认为这些方法通过大幅度减少不可能的目标区域来提高准确性,从而减少潜在的假阳性。然而,在 ILSVRC 2013检测数据集上,我们的密集滑动窗口方法的性能优于对象建议方法。

  Krizhevsky等人【15】最近使用大型ConvNet 展示了令人印象深刻的分类性能。其作者还参加了ImageNet 2012竞赛,赢得了分类和定位挑战。尽管他们展示了令人印象深刻的定位性能,但是还没有发表过任何描述其方法的工作。因此,我们的论文首次明确说明了如何将ConvNets 用于 ImageNet 数据的定位和检测。

  在本文中,我们使用术语“定位”和“检测”,这与他们在 ImageNet 2013竞赛中的使用方法是一致的,即唯一的区别是所使用的评估标准,并且两者都设计到预测图像中的每个对象的边界框。

2,视觉任务

  在这篇论文中,我们探讨了三个计算机视觉任务的难度递增顺序:(i)分类,(ii)定位,(iii)检测。每一个任务都是下一个任务的子任务。虽然所有任务都是通过一个单一的框架和一个共享的特性学习库来解决的,但是我们将在下面的部分中分别描述他们。

  在本文中,我们报告了 2013年 ImageNet 大规模视觉识别挑战赛(ILSVRC 2013)的结果。在这个挑战的分类任务中,每个图像被分配一个对应于图像中的主要标签。五次猜测可以找到正确答案(这是因为图像也可以包含多个未标记的对象)。定位任务类似于每个图像允许5次猜测,但是除此之外,每个猜测都必须返回预测对象的边界框。要想被认为是正确的,预测框必须至少与 groundtruth 匹配 50%(使用 PASCAL 的 IOU准则),并用正确的类进行标记(即每个预测都是一个关联在一起的标签和边界框)。在任务定位中,每一个被测对象的平均精度(包括零)与被测图像中的平均值(误差)不同。定位任务是分类和检测之间的一个方便的中间步骤,它允许我们独立于特定于检测的挑战(例如学习背景类)来评估我们的定位方法。在图1中,我们展示了我们的定位/检测预测以及相应的基本事实的图像示例。请注意,分类和定位共享同一个数据集,而检测也有其他数据,其中对象可以更小。检测数据还包含一组图像,其中某些对象不存在。这可以用于自举,但我们还没有在这项工作中使用它。

3,分类

  我们的分类体系结构类似于 Krizhevsky 等人的最佳 ILSVRC 2012体系结构【15】。但是,我们在网络设计和推理步骤上进行了改进。由于时间的限制,Krizhevsky模型中的一些训练特征还没有被探索,因此我们期望我们的结果能够得到进一步的改进。这些将在未来的工作section 6 中探索。

3.1  模型设计和训练

  我们在ImageNet 2012 训练集(有120万张图片和1000个类)【5】对网络进行训练。我们的模型使用了Krizhevsky 等人提出的相同的固定输入大小的方法进行训练,但转向多尺度分类,如下一节所述。每一个图像都被降采样,因此最小尺寸为 256像素。然后我们提取5个大小为 221*221 像素的随机裁剪(及其水平翻转),并以 128大小的小批量(mini-batch)呈现给网络(总结:输入图片为 256*256,然后进行随机裁剪,把221*221作为CNN的输入)。网络中的权重随机初始化为 (µ,σ)=(0,1×10−2),然后通过随机梯度下降,伴随动量项 0.6 和 l2 重量衰减 1*10-5 进行更新。学习率最初为 5*10-2,在迭代(30, 50, 60, 70, 80)个epoch之后,学习率连续下降 0.5倍。在分类器中的全连接层(第6层和第7层)上使用比率为 0.5的 Dropout【11】(也就是说在最后的两个全连接层,才采用Dropout)。

  我们在表1和表3中详细说明了体系结构的大小。请注意,在训练过程中,我们将此体系结构视为非空间的(大小为1*1的输出映射),而不是生成空间输出的推理步骤。第1~5层与Krizhevsky等人相似【15】,使用校正(‘relu’)非线性和最大池化,但有以下区别:(i)没有使用对比度标准化;(ii)池化区域不重叠;(iii)我们的模型具有更大的第一层和第二层特征图,这是由于步长较小(即步长为2,而不是4)。较大的步长有助于提高速度,但会损害准确性。

  表1:fast 模型的架构细节。特征图的空间大小取决于输入图像的大小,在这我们的推断步骤中是不同的(见附录中的表5)。这里我们展示了训练的空间大小。第5层是最上面的卷积层。后续层完全连接,并在测试时以滑动窗口方式应用。在空间设置中,完全连接层也可以看做 1*1 卷积。精确模型的相似尺寸可以在附录中找到。

  注意上面的Fast model

  • 1,不使用 LRN
  • 2,不使用over-pooling ,使用普通的 pooling
  • 3,第3, 4, 5卷积层特征数变大,从AlexNet的 384——384——256变为 512——1024——1024
  • 4,fc6层的神经元个数减少,从 4096 变为 3072
  • 5,卷积的方式从 valid 卷积变为维度不变的卷积方式,所以输入变为 231*231  

  注意上面的 accurate model:

  • 1,不使用LRN
  • 2,不使用over-pooling ,使用普通的 pooling
  • 3,第一个卷积层的间隔从4变为2(accurate model),卷积大小从11*11 变为 7*7;第二个卷积层filter从 5*5 升为 7*7
  • 4,增加了一个第三层,然后卷积层变为六层;同时从AlexNet的384——384——256变为 512——512——1024——1024

  在图2中,我们展示了来自前两个卷积层的滤波器系数。第一层过滤器捕捉定向的边缘,图案和斑点。在第二层,滤光片有多种形式,有些是漫反射的,有些是具有强线结构或定向边缘的。

3.2  特征提取器

  为了给计算机视觉研究提供强大的功能,我们还发布了一个名为“OverFeat”的特征提取器。提供两种模型,一种 fast模型和一种 accurate 模型。表1和表3描述了每种体系结构。我们还比较了表4中参数和连接的尺寸。准确(accurate)的模型比快速(fast)模型更精确(表1为14.18% 的分类错误,而表2中为 16.39%),但是它需要的连接数几乎是 fast 模型的两倍。使用一个由 7 个准确模型组成的 committee 。分类误差达到了 13.6%,如图4所示。

  从图中可以看到Fast模型比Accurate模型的参数还多,连接数比较符合逻辑,那为什么参数会多呢?

  按理来说两张图大小有区别,accurate自然会小,这应该不是根本原因,我们知道的 caffemodel的参数主要集中在全连接层,第7层的连接数 fast model 少,说明特征图 6*6 大于 5*5 是导致模型参数大的主要因素。

3.3  多尺度分类

  在AlexNet【15】中,多视图投票(multi-view)用于提升性能:固定的10个视图集(4个角和中心,水平翻转)是平均的。但是,这种方法可以忽略图像的许多区域,并且在试图重叠时在计算上是多余的。此外,它仅以单一规模应用,可能不是ConvNet能够以最佳置信度做出相应的尺寸。

  相反,我们通过在每个位置和多个尺度上密集运行网络来探索整个图像。虽然滑动窗口方法可能在计算上对某些类型的模型来说可能计算代价高,但是在ConvNets 的情况下,它本质上是有效的(见第 3.5 节)。这种方法为投票产生了更多的视图,这在保持效率的同时增加了健壮性。在任意的图像上卷积 ConvNet的结果是在每个尺寸上 C维向量的空间映射。

  然而,上述网络中的总子采样比率为2*3*2*3= 36。因此,当密集应用时,这种结构只能在输入维上沿每个轴每 36个像素生成一个分类向量。与 10视图方案相比(10-views 是图像做了crop,四个 corner,加一个中间,总共变为5个子图像,然后对图像进行翻转,这样就变成了10个图像),这种粗略的输出分布降低了性能,因为网络窗口与图像中的对象没有很好地对齐。网络窗口与对象的对齐度越高,网络响应的置信度越强。为了避免这个问题,我们采取了类似于 Giusti 等人提出的方法【9】,并在每个偏移量应用最后一次子采样操作。这消除了这一层的分辨率损失,产生了 x12 而不是 x36的总子采样比。

  我们现在详细解释如何实现分辨率增强。我们使用6个比例的输入,这导致了不同分辨率的非池化层第5层maps(详见表5)。然后,使用图3所示的以下过程将这些集合并呈现给分类器:

  (a) 在给定的比例下,对于单个图像,我们从未池化的第五层特征图开始。

  (b)每个非池化特征图都要经历 3*3 的最大池化操作(非重叠区域),对于{0, 1, 2} 的(∆x,∆y)像素偏移重复 3*3 次。

  (c)这将生成一组池化的特征图,对于不同的(∆x,∆y)组合,复制(3*3)次

  (d)分类器(第6, 7, 8层)的输入大小固定为 5*5,并为集合映射中的每个位置生成一个C维输出向量。该分类器以滑动窗口方式应用于集合映射,得到C维输出映射(对于给定的(∆x,∆y)组合)

  (e)不同(∆x,∆y)组合的输出映射被重塑为单个 3D输出映射(两个空间维度 x C类)

  上图是一维的情况,有3种池化组合方法,如果是2维图片的话,那么(∆x,∆y)就会有9种取值情况(3*3);如果我们在做图片分类的时候,在网络的某一个池化层加入了这种 offset 池化方法,然后把这 9种池化结果分别送到后面的网络层,最后图片分类输出结果就可以得到 9个预测结果(每个类别都可以得到 9种概率值,然后我们对每个类别的9种概率,取其最大值,作为此类别的预测概率值)。论文中图(a)就是一系列操作以后得到的 20*20的图,然后做3*3的 pooling得到上面说的 6*6 的 feature map,现在用三个 offset 来做三次 pooling,(b)表达了这个思想,这样作者认为就将分辨率提高了3倍,那么横坐标这样有3个offset,纵坐标也是3个,这样一结合就变为9个,所以之前的6*6就变成了(6*6)*(3*3),在这一系列的窗口上再去做滑窗,就变成了4*9=36个位置了。作者最后还做了一个 scale 上的变换,把图像放缩到6个尺度上,所以这个多尺度的滑动窗口的思想就得到了实现。

  下面对上面图分析,这里我们学习一下 offset池化。为了简单起见,我们暂时不使用二维图作为例子,而是采用一维作为示例,来学习池化。

  如上图所示,我们在 x 轴上有20个神经元,如果我们选择池化 size=3 的非重叠池化,那么根据我们之前学到的方法应该是:对上面的 20个,从1位置开始进行分组,每3个连续的神经元作为一组,然后计算每组的最大值(最大池化),19, 20号神经元被丢弃,如下图所示:

  我们也可以在 20号神经元后面,人为的添加一个数值为0的神经元编号 21,与 19, 20 成为一组,这样可以分为 7组:[1,2,3],[4,5,6]……,[16,17,18], [19,20,21],最后计算每组的最大值,这就是我们以前所学的CNN池化层源码实现方法了。

  上面说到,如果只分为6组的话,我们除了以1作为初始位置进行连续组合之外,也可以从位置2或者3开始组合,也就是我们说的其实有三种池化组合方法:

  • A:△=0分组:[1,2,3],[4,5,6]……,[16,17,18];
  • B:△=1分组:[2,3,4],[5,6,7]……,[17,18,19];
  • C:△=2分组:[3,4,5],[6,7,8]……,[18,19,20];

  对应的图片如下:

  以往的 CNN中,一般我们只用了 △=0, 得到池化结果后,就送入了下一层。于是文献中的方法是把上面的△=0, △=1, △=2 的三种组合方式的池化结果,分别送入网络的下一层。这样的话,我们网络在最后输出的时候,就会出现3种预测结果了。

  之前说了一维的情况,如果是2维图片的话,那么(△x,△y)就会有9种取值情况(3*3);如果我们在做图片分类的时候,在网络的某一个池化层加入了这种 offset池化方法,然后把这9种池化结果,分别送入后面的网络层,最后我们的图片分类输出结果就可以得到9个预测结果(每个类别都可以得到9种概率值,然后我们对每个类的 9种概率,取其最大值,作为此类别的预测概率值)。

  这些操作可以被视为通过池化层将分类器的观察窗口移动 1 个像素,而无需进行子采样,并在下一层使用跳过核(领域中的值是非相邻的)。或者等效的,在每个可能的偏移量应用最终的池化层和完全连接层的堆栈,并通过交错输出来组合结果。

  对于每个图像的水平翻转版本,重复上述过程。然后,我们通过(i)取每个等级,每个等级和翻转的空间最大值;(ii)平均不同比例尺寸和翻转产生的 C维向量;(iii)从平均类向量中取前 1 个或前 5 个元素(取决于评估标准)。

  在直观的层面上,网络的两部分——即特征提取层(1~5)和分类器层(6~输出)以相反的方式使用。在特征提取部分,滤波器一次卷积在整个图像上。从计算的角度来看,这比在图像上滑动固定大小的特征抽取器,然后将来自不同位置的结果聚合起来要高效的多。然而,对于网络的分类器部分,这些原则是相反的。在这里,我们想在图层5的不同位置的比例的特征图中寻找固定尺寸的表示。因此,分类器具有固定大小的 5*5 输入,并且完全应用于第5层映射。穷举池方案(使用单像素偏移(∆x,∆y))确保我们可以在分类器和特征映射中的对象表示之间获得精确的对齐。

  OverFeat 在测试阶段,不再使用一张 221*221 大小的图片作为网络的输入,而是用了6张大小都不相同的图片,也就是所谓的多尺度输入预测,如上表格所示,测试阶段网络输入图片大小分别是245*245,281*317……461*569。

  然后当网络前向传导到layer 5的时候,就使出了前面我们所讲的FCN、offset pooling这两招相结合的招式。在这里我们以输入一张图片为例(6张图片的计算方法都相同),讲解layer 5后面的整体过程,具体流程示意图如上面讲解所示。

  从layer-5 pre-pool到layer-5 post-pool:这一步的实现是通过池化大小为(3,3)进行池化,然后△x=0、1、2, △y=0、1、2,这样我们可以得到对于每一张特征图,我们都可以得到9幅池化结果图。以上面表格中的sacle1为例,layer-5 pre-pool大小是17*17,经过池化后,大小就是5*5,然后有3*3张结果图(不同offset得到的结果)。

  从layer-5 post-pool到classifier map(pre-reshape):我们知道在训练的时候,从卷积层到全连接层,输入的大小是4096*(5*5),然后进行全连接,得到4096*(1*1)。但是我们现在输入的是各种不同大小的图片,因此接着就采用FCN的招式,让网络继续前向传导。我们从layer-5 post-pool到第六层的时候,如果把全连接看成是卷积,那么其实这个时候卷积核的大小为5*5,因为训练的时候,layer-5 post-pool得到的结果是5*5。因此在预测分类的时候,假设layer-5 post-pool 得到的是7*9(上面表格中的scale 3),经过5*5的卷积核进行卷积后,那么它将得到(7-5+1)*(9-5+1)=3*5的输出。

  然后我们就只需要在后面把它们拉成一维向量摆放就ok了,这样在一个尺度上,我们可以得到一个C*N个预测值矩阵,每一列就表示图片属于某一类别的概率值,然后我们求取每一列的最大值,作为本尺度的每个类别的概率值。

  最后我们一共用了6种不同尺度(文献好像用了12张,另外6张是水平翻转的图片),做了预测,然后把这六种尺度结果再做一个平均,作为最最后的结果。

  OK,至此overfeat图片分类的任务就结束了,从上面过程,我们可以看到整个网络分成两部分:layer 1~5这五层我们把它称之为特征提取层;layer 6~output我们把它们称之为分类层。

3.4  结果

  在表2中,我们用不同的方法进行了实验,并将他们与Krizhevsky等人的单网络模型进行了比较。【15】供参考。上述方法有6个量表,top-5的错误率为 13.6%。正如预期的那样,使用较小的尺度会损害性能:单标度模型更差,top-5的错误率为 16.97%。图3中所示的精细步长技术在单尺度范围内带来了相对较小的改进,但是对于这里所示的多尺度增益也很重要。

  从表2我们可以看到:

  • 1,fast模型比AlexNet结果提升了近 1%,本文 AlexNet模型结果为 18.2%,比他们自己测试的高了2%左右
  • 2,accurate模型单个模型提升了近4%,说明增大网络可以提高分类效果
  • 3,采用偏置的(offset) max-pooling 感觉提升效果很小,并没有显著的提升,可能是因为卷积特征激活值具有很高的聚集性,每个offset特征图很相似,max-pooling后也会很相似
  • 4,多个缩放比例测试分类对于结果提升比较重要,通过多个比例可以把相对较小的物体放大,以便于特征捕捉

  图4:测试集分类结果。在比赛中,使用平均7个快速模型,OverFeat产生了 14.2%的前5名错误率。在赛后的工作中,OverFeat使用较大的模型(更多的功能和更多的图层)以 13.6%的误差排名第5。

  我们在图4中报告了 2013年比赛的测试集结果,其中我们的模型(Overfeat)通过对7个ConvNet(每个ConvNet都经过不同的初始化训练)的投票获得了 14.2%的准确率,并在 18个团队中排名第5.使用 ILSVRC 2013数据的最佳准确率为 11.7%。使用来自ImageNet Fall11 数据集的额外数据进行预训练,将这个数字提高到 11.2%。在赛后的工作中,我们通过使用更大的模型(更多的特性和更多的层),将OverFeat结果的误差降低到 13.6%。由于时间限制,这些较大的模型没有得到充分的训练,更多的改进有望及时出现。

3.5  卷积神经网络和滑动窗口效率

  与许多滑动窗口方法一次只计算一个输入窗口的整个管道不同,ConvNet 在以滑动方式应用时天生高效,因为他们自然地共享重叠区域的共同计算。当在测试时将我们的网络应用于较大的图像时,我们只需要将每个卷积应用于整个图像的范围。这将扩展每个层的输出以覆盖新的图像大小,最终生成输出类预测的映射,每个输入的“窗口”(视野)都有一个空间位置。如图5所示,卷积是自下而上应用的,因此相邻窗口的公共计算只需要执行一次。

  请注意,我们架构的最后一层是完全连接的线性层。在测试时,这些层具有 1*1 空间范围内核的卷积运算有效的替换。因此,整个ConvNet 只是一系列卷积,最大池化核阈值运算的序列。

  图5:ConvNets 的检测效率。在训练期间,ConvNet只产生一个空间输出(顶部)。但是当在测试时应用于较大的图像时,它会生成一个空间输出映射,例如 2*2(底部)。由于所有层都是卷积应用的,因此较大图像所需的额外计算仅限于黄色区域。为了简单起见,此图省略了特性维度。

  这个图的意思就是:比如在训练阶段在小的 view(如图14*14)下,训练网络;测试阶段在多个较大的图片上测试,由于每个 14*14的 veiw区域产生一个分类预测分布,上图在 16*16的图片上测试,有4个不同的 14*14的 view,所以最后产生一个4个分类预测分布;组成一个具有C个特征图的2*2分类结果图,然后按照1*1卷积方式计算全连接层部分;这个整个系统可以类似于一个完整的卷积系统。

  有个博客这样解释上面的内容(地址:https://blog.csdn.net/hjimce/article/details/50187881),我觉得我看完后茅塞顿开:

  我们知道对于一个各层参数结构都设计好的网络模型来说,输入的图片大小是固定的,比如AlexNet设计完毕后,网络输入图片大小就是 227*227,这个时候我们如果输入一张 500*500 的图片,会是什么样子的结果?我们现在的希望是让我们的网络可以一直前向传到,让一个已经设计完毕的网络,也可以输入任意大小的图片。这里我们通过FCN来学习上面的意思,FCN算法灵魂是:

  • 1,把卷积层到全连接层,看成是对一整张图片的卷积层运算
  • 2,把全连接层到全连接层,看成是采用 1*1 大小的卷积核,进行卷积层运算

  下面我们来对上图来学习怎么让一个已经设计好的CNN模型,可以输入任意大小的图片:

  假设我们设计了一个CNN模型,输入图片大小为 14*14,通过第一层卷积后我们得到 10*10 大小的图片,然后接着池化得到 5*5 大小的图片。接着我们看如何把 5*5大小的图片缩放为1*1大小的图片:

  (1)传统的 CNN:如果从以前的角度来进行理解的话,那么这个过程就是全连接层,我们会把这个 5*5 大小的图片,展平成一个一维的向量,进行计算(写CNN代码的时候,这个时候经常会加上一个 flatten函数,就是为了展平一维向量)。

  (2)FCN:FCN 并不是把 5*5 的图片展平成一维向量,再进行计算,而是直接采用 5*5 的 卷积核,对一整张图片进行卷积运算。

  其实这两个本质是相同的,只是角度不同,FCN把这个过程当成了对一整张图片进行卷积,同样,后面的全连接层也是把它当做是以 1*1 大小的卷积核进行卷积运算。

  上面的例子中,我们看到网络的输入是一张 14*14大小的图片,而当输入任意大小的图片,比如上图的下面,16*16大小的图片,会是什么样的结果?

  这个时候我们会发现,网络最后的输出是一张 2*2 大小的图片。这个时候,我们就可以发现采用 FCN 网络,可以输入任意大小的图片。同时需要注意的是网络最后输出的图片大小不再是一个 1*1 大小的图片,而是一个与输入图片大小息息相关的一张图片了。

  这时候我们思考一个问题,比如AlexNet网络设计完毕后,我们也用 FCN的思想,把全连接层看成卷积层运算,这个时候我们就会发现如果 AlexNet输入一张500*500图片的话,那么它将得到 1000张 10*10 大小的预测分类图,这个时候我们可以简单采用对着每一张 10*10大小的图片求取平均值,作为图片属于各个类别的概率值。

  其实AlexNet在测试阶段的时候,采用了对输入图片的四个角度进行裁剪,进行预测,分别得到结果,最后的结果就是类似于对应上面 2*2 的预测图。这个 2*2 的每个像素点,就类似于对应于一个角落裁剪下来的图片预测分类结果。只不过  AlexNet把这4个像素点,相加在一起,求取平均值,作为该类别的概率值。

  需要注意的是,OverFeat就是把采用FCN的思想把全连接层看成了卷积层,让我们在网络测试阶段可以输入任意大小的图片。

4,定位

  从我们的分类训练网络开始,我们用一个回归网络代替分类器层,并训练它在每个空间位置和尺寸上预测对象边界框。然后,我们将回归预测与每个位置的分类结果结合在一起,正如我们现在所描述的那样。

  后面我们用于定位任务的时候,就把分类层(上面的layer 6~output)给重新设计一下,把分类改成回归问题,然后在各种不同尺度上训练预测物体的bounding box。

  我们把用图片分类学习的特征提取层的参数固定下来,然后继续训练后面的回归层的参数,网络包含了4个输出,对应于bounding box的上左上角点和右下角点,然后损失函数采用欧式距离L2损失函数。

4.1  生成预测

  为了生成对象边界框预测,我们同时在所有位置和范围内运行分类器和回归网络。由于他们共享相同的特征提取层,因此在计算分类网络后仅需要重新计算最终回归层。在每个位置上类别C的最终Softmax层的输出提供了c类对象在相应视野中存在(尽管不一定完全包含)的置信度得分。因此,我们可以为每个边界框指定一个置信度。

4.2  regressor 训练

  回归网络将第5层的池化特征图图作为输入。它具有2个全连接的隐藏层,大小分别为 4096和1024个通道。最终输出层有 4个单元,用于指定边界框边缘的坐标。与分类一样,由于∆x,∆y 偏移,整个过程中有(3*3)个副本。架构如图8所示。

  图6:定位/检测管道。原始分类器/检测器为每个位置输出一个类和一个置信度(第一个图)。可以使用第 3.3 节(第二张图)中所述的方法提高这些预测的分辨率。然后回归预测对象相对于每个窗口的位置比例(第三张图)。然后将这些边界框合并并累加到少量对象(第四张图)

  其中:第一行图片,不同的缩放比例上,预测结果不同,例如在原始图像上预测结果只有熊,在放大比例后(第三,第四个图),预测分类中不仅有熊,还有鲸鱼等其他物体。

  第二行图片,通过offset和Sliding window的方式可以有更多的类别预测

  第三行图片,在每个比例上预测 Bounding box ,放大比例越大的图片,预测的 bounding box越多

  第四行图片,融合bounding box

  在最终的分类中,鲸鱼预测和其他的物体消失不仅是因为更低的置信度,还有就是他们的 bounding box集合Bs不像熊一样连续,具有一致性,从而没有持续的置信度积累。通过这种方式正确的物体持续增加置信度,而错误的物体识别由于缺少bounding box的一致性和置信度,最终消失。这种方法对于错误的物体具有鲁棒性(但是图中确实有一些鱼,虽然不是鲸鱼;但是系统并没有识别出来;也可能是类别中有鲸鱼,但是没有此种鱼的类别)

  图7:回归网络生成的边界框示例。在合并到最终预测中之前,这里所示的例子是在一个单一的比例。根据目标的不同,在其他尺寸下预测可能更为理想。在这里,大多数最初组织为栅格的边界框收敛到单个位置和比例。这表明网络对对象的位置非常有信息,而不是随机分布。左上角的图像显示,如果存在多个对象,它也可以正确识别多个位置。预测的边界框的不同长宽比表明该网络能够处理不同的物体姿态。

  我们固定分类网络中特征提取层(1~5),并使用每个样本的预测边界框和真实边界框之间的 l2损失来训练回归网络。最后的回归层是特定一类的,有1000个不同的版本,每个类一个版本。我们使用第三节中描述的同一组尺寸来训练这个网络。我们将每个空间位置的回归网络的预测与groundture 边界框进行比较,在卷积内,将其移动到回归器平移偏移的参考框架中(见图8)。但是,我们不会在与输入视野重叠小于50%的边界框上训练回归器:由于对象大多数位于这些位置之外,因此最好使用包含对象的回归窗口来处理它。

  多尺度回归函数的训练对于跨尺度预测组合具有重要意义。单一尺度的训练在这个尺度上表现良好,在其他尺度上仍然可以合理的进行。然而,多尺度训练将使预测在不同尺度间正确匹配,并成倍提高合并预测的置信度。反过来,这使我们能够很好地只使用几个scale,而不是像检测中的典型情况那样使用多个scale。行人检测中【25】,从一个比例到另一个比例的典型比例约为 1.05~1.1,但是我们在这里使用了大约 1.4 的大比例(这个数字因每个比例而异,因为尺寸被调整以完整适合我们网络的步长),这使我们能够更快的运行我们的系统。

4.3  组合预测

  我们使用以下算法,通过应用于回归器边界框的贪婪合并策略来组合各个预测(见图7)

  • 1,将每个尺度 s ∈ 1,....6 的前 k 个类别的集合分配到Cs,通过获取该尺寸的空间位置上的最大检测类输出找到该集合。
  • 2,将回归器网络经过尺度为 s 的所有空间位置,为Cs中的每一类预测的边界框集合分配到Bs
  • 3,将 UsBs --> B
  • 4,重复合并,直到完成
  • 5,(b1*​,b2*​) = argminb1̸​=b2​∈B​match_score(b1​,b2​)
  • 6,如果  match_score(b1*, b2*)> t, 停止
  • 7,否则,设置 B <--B \ (b1*, b2*)U box_merge(b1*, b2*)

  在上面,我们使用两个边界框的中心距离和框的相交面积来计算匹配分数。框合并计算边界框坐标的平均值。

  最后的预测是以分类分数最大的合并边界框来进行的。这是通过累积添加与预测每个边界框的输入窗口相关联的检测类输出来计算的。关于合并到单个高置信度边界框中的边界框的示例,请参见图6。在该示例中,一些海龟和鲸鱼边界框出现在中间多尺寸步骤中,但在最终检测图像中消失。这些边界框不仅分类置信度较低(分别为 0.11 和 0.12),而且他们的集合不像熊边界框那样一致,从而获得显著的置信提升。熊的boxes 有很强的置信度(每个量表平均约为 0.5分)和高匹配分数。因此,在合并后,许多熊的边界框被融合到一个非常高的置信框中,而由于边界框缺乏一致性和可信度,误报会消失在检测阈值以下。分析表明,与传统的非最大值抑制方法相比,通过奖励边界框的连贯性,我们的方法通过对纯分类模型产生的误报自然要比传统的非极大抑制(NMS)方法更健壮。

  本文多个multi-scale和multi-view 的方式非常关键,multi-view 降低了 4%,multi-scale降低了6%。令人惊讶的是本文PCR的结果并没有SCR的好,原因是PCR的有1000个模型,每个模型都是用自己类别的数据进行训练,训练数据不足可能导致欠拟合。而SCR通过权值共享,得到了充分的训练。训练分类模型只使用了单尺度,但后面训练定位模型的时候用到了多尺度,个人认为是增加样本——因为训练1k个定位模型的话,每类的样本太少了。“测试时实现多视角多尺度”方法,其本质上就是滑动窗口——多视角=滑动到不同的位置,多尺度=大小不一的窗口。

4.4  实验

  我们使用为比赛指定的定位标准将网络应用于 ImageNet 2012 验证集。其结果如图9所示。图10显示了 2012年和 2013年定位竞赛的结果(这两年的训练和测试数据都相同)。我们的方法是 2013年竞赛的获胜者,错误率为 29.9%。

  我们的多尺度和多视图方法是获得良好性能的关键,如图9所示:仅使用单中心裁剪,我们的回归网络达到 40% 的错误率。通过在两个尺度上结合所有空间位置的回归预测,我们获得了 31.5% 的更好误差率。添加第三和第四个 scale 进一步提高了性能,误差为 30.0%

  对于每个类(图9中的每个类回归器(PCR))使用不同的顶层,令人惊讶的是,在所有类中仅使用一个共享的网络(44.1% VS 31.3%)的性能并不由于仅使用一个网络。这可能是因为在训练集中,每个类用边界框标注的例子相对较少,而网络的顶层参数多出 1000 倍,导致训练不足。这种方法可以通过只在相似的类之间共享参数来改进(例如,为所有都是狗的类别训练一个网络,为车辆训练另一个网络,等等)。

5,检测

  检测训练与分类训练相似,但是以空间方式进行的。可以同时训练图像的多个位置。由于该模型是卷积的,因此所有权重在所有位置之间共享。与定位任务的主要区别是,当没有对象存在时,需要预测背景类。传统上,负面示例最初是随机地接受训练的。然后,最有害的的负错误会添加到引导过程中的训练集中。独立的引导过程使训练变得复杂,并考嫩恶搞在否定示例手机和训练时间之间造成潜在的不匹配。此外,需要调整自举次数的大小,以确保训练不会在小范围内过大。为了避免所有这些问题,我们通过为每个图像选择一些有趣的负面示例(例如随机的或最令人反感的示例)来进行负面的训练。这种方法在计算上的成本更加昂贵,但是使过程变得更加简单。并且由于特征提取最初是通过分类任务来训练的,因此检测微调无论如何都不会太长。

  在表11中,我们报告了 ILSVRC 2013 竞赛的结果,我们的检测系统以 19.4%的平均精度(mAP)排名第三。我们后面用 24.3%的mAP建立了一种新的检测技术。注意,排名前三的方法和其他团队之间有很大的差距(第四种方法产生 11.5%的mAP)。此外,我们的方法与前两个使用初始分割步骤将候选窗口从大约 200000 减少到 2000个的前两个系统有很大的区别。这种技术加快了推断速度,并大大减少了潜在误报的数量。【20, 1】建议使用密集滑动窗口时检测精度会下降,而选择性搜索会丢弃不太可能的目标位置,从而减少误报。结合我们的方法,我们可以观察到传统的密集方法和基于分割的方法之间的类似改进。还应该注意的是,我们没有像 NEC 和 UVA 那么对检测验证集进行微调。验证集和测试集的分布与训练集有很大的不同,仅此一项就可以将结果提高大约1个百分点。图11中两个OverFeat结果之间的改进是由于更长的训练时间和上下文的使用,即每个尺度也使用较低分辨率的尺度作为输入。

6,讨论

  我们提出了一种多尺度的滑动窗口方法,可用于分类,定位和检测。我们将其应用于 ILSVRC 2013数据集,目前它在分类这种排名第四,在定位排名第一,在检测中排名第一。本文的第二个重要贡献是解释了如何将 ConvNets有效的用于检测和定位任务。这些问题在【15】中从未得到解决,因此我们是第一个解释如何在 ImageNet 2012 的背景下完成此工作,我们提出的方案设计对用于分类的网络进行的实质性修改,但清楚地表明 ConvNets 能够实现这些更具挑战性的问题任务。我们的定位方法在2013年 ILSVRC 竞赛中获胜,并且显著优于 2012和2013年的所有方法。检测模型在比赛中表现优异,在赛后成绩排名第一。我们提出一个集成的管道,可以执行不同的任务,同时共享一个共同的特征提取库,完全可以从像素中学习。

  我们的方法仍可能在以下几个方面得到改进。(i)对于定位任务而言,我们目前还没有支持整个网络进行反向传播训练;这样做可能会提高性能;(ii)我们使用的是 l2 损失,而不是直接优化衡量性能的IoU标注。由于IoU仍然是可区分的,如果有一些重叠的话,因此应该将损失转换位 IoU可能会提升性能。(iii)边界框的替代参数设置可能有助于解相关输出,这将有助于网络训练。

可以参考:https://yufeigan.github.io/2014/11/23/OverFeat-Integrated-Recognition-Localization-and-Detection-using-Convolutional-Networks/

https://blog.csdn.net/hjimce/article/details/50187881

深度学习论文翻译解析(十一):OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks的更多相关文章

  1. 论文笔记:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks DeepLearning 》

    一.Abstract综述 训练出一个CNN可以同时实现分类,定位和检测..,三个任务共用同一个CNN网络,只是在pool5之后有所不同 二.分类 这里CNN的结构是对ALEXNET做了一些改进,具体的 ...

  2. OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks

    目录 概 主要内容 Sermanet P., Eigen D., Zhang X., Mathieu M., Fergus R., LeCun Y. OverFeat:integrated recog ...

  3. 论文笔记:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

    2014 ICLR 纽约大学 LeCun团队 Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann ...

  4. 对 OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 一文的理解

    一点最重要的学习方法:  当你读一篇论文读不懂时,如果又读了两遍还是懵懵懂懂时怎么办???方法就是别自己死磕了,去百度一下,如果是很好的论文,大多数肯定已经有人读过并作为笔记了的,比如我现在就把我读过 ...

  5. 深度学习论文翻译解析(八):Rich feature hierarchies for accurate object detection and semantic segmentation

    论文标题:Rich feature hierarchies for accurate object detection and semantic segmentation 标题翻译:丰富的特征层次结构 ...

  6. 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...

  7. 深度学习论文翻译解析(十二):Fast R-CNN

    论文标题:Fast R-CNN 论文作者:Ross Girshick 论文地址:https://www.cv-foundation.org/openaccess/content_iccv_2015/p ...

  8. 深度学习论文翻译解析(十三):Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    论文标题:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 标题翻译:基于区域提议(Regi ...

  9. 深度学习论文翻译解析(十四):SSD: Single Shot MultiBox Detector

    论文标题:SSD: Single Shot MultiBox Detector 论文作者:Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Sz ...

随机推荐

  1. Redis系列(九):数据结构Hash之HDEL、HEXISTS、HGETALL、HKEYS、HLEN、HVALS命令

    1.HDEL 从 key 指定的哈希集中移除指定的域.在哈希集中不存在的域将被忽略. 如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回0. 时间复杂度:O(N) N是被删除的 ...

  2. 放弃for循环吧

    前言 for(var i=0;i<array.length;i++){}这个可以是初学者必学的知识,也是JS中必不可少的功能,但如果对性能要求较高的小伙伴有了解过就会发现,for循环性能不高且代 ...

  3. Python3笔记014 - 3.5 跳转语句

    第3章 流程控制语句 3.5 跳转语句 1.break 语句 while 条件表达式1: 语句块1 if 条件表达式2: break for 迭代变量 in 对象: 语句块1 if 条件表达式: br ...

  4. unicode键盘编码表

    键盘uniCode编码 功能键:       8 ==>   Backspace             9 ==>   Tab             12==>   Clear ...

  5. web标签语义化的理解_web语义化是什么意思

    web语义化是什么? Web语义化,使用语义恰当的标签,可以让页面具有良好的结构,页面元素具有良好的含义,从而让人和机器都能快速理解.语义化的web页面一方面可以让机器在更少的人类干预情况下收集并研究 ...

  6. 逻辑式编程语言极简实现(使用C#) - 4. 代码实现(完结)

    本文是本系列的完结篇.本系列前面的文章: 逻辑式编程语言极简实现(使用C#) - 1. 逻辑式编程语言介绍 逻辑式编程语言极简实现(使用C#) - 2. 一道逻辑题:谁是凶手 逻辑式编程语言极简实现( ...

  7. css3-pointer-events_demo

    该demo定义了一个菜单,点击了一次之后就不能再点击,另外其中也用到了flex布局,可直接将代码复制运行即可 <html> <head> <meta name=" ...

  8. kibana限制用户只具备读图的权限

    假设需求 因为业务需要将日志系统收集到的信息进行图表化展示并交付到用户进行业务交流. 解决方案 这个需求看着似乎蛮简单的,如何解决? 1.对需要的数据进行过滤制作图表 2.对用户的权限限制为只读级别, ...

  9. Python-模块XlsxWriter将数据写入excel

    1.目的 用xlwt来生成excel的,生成的后缀名为xls,在xlwt中生成的xls文件最多能支持65536行数据.python XlsxWriter模块创建aexcel表格,生成的文件后缀名为.x ...

  10. postman-7-前置请求脚本

    前面讲了,tests初如何校验请求之后返回值是否正确 那前置脚本,就是处理,请求之前接口该如何处理,什么时候会用到呢? 比如:接口字段time,需要填入时间,而且这个是需要当前时间的,: 需要达到自动 ...