Overfeat论文笔记

    论文《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》. Pierre Sermanet,etc. 


素质三连

1.论文贡献

第一次解释了CNN如何用于定位和检测。

提出了一个用于图像分类、定位和检测的集成框架。

提出了特征抽取器:Overfeat。

2.实验结果

获得ILSVRC 2013的定位和检测任务的第一名。

3.待解决的问题

精度不高。


背景

    计算机视觉任务:图像分类目标定位目标检测。在ILSVRC2013比赛的分类任务中,模型对每张图片给出最可能的5个预测,这样做的原因是每张图片中可能包含多种类别的物体。定位也一样,每张图片模型给出5个预测,每个预测就是bounding box。当返回的bounding box和ground truth的IoU(Intersection over union)大于0.5而且预测的分类正确时才算预测正确。检测不同于定位,图片中可以包含任意个物体,误检会降低mAP(mean average precision)的分数。

定位和检测例子如下:

2.png

    对许多任务来说,卷积神经网络的优点是整个系统是端对端的,缺点是需要大量数据集。这篇论文的主要提出了一个可以同时分类、定位和检测的卷积神经网络模型,这个网络提升了分类、定位和检测的精度。这个模型前面几层是卷积层,这里用作特征抽取器,命名为Overfeat,但有时候也称整个模型为Overfeat。

    本文通过累计预测边界框(accumulating predicted bounding boxes)来进行定位和检测,还展示了通过联合多个预测的定位,可以在无需对背景图片训练的情况下直接进行输出目标的bounding box,没有对背景进行训练可以让网络只专注于positive classes从而提高精度。

    从目标检测的任务上说,ImageNet数据集上里要检测的对象的大小和位置都有很大的不同,要解决这个问题有几个方法:

    1.是在图像的多个位置、以滑动窗口(sliding window)的方式,在多个尺度(multiple scales)上应用卷积神经网络。单纯的滑动的窗口可能包含对象的一部分,这样对于分类是可以的,但是用于定位和检测效果很差。

    2.是模型对每个滑动窗口不仅输出类别,同时输出定位目标的bounding box。

    3.是对每个位置和尺寸累积一个evidence。

    其实在AlexNet中,Krizhevsky说过他们用CNN做了图像定位的工作,但没有详细说怎么实现的。因此本篇论文是第一篇详细解释了CNN怎么用于图像定位和检测。


分类模型

    Overfeat是基于AlexNet 的,因此很多地方,包括网络结构、包括训练方法和AlexNet论文里提到的方法类似的。模型在ImageNet 2012上训练,训练配置如下:

输入数据集的处理同AlexNet:先将图片各向等比缩放至短边为256,然后在该图片和该图片的水平翻转上随机裁剪出5张221x221的输入图片(但是下一节的这个就不是这么说的)。

mini-batchs=128。

网络权重使用高斯分布的随机初始化:均值为0,标准差为0.01。

使用SGD更新权重,动量系数为0.6,L2正则化权重系数为1e-5。

学习率初始值为0.05,到一定的epochs(30,50,60,70,80)学习率x0.5。

对FC层使用0.5的dropout。

overfeat有fast和accuracy两种架构,下面是fast详细情况:

3.png

下面是accuracy的细节:

5.png

两个模型参数和连接数的对比:

6.png

性能对比:

7.png

    从上面可以看到,accuracy模型比fast模型更加精确,但是连接数更多,因此比较慢。

    从上面可以看到训练阶段6-8层是全连接层,测试阶段将全连接层作为1x1卷积层使用,此时该1x1卷积的特征图大小取决于输入图片大小,这其实就是FCN的思想,但是此时FCN还没有提出来。

    1-5层和AlexNet一样,包括使用ReLU和Maxpooling。但也有一些不同的地方,比如:1.训练数据未使用对比度归一化;2.池化区域不重叠;3.因为使用了更小的stride,所以1、2层的特征图比AlexNet更大;4.取消了LRN。

    下面是模型第一层、第二层卷积核的可视化:

4.png


