SPP Net

论文:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
地址:https://arxiv.org/abs/1406.4729

1 INTRODUCTION

spp 可以在卷积层和全连接层中间实现信息聚合操作,避免了从网络的开始阶段使用
crop和warp操作。
在这里插入图片描述

作者注意到,SPP对于CNN具有几个很好的特性:

  • 1)SPP能够不管输入的大小而生成固定长度的输出,而CNN中使用的滑动窗口pool则不能;
  • 2)SPP使用多尺度的pool,而滑动窗口pool仅使用单个窗口大小。多尺度pool已经表明对对象形变有更好的鲁棒性;
  • 3)由于输入比例的灵活性,SPP可以以可变比例提取的聚合要素。通过实验表明,所有这些因素都提高了CNN的识别精度;

SPP-net不仅能够从任意大小的图像/窗口生成测试用的特征,还允许使用不同尺寸的图像用来训练。作者实现了一个简单的多尺度网络的训练方法:对于接受可变输入大小的单个网络,通过在多个固定大小输入的网络之间共享所有参数的网络对其进行近似。在一个网络(如输入是227x227)上训练一个epoch,然后在转移到下一个网络上(输入是180x180)

spp-net在分类任务上取得了SOTA的成绩,在检测任务上也取得了不错的成绩。作者对比了R-CNN的结果,SPP-net网络可以提取一次cnn的特征加速,比R-CNN快了100倍。如果使用EdgeBoxes方法而不是ss提取候选框,可以达到0.5s一幅图片。

作者发现多尺度的方法可以提高分类准确的

2 DEEP NETWORKS WITH SPATIAL PYRA-MID POOLING

2.1 Convolutional Layers and Feature Maps

CNN需要固定的输入是因为有全连接层需要固定的输入。卷积层是不需要固定的输入的。

作者通过可视化feature map推测出卷积的能力。
在这里插入图片描述

2.2 The Spatial Pyramid Pooling Layer

SPP(Spatial pyramid pooling)通过使用空间的bin来聚集局部的特征。这些空间bins的大小与图像大小成比例,因此无论图像大小如何,bins的数量都是固定的。这和之前的pool层相反,之前pool层输出的大小依赖输入图片的大小。
在这里插入图片描述
为了使CNN网络可以接受任意大小的图片,作者对CNN进行了改造,把 p o o l 5 pool_5 pool5,也就是最后一个卷积层后的pool层换成 spatial pyramid pooling layer 如图3。
作者全文都使用MaxPooling,SPP的输出维度是 k * M,k是最后一层卷积过滤器的个数,M是SPP使用的bins数量。SPP层输入接入到fc层。通过SPP layer 输入图片就可以是任意大小的图片了。 不同大小的图片输入到同一个网络中,网络会提取不同尺寸的特征。不同的大小也影响网络的准确性
作者使用的SPP尺寸有一个全局最大池化Max Pooling。在其他的论文里也提及到全局平均池化:

  • 可以减少模型的大小,减少过拟合;《Network in network》,《Going deeper with convolutions》
  • 在所有的fc层之后使用全局平均池化增加准确率(VGG)、《Very deep convolutional networks for large-scale image recognition》;
  • 全局最大池用于弱监督对象识别 paper《Learning and transferring mid-level image representations using convolutional neural networks,》。

全局池操作与传统的方法相对应 Bag-of-Words方法

2.3 Training the Network

Single-size training
对于一个a*a的feature map,有n*n的bins,那么pool的窗口大小为 w i n = c e i l ( a / n ) win=ceil( a/n ) win=ceil(a/n) s t r i d e = f l o o r ( a / n ) stride = floor( a / n ) stride=floor(a/n)。 SPP如果有L个n*n的level bins,作者实现了L个layer,然后在fc层中把这些特征concatenate起来。如图,使用了3层spp pooling(3x3, 2x2, 1x1)
在这里插入图片描述
我们单一尺寸训练的主要目的是实现多级池化行为。实验表明这是提高精度的原因之一。

Multi-size training
作者除了使用224x224还用了180x180的图片尺寸,且使用224x224直接resize到180x180。
对于180输入的网络,作者实现了一个固定输入大小的网络, c o n v 5 conv_5 conv5 之后的feature map大小为10x10;里面同样加了SPP,仍然使用 w i n = c e i l ( a / n ) , s t r = f l o o r ( a / n ) win = ceil(a/n), str = floor(a/n) win=ceil(a/n),str=floor(a/n)方式实现,这样和224输入的网络spp之后输出的特征维度一样。这样180的网络和224的网络有完全一样的参数量和结构。换句话说,在训练过程中,我们通过在两个固定输入大小的网络中间共享参数实现了可变输入大小的spp网络。

在一个网络(180输入)训练完一个epoch之后再在另一个网络(224输入)训练下一个epoch。训练一个epoch之后网络参数也迁移到另一个网络上,这样可以减少网络迁移消耗。

相对于两个固定大小的输入,作者还实现了在[180, 224]之间随机大小的输入测试,作者会在实验阶段报告结果。

单尺寸和多尺寸训练都是在训练阶段。在测试阶段,sppnet直接测试各种大小的图片。

3 SPP-NET FOR IMAGE CLASSIFICATION

3.1 Experiments on ImageNet 2012 Classification

作者在ImageNet2012上训练了1000分类的网络,训练方法参考了:Alex、ZFnet、注1,

  1. 短边缩放到256,在中间和4角裁剪图片,然后使用水平翻转和颜色变换
  2. 使用dropout
  3. 初始lr是0.01,在错误率不降之后lr下降0.1,该过程发生2次

3.1.1 Baseline Network Architectures

作者测试了4种网络结果:AlexNet、ZF-Net、Overfeat-5/7。
在这里插入图片描述
在卷积后面pool 之后得到6x6的feature map,然后使用2个4096的fc接softmax。ZF-5训练了70个epoch,其他网络训练90个epoch。由于使用了4个角落的裁剪所以结果优于原论文结果。

3.1.2 Multi-level Pooling Improves Accuracy

作者使用224x224训练单尺寸网络,和no spp有同样的卷积网络结构,spp使用4-level:{6x6,3x3,2x2,1x1}一共50个bins。使用10-view的224x224预测方法。比baseline模型有比较好的提升。
在这里插入图片描述
值得注意的是:b相对于a top-1最高的提升(1.65%)来源于错误率最低的Overfeat-7模型,因为同样使用了10-view测试方法,所以这些提升完全是由于多层池化导致的
作者验证了多层池化的提升的原因不是因为引入了更多的参数,而是因为多层池化对物体变形和空间布局的变化具有很强的鲁棒性。作者训练了另一个ZF-5网络使用4-level 金字塔:{4x4, 3x3, 2x2, 1x1}共30bins,该网络比no-spp有更少的参数,fc6的输入维度由36256b变成了30256。错误率:35.06/14.04(top-1/top5),和50-bin 的金字塔相似(34.98/14.14),且高于no-spp网络的(35.99/14.76)

3.1.3 Multi-size Training Improves Accuracy

作者使用180和224训练多尺度网络,如上表的c。在测试时使用224、标准的10-view测试方法。对于no-spp和单尺度的结果都有很大的提升。
作者还测试了在[180, 224]之间随机尺寸评估,SPP-net (Overfeat-7)的top-1/5错误率:30.06%/10.96%。结果比2个尺寸的网络效果略差,可能是因为 网络没有看到比较多的224大小的图片 。但是仍然优于单尺寸的模型。
多尺度的方法,大多应用在测试阶段。不同尺度的预测结果取平均值作为时候的结果。Howard’s 训练了2个不同输入尺寸的网络然后结果取平均值作为最后的结果。

3.1.4 Full-image Representations Improve Accuracy

作者保持长宽比把短边resize到256。使用sppnet测试在全图片上的分类效果;作者在前者的基础上从中间裁减了224x224大小的图片作为对比。对比结果如图
在这里插入图片描述
所有的全图片的测试错误率都低于裁剪的错误率。说明:__保持图片的完整是非常重要的
__。

对比表2和表3,作者发现10-views测试方法由于全图片的测试方法。但是全图的测试方法还是有优点的:

  • 即使是组合了多个裁剪后的结果,在加上两个全图片的结果(翻转),任然能提升0.2%的准确率
  • 全图片的测试方法可以把整个图片的信息聚合到一起。
  • 在图片检索应用场景下,使用的是全图的特征而不是一个分类的分数。