Multi-scale和offset pooling

    这节内容是本篇论文的核心。

    在AlexNet中,multi-view voting用来提高测试性能:输入一张256x256的照片,图片的四个角和中间可以裁剪得到5张224x224的输入,将原图水平翻转再得5张,将这10张图片输入到模型中进行预测,然后取各预测值的均值。但是这种方法会忽略掉图片的很多区域,大量的重复计算。只使用单一尺度,但这个尺度不一定能让模型给出最高置信度。

    本论文使用offset pooling和multi-scale结合的方法,通过在每个位置和多个尺度上密集地运行网络来探索整个图像,而且对CNN来说这样方法很高效,在保持高计算效率的情况下产生了更多的voting views,从而增加模型的鲁棒性。

    整个网络总的下采样倍数是2x3x2x3=36,即每输入36个像素得到一个分类向量。AlexNet的10-view voting方案的粗糙的输出分布(coarse distribution of outputs)降低了性能,因为输入窗口与图像中的目标没有很好地对齐。为了避免这个问题,这里采用了和论文<Fast image scanning with deep max-pooling convolutional neural networks>相同的方法,即采用offset pool。这样就消除了分辨率的损失,得到的下采样倍数是12而不是36。为什么是12?因为使用三个offset:0 1 2,由于卷积核大小为3,因此也只能使用这3个offset。

    下面解释一下如何执行multi-scale和offset-pooling。使用6种输入尺度,加上图片水平翻转的6个尺度,一共12个尺度。不同尺度的输入第5层卷积就得到不同的分辨率特征图,各个尺度输入下各张量的大小:

8.png

    这就是多尺度multi-scale。下面介绍offset,第五层卷机后的特征图池化后送入分类器,下图是以Scale 2为例,用特征图的一维作为示例图,展示池化和分类器工作过程: 

9.png

步骤如下:

A.对于某个尺度的某张图片,经过前五层的卷积后得到特征图。上图中特征图的分辨率是20x23,256个通道。

B.对于该特征图,重复多次使用非重叠的池化,每次池化的偏置不同,有行偏置和列偏置。上图中偏置池化3次,偏置分别为为(0,1,2)。这就是offset pooling,也被称为fine stride。offset pooling得到的特征图的维度为6x7x3x3xD,其中6x7是特征图的分辨率,3x3是偏置池化的次数,D是通道数。上图中是以1维显示的。

C.池化后得到的特征图将被送入分类器。

D.分类器的输入是的5x5xD,输出是C(类别数)维向量。但是offset pooling后得到的特征图并不是5x5xD,比如上图中的特征图大小为6x7xD,因此分类器以滑动窗口的方式应用在特征图上,每个滑动窗口经过分类器输出一个C维向量。比如上图中输入的6x7xD的特征图最终得到2x3xC的输出,其中2x3是滑动窗口的个数。

E.而2x3xC只是一组偏置池化的输出,总的输出为2x3x3x3xC,将输出的张量reshape,得到6x9xC输出张量。最终输出分类张量为3d张量,即两个分辨率维度 x C维。

    上面这些操作可以看做分类器通过pooling layers移动viewing window 1个像素,而不需要下采样;和在下一层中使用skip-kernels  [原文:These operations can be viewed as shifting the classifier’s viewing window by 1 pixel through pooling layers without subsampling and using skip-kernels in the following layer (where values in the neighborhood are non-adjacent)]。或者说,在每个可能的偏移处使用池化层和分类器,并通过交叉输出来组装结果。

    接下来产生最终的分类结果:

1)对每个尺度的输入得到每个位置的分类结果,对每个分类取该尺度各个滑动窗口的空间最大值。

2)求出所有尺度的每个类的均值。

3)取这些均值的top-5或top-1分类。

    这就是整个分类过程的工作原理。直观的说,整个网络由两部分组成:(1-5)是特征抽取层,(6-output)是分类器。在分类器中,我们希望在不同的位置和尺度的第五层特征映射中寻找固定大小的表示。第五层穷举池化的方式可以获得分类器和目标表示之间的对齐。


结果

10.png

    从上图可以看到,使用的尺度种类越多,测试误差越小,使用fine stride比使用10个裁剪输入效果要更好。

    在ILSVRC13的结果:

11.png

    Overfeat获得了分类任务的第四名。


卷积神经网络和滑动窗口

    与很多滑动窗口的方法相反,用卷积网络计算滑动窗口天然的高效,重叠的区域可以共享计算结果。

12.png

    图中的上半部分表示训练时输入的是固定大小的图片,最后经过分类器得到输出。而下半部分表示测试时,输入的图片大小不固定,因此将模型的全连接层转换为为1x1卷积卷积层,这样输入不同大小的图片最终得到不同大小的输出特征图,这也是FCN的思想。上图中下半部分图片增大,但卷积层的计算量因为图片增大的部分而部分增加,不会像FC层那样使用滑动窗口导致计算量成倍增加。

    