3.1.5 Multi-view Testing on Feature Maps

由于spp的特性,spp-net可以提取任意大小图片的feature map。所以作者把图片的小边resize到预定义的s长度,然后使用spp-net计算全图的feature map,flipped的图片也一样计算feature map。然后根据在原图的view大小,映射到对应的feature map上,然后使用spp对不同的views大小的feature map提取特征,把计算后的特征feed到fc层计算最后的得分,把所有view的得分取平均作为最后的预测结果。
在s=256,view为224x224的尺寸下的10-views,feature map上views的方法和在原图crop上的方法最后的结果误差在0.1%之内。

作者更进一步测试,多个尺寸的结果。作者使 s ∈ { 224 , 256 , 300 , 360 , 448 , 560 } s \in \{224, 256, 300, 360, 448, 560\} s{224,256,300,360,448,560} 。计算每个大小的feature map,使用224x224作为view的大小。作者在每个大小上使用18-views:1个中间、4个角、4条边中间,翻转*2。当s=224时有6个views。组合这96个views的结果可以把top5错误率从10.95%降到9.36%。再结合两个全图的结果可以把结果降到9.14%。

3.1.6 Summary and Results for ILSVRC 2014

3.2 Experiments on VOC 2007 Classification

使用之前的预训练网络在目标数据集上提取全图片的特征,重新训练SVM分类器。在训练SVM时,故意不使用数据增强手段如翻转、多views手段。把特征使用L2正则化后训练SVM分类器。

在这里插入图片描述
作者训练baseline分类器网络:

  • table6中的a:不使用spp的ZF-5,resize图片短边到224,然后裁剪中心的224x224,使用CNN的一层特征训练SVM。在当前数据集上,使用越深层的特征效果越好
  • b网络,基于no-spp网络替换成spp-net,测试方法任然使用中心裁剪224x224。fc层的结果获得了改善,这些增益主要是 由于多层池化导致的
  • c网络,使用的是全图片测试方法,把短边resize到224。结果又有提升:78.39% vs. 76.45%。这是因为全图片的特征保证了特征的完整性
  • d网络,由于spp-net网络不受输入图片大小的限制,所以作者在验证集上测试了不同s的影响,发现s=392验证集效果最好,这个可能是因为VOC中物体的尺寸普遍小,而在ImageNet数据集上的物体普遍较大。这个结果表明:在分类任务中物体的大小会影响最后的结果,而SPP可以部分的解决尺寸不匹配的问题。
  • e网络。使用作者最好效果的模型(Overfeat-7, multi-size trained),mAP最后增加到82.44%

在这里插入图片描述
作者比较了最近的SOTA方法。其中有两个方法:Oquab et al.’s (77.7%) and Chatfield et al.’s (82.42%) 通过使用fine-tuning和多views测试方法达到的比较好的结果。如果作者采用这种方式效果应该会更好。

3.3 Experiments on Caltech101

作者使用每个类30张图片训练,每类最多50张图片测试。
在这里插入图片描述
可以看出和table6得出大概相同的结论:

  • spp-net 比 no-spp 网络效果好,b vs a
  • full图片效果比crop的效果好,c vs b

但是

  • 全连接的效果比spp layer层效果略差:可能是 因为101的数据集和ImageNet的数据集类别相关性较少。但是网络中越深的层特征和类别相关性越高
  • 而且,在该数据集上发现224的图片大小有最好的性能。主要是 因为101的数据集也和ImageNet数据集一样,物体占据图片中的大部分
  • 除了裁剪,作者也测试了resize(warp)到224x224,这样可以包含左右图片的内容,但是引入了形变。使用spp(ZF-5)的spp layer特征的准确率是89.91%,比相同模型使用全图片没有引入形变模型的准确率91.44%低

4 SPP-NET FOR OBJECT DETECTION

作者把spp也应用在物体检测了。相对于R-CNN的每个框多次提取特征,spp只提取一次全图片的特征,多个尺度可能会提取多次。然后使用spp使用spp pool 提取每个框的特征输出到固定长度的特征。如下图。这比R-CNN快很多。
在这里插入图片描述

4.1 Detection Algorithm

作者使用ss每张图片上提取2k个候选框,把图片短边resize到s,使用ZF-5(单尺度训练)-spp net提取整幅图片的特征。对于每个候选框,使用 4级金字塔(1x1, 2x2, 3x3, 6x6, totally 50 bins) 聚集特征,每个候选框生成了 12800(256*50) 维特征。把特征输入到fc层。然后给每个类目训练一个二分类SVM分类器。论文依照《R-CNN》和《egmentation as selective search for object recognition》的方法训练SVM。
使用 ground-truth窗口的特征作为正样本 、 和正样本重叠(IoU)最多30%的框作为负样本。如果一个负样本和另一个负样本IoU大于70%,就删除该负样本。使用标准的standard hard negative mining 训练SVM,迭代一次。测试阶段的分类器对每个框进行评分,然后使用NMS(non-maximum suppression )阈值30%,

spp-net可以通过使用多尺度的方法改善结果。作者resize图片,把短边置位 m i n ( w , h ) = { 480 , 576 , 688 , 864 , 1200 } min(w,h)=\{ 480, 576, 688, 864, 1200 \} min(w,h)={480,576,688,864,1200} 对于每个尺度,计算conv5的特征。 一种组合这些特征的方法是channel by channel聚合到一起(类似concat) 。但是作者根据经验采用了更好的组合方法:对于每个候选框,选择一个缩放后候选框大小像素个数和224x224最近的尺寸。作者仅适用该尺寸下的候选框的特征提取。spp-net 不管图片的候选框的个数,也只提取一个全图片的feature map。类似于直接把框resize到224x224。

作者根据R-CNN的方法fine-tune预训练网络。spp可以聚合任意大小候选框conv5的feature map。简单操作,作者只fine-tune全连接层。网络结构是卷积之后fc6(4096)、 fc7(4096),再接一个21分类的fc8。

在fine-tune中,候选框和gt的IoU [0.5, 1]是正样本,[0, 0.5]是负样本。在一个batch中25%是正样本。训练了250k个minibatch lr为1e-4,然后训练了50k个 mini batch lr 1e-5。作者也使用了R-CNN的 bounding box regression 方法对box后处理提高准确率。用来回归的特征是conv5后的特征,和R-CNN保持一致。训练回归的候选框是和ground-truth框IoU至少是50%的框。

4.2 Detection Results

作者在VOC2007上测试了检测任务。
在这里插入图片描述
作者的单个scale:688。从图上看fc6层的效果差于R-CNN,可能的原因:没看懂

An explanation is that our fc layers are pretrained using image regions, while in the detection case they are used on the feature map regions. The feature map regions can have strong activations near the window boundaries, while the image regions may not.

作者在预训练网络的时候使用的是image region特征训练的,然而在检测任务中使用的是feature map上的region。两者特征在边缘是不一样的,基于feature map的region在边缘可以邮很强的激活值,而使用image region则没有。作者说可以通过fine-tune来解决这个差异。

在这里插入图片描述
作者和R-CNN对比了同样的预训练模型的效果。效果提升的原因: 因为ZF-5的结构强于AlexNet,spp net的多层池化也对结果有帮助
作者也对比了各种好的检测方法:
在这里插入图片描述

4.3 Complexity and Running Time

在这里插入图片描述
作者使用相同的ZF-5模型和R-CNN做了速度和结果的比较。spp的1-scale比rcnn快了102倍但是效果下降了1.2%,5-scale的和r-cnn效果一样且速度快了38倍。

作者使用速度较快的EdgeBoxes方法(0.2s/per img, 1-2s/per img Selective Search)。作者认为 在测试阶段使用EdgeBoxes方法提取候选框,输入到使用SS训练的模型里是足够的 。单独使用EdgeBoxes,不使用bounding-boxes mAP结果为:52.8%,比使用ss的方法效果下降了,所以作者认为EdgeBoxes方法不适合训练模型。
然后作者使用EdgeBoxes和SS方法训练模型,在测试阶段只使用EdgeBoxes,不使用bounding box下达到56.3%,比table10里的55.2%高,原因是在训练阶段 使用了更多的样本,由于使用了EdgeBoxes的方法导致了更多的不同框 。基于这个流程,整个图片的测试时间在0.5s左右包括提取候选框和识别阶段。