定位模型

    图像的定位任务一般要求先对图片进行分类,再定位到目标。前面已经实现了分类功能,因此定位模型只是在分类模型的bottle neck加入一个bounding box回归器就好了。


回归器的训练

    回归器网络以offset pooling后的特征图作为输入,有两个全连接层,神经元数量为4096和1024,有四个输出,代表bounding box的边界。回归过程如下:

13.png

    训练回归器的时候固定1-5层特征抽取器的参数,回归器使用平方误差作为损失函数。上图中回归器的输入是offset pooling后的特征图,维度是6x7x256x3x3,其中6x7是池化后特征图的分辨率,256是特征图的通道,3x3是由offset pool偏置次数。回归器的输出:每个类、每个滑动窗口都有一个bounding box的输出,输出维度为2x3x3x3xCx4,比分类器的输多多一维:4,代表bounding box的四个边界。

    当滑动窗口和gound truth的 bounding box的重合度小于50%时,将不会对回归器进行训练,因为目标主要在当前滑动窗口的外面,用其它包含这个目标的滑动窗口进行预测比较好一点。

    使用多尺度训练回归器对跨尺度联合预测具有重要意义。在单一尺度上进行训练,模型能够在那个尺度上预测的很好。然而,训练多尺度将使预测在不同尺度上正确匹配,并成倍地增加合并预测的置信度。反过来,我们应该只使用少量的尺度来进行检测。


目标定位过程

    前面已经说过了,使用分类器和回归器最终得到一堆候选的bounding box和该bounding box对应的置信度,举例如下:

14.png

    那么如何确定最终的bounding box呢,算法如下:15.png

16.png

人话:

A.对每个scale,取每个所有位置中置信度最高的k个类,设为Cs,s=(1-6),表示尺度。

B.对于Cs中的每个类,在这个scale中的所有位置,使用回归器预测其bounding box,设为Bs。

C.将多个尺度的Bs合并为B。

D.重复上述步骤直到融合完成。

E.取B中match_socre最小的两个bounding box,称为b1和b2

F.如果b1和b2的match_score大于t,说明此时bounding box选取完成,算法结束。

G.否则,将B中的b1和b2去掉,加入box_merge(b1,b2),回到E

    在上面的算法中,计算match_score使用两个bounding box中心之间的距离加上它们之间交集。box_merge计算bounding box边界的均值。

    整个算法的意思是不停的筛选,直到留下合适的bounding box。最终的预测通过获取合并的bounding box和最大的类置信度给出的,这是通过将检测类输出与预测每个边界框的输入窗口相关联来累积计算的。

    定位过程示例:

17.png

    上图的第一行图片是分类器/回归器输出的分类和每个位置的置信度。第二行是使用off-set pooling之后,每个位置和该位置的分类置信度。第三行是回归器预测对每个滑动窗口预测的位置。第四行是这些bounding box融合并累积到最小数量。

    在上面这个例子中,一些海龟和鲸鱼的bounding box出现在中间的多尺度步骤中,但是在最终的检测图像中消失了。因为这些bounding box的分类置信度很低(最多分别为0.11和0.12),而且它们的集合不像熊的bounding box那样连贯,从而无法获得显著的置信度提升。熊的bounding box有很强的置信度(每个scale大约0.5)和高匹配分数。因此,在合并后,许多熊bounding box被融合成一个非常高置信度的bounding box,而false postive由于缺乏bounding box的一致性和置信度而消失在检测阈值以下。这一分析表明,我们的方法通过奖励bounding box的一致性,自然地比传统的非最大抑制方法更能抵抗来自纯粹分类模型的false positive。


目标定位实验

在ImageNet2012上面跑的结果如下:

18.png

参加ILSVRC13的比赛结果:

19.png



目标检测

略(跟定位差不多)



结论

    这篇论文展示了multi-scale,滑动窗口的方法可以用来做分类、定位和检测。将模型用在ILSVRC2013比赛中,获得了分类第四名、定位第一名、检测第一名的成绩。本文的重要贡献在于卷积神经网络如何用于定位和检测。可以提高的地方:

For localization, we are not currently back-propping through the whole network; doing so is likely to improve performance. 

We are using L2 loss, rather than directly optimizing the intersection-over-union (IOU) criterion on which performance is measured. Swapping the loss to this should be possible since IOU is still differentiable, provided there is some overlap. 

Alternate parameterizations of the bounding box may help to decorrelate the outputs, which will aid network training.



参考文献

[1] Pierre Sermanet,etc.OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks.

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于