4.4 Model Combination for Detection

作者提出了一种检测模型的融合方案:使用不同的初始化方案,重新再ImageNet上训练分类模型,重复一样的步骤训练检测模型,如table12里spp-net(2)
在这里插入图片描述
两个模型的效果差不多。2个模型在测试阶段都对测试图片提取候选框和预测概率和类别,然后把两个模型的结果放到一起执行NMS,在联合两个模型之后最终的mAP达到了60.9,在20个类别中有17个类别均优于两个模型。说明两个模型有互补性。
作者发现 这种互补性主要来自卷积层 ,作者测试过联合两个随机初始化 fine-tune 两个同样卷积的模型,但是没有获得好的收益。

4.5 ILSVRC 2014 Detection

作者参加了只能使用提供的数据训练。检测数据集和分类数据集主要有3个不同之处,而且影响预训练模型的效果。

  1. 数据集少,检测的数据是分类数据的三分之一。
  2. 检测的类别是分类类别的1/5。为了减少影响,作者使用了子类别的信息预训练网络,大概有499个类别。作者 在检测数据集预训练了一个499分类的网络
  3. 检测数据集合分类数据的图片尺寸不一致。分类任务中主要的物体占整张图片的80%,但是检测。为了减少尺寸的影响,作者把训练图片的短边resize到400,而不是256,然后随机裁剪224x224的views来训练,只有和ground-truth对象的IoU至少是50%的crop才会作为训练。

对于预训练分类网络。使用table9里的pool5,mAP:43%。如果在检测数据集上使用200分类预训练,这个分值降到32.7%,如果使用499分类,结果会到35.9%。有趣的是: 即使不增加训练数据集,训练类别更多的分类网络也会有提升 。作者最终训练了一个短边400而不是256的网络,mAP达到了37.8%

作者具体的训练步骤:

For ILSVRC 2014, we train a 499-category Overfeat7 SPP-net. The remaining steps are similar to the VOC 2007 case. Following [7], we use the validation set to generate the positive/negative samples, with windows proposed by the selective search fast mode. The training set only contributes positive samples using the ground truth windows. We fine-tune the fc layers and then train the SVMs using the samples in both validation and training sets. The bounding box regression is trained on the validation set.

5 CONCLUSION

总结的点

作者的实验

  1. 在ImageNet2012上,网络结构一定,测试了:单尺度、多尺度训练。crop和full测试、以及多scale和views预测
  2. 然后作者使用预训练的网络在VOC2007上测试,预训练网络提取特征,然后训练SVM分类器,使用不同网络和层的特征训练SVM对比效果。作者使用单view且没有fine-tune
  3. 在检测算法上,作者只是微调了预训练网络的fc层
  4. 感受野的映射方法,看附录。
    对于在feature map上的一个点 ( x ′ , y ′ ) (x', y') (x,y) ,在图片域上的映射点 ( x , y ) = ( S x ′ , S y ′ ) (x,y) = (Sx', Sy') (x,y)=(Sx,Sy),S表示的是之前所有层stride的乘积。给定一个图片域上的一个点,计算feature map上的位置:对于左上边界 x ′ = ⌊ x / S ⌋ + 1 x' = \lfloor x / S \rfloor +1 x=x/S+1,右下边界 x ′ = ⌈ x / S ⌉ − 1 x' = \lceil x / S \rceil -1 x=x/S1,如果padding不是卷积核宽度p的 ⌊ p / 2 ⌋ \lfloor p / 2 \rfloor p/2,那就需要加上offset。

论文

  1. 在Alexnet上做了数据增强的方法测试:《Some improvements on deep convolutional neural network based image classification》

    1. 提出更有效的数据增强方法
    2. 说明数据增强(无论是训练时还是测试时)是非常具有普适性的
    3. 提出简单的贪心算法来减少TTA的数量
  2. DetectorNet : 《Deep neural networks for object detection》

  3. 《Segmentation as Selective Search for Object Recognition》

  4. 《Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值