Deep Neural Networks for Object Detection
In this paper, we exploit the power of DNNs for the problem of object detection, where we not only classify but also try to precisely localize objects.
The problem we are address here is challenging, since we want to detect a potentially large number object instances with varying sizes in the same image using a limited amount of computing resources.
Rich feature hierarchies for accurate object detection and semantic segmentation
两个关键的insight:
1. 将高容量的CNN应用于自底向上的region proposal,即region proposal是classical tool,将经典工具与CNN结合是重要的。
2. 带标签的数据不够的时候,用辅助任务进行预训练,然后进行微调,这种范式能用于许多数据稀缺的视觉任务。
模型有三个模块:
第一个模块用于得到与类无关的region proposal
第二个模块使用CNN将每个region proposal 转换成fixed-size feature vector
第三个模块使用class-specific linear SVM进行分类
Region proposal 使用selective search方法
Feature extract 使用五个卷积两个全连接生成4096维向量 ,输入CNN之前有个dilate操作
测试:
在测试的时候,使用selective search拿到2K个region,进行前向传播之后,对每个类,进行greedy NMS(对于IOU大于阈值的,并且存在与它有重叠的region的score比它大的,则去掉该region)
测试效率比较高,两个原因:一是参数在不同的类之间共享,二是CNN获取的vector维数低。由于参数的共享,计算proposal region和 feature的计算量被平摊了。
与类相关的计算就只有SVM中的点积和greedy NMS了。
训练:
使用了带监督的ILSVRC预训练,然后对分类层进行了变动用于特定的数据集。其中iou>=0.5视作正例,否则视作反例。训练时候learning rate比较小,这样不会推翻原来的训练结果。每次SGD时,正负样本1:3,这样减缓了样本不平衡问题,同时,由于正样本极少,这样能够保留一定量的样例。
由于数据量太大,使用了hard negative mining ,对于那些负例,优先选择容易被分错的,以提高分类能力。
分类使用的是histogram intersection kernel SVM.
可视化:
之前有deconvolution的方法来做可视化,本文使用了新的方法。将学到的units应用于原图,将激活值视作score,进行NMS。
消融研究:
在不进行fine-tuning 的前提下,去掉后两层的FC,效果甚至会变好。说明很大一部分表达能力来自于卷积层,而不是全连接层。这个实验说明只使用卷积层来计算密集的特征图是很有潜力的。在进行fine-tuning的前提下,微调后面的层提高更多。结合以上,说明前面的层学到的是泛化的特征,后面的层学到的是class-specific的特征。
检测错例分析:
结果表明,错例中由于弱定位造成的错例占最大比重。使用了bounding box regression以后,解决了很多定位错例。
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
摘要
传统的CNN要求有固定的输入,但是这种人为的限制可能会减少的识别的准确率,本文中为网络配备了spatial pyramid pooling来消除这一限制,该网络叫做SPPNet,能够对任意大小的图片生成固定大小的representation。同时,pyramid池化对目标的形变也是鲁棒的。在检测任务中,首先从图像计算一次特征图,唯一的一次。然后在任意的子区域内进行池化,得到固定大小的表示,进而训练检测器。测试时,比R-CNN快几十到上百倍,同时达到相差不大或者更好地准确率。
引言
具体的,网络由卷积层和全连接层组成,在最后一个卷积层之后加上一个SPP layer。这样做,使得不必一开始就限制数据具有同一的大小,而是在网络的深层要分类时才进行大小的限制。
Spatial pyramid pooling(matching)是Bag-of-words模型的一个扩展,是计算机视觉中最成功的的方法之一。在CNN流行之前,SPP就已经是一个重要的部分了在一些主流系统中。
SPP有几个明显的特点:一,能够将任意大小的图片生成一个固定大小的输出,之前的deep networks 做不到;二,SPP使用了多个级别的bins,而之前的sliding windows pooling使用的是固定的大小。而这种多级别bins对于目标形变具有鲁棒性。
使用不用大小的图片进行训练增强了规模不变性,减小了过拟合。
R-CNN中运算量太大,SPPNet中首先计算整个图的feature map,然后才进行特征获取。有近百倍的加速。
使用了当时最新的fast proposal method of EdgeBoxes ,达到了每张图0.5s,能用于实际。
带SPP的DNN
通过CNN得到的特征类似于传统方法得到的特征,In those methods, SIFT vectors [29] or image patches [28] are densely extracted and then encoded, e.g., by vector quantization [16], [15], [30], sparse coding [17], [18], or Fisher kernels [19]. These encoded features consist of the feature maps, and are then pooled by Bag-of-Words (BoW) [16] or spatial pyramids [14], [15]. Analogously, the deep convolutional features can be pooled in a similar way.
SPP
训练
训练分为single-size training和multi-size training。前者中,在每一level的pooling中,采用最大pooling,feature map是a*a,要生成n*n个bin,则sliding window大小为a/n向上取整,stride为a/n向下取整。后者中,在实现时,采用了两个具有不同输入要求的网络,它们共享参数,只是输入大小不同,相当于实现了对不同输入有相同大小的输出的功能。每个网络中固定大小是为了GPU运算方便。之后又进行了随机实验,即每个epoch中从180到224随机选取图片大小。以上只是训练时候的配置,测试时直接输入任意大小的图片。
分类任务
产生很大提升,原因不仅仅是参数量增加了,还因为SPP对边形和空间布局具有鲁棒性。
结果能说明,multi-size比single-size好,full view比crop view好。
与其他操作scale/size的方法相比,其他方法都是在test阶段进行操作,如Overfeat和howward’s method。但SPPNet是在训练时进行scale/size上的操作。
ImageNet 2012
ImageNet 2012中,单模型第一,多模型第三。
检测任务
相比R-CNN,只进行一次feature extract,大大减少了计算量。
首先使用SS生成2K个region,然后在整个image上进行一次feature extract,之后,将ground-truth作为正例,与ground-truth的IOU<=30的作为反例,对于反例来说,如果两个反例的overflap IOU超过70,则去除其中一个。(类似NMS)
考虑到分类任务中multi-scale对性能有提高,一个比较好的策略,对于一个candidate window来说,为它选择一个scale,使得window所含的像素数量接近224*224,如果scales的大小足够密集并且window接近方形,这种方法就等价于resize到224然后再extract feature。
总结
1. 可以用于不同scale、size、aspect ratio的图片
2. 加速
Fast R-CNN
摘要
相比之前的R-CNN,本网络训练要快9倍,并且测试时快213倍,并且在VOC 2012取得了更高的mAP。相比SPPNet,训练快3倍,测试快10倍,并且accurate更高。
引言
由于检测任务的复杂性,之前的方法用multi-stage的方式,这样比较慢而且不优美。本文提出一种one-stage的方法,同时进行目标的分类和定位的微调。
先来回忆下R-CNN和SPPNet。R-CNN有以下缺点,1.R-CNN首先通过log loss对Net进行fine-tune ,然后将Net获取的特征喂给SVM,第三步进行bounding-box-regression.是一个multi-stage的过程。2.抽取的feature要保存下来,这个比较消耗内存和时间。3.测试时47s/image,很慢。R-CNN没有进行共享计算,而SPPNet进行了共享计算,训练时间减少了3倍,测试时间减少了10-100倍。和R-CNN一样,SPPNet也有很多缺点,也是multi-stage的。也要经过特征提取、网络fine-tune、SVM训练、bounding-box-regression等。但有一点不同,SPPNet没有fine-tune SPP之前的卷积层。
Fast R-CNN有几个优点,1.mAP更高2.single-stage,使用multi-task loss3.所有的层都能更新4.不用对特征进行缓存
网络结构和训练
ROI pooling
将ROI转换成H*W的feature map,H、W是超参数,池化单独作用于每个channel。ROI pooling相当于是SPP的special-case,此时level为1.
使用预训练网络进行初始化
将预训练网络初始化成Fast RCNN需要三个转变。1.最后一个max pooling要使用ROI pooling来代替,以生成固定的向量。2.最后的全连接层和softmax层要用两个姐妹层代替。3。网络的输入修改成两部分,一部分是图片本身,一部分是ROI。
Fine-tuning
提出了一种高效的训练方法。N是mini-batch大小,R是每次mini-batch要的总的region。每张图里采样N/R个region。这种采样叫做hierarchical在R不变的前提下,N越小,能够减少计算量。
多任务损失
对于每个ROI,
p是softmax得到的向量,u是第u类,t^u是预测的位置,v是真实的位置。
这种损失函数能够避免梯度爆炸。
Scale-invariance
两种方法,1.暴力法,在训练和测试时都将图片转换成固定的大小,让网络学习scale-invariance,2.金字塔方法
目标检测
分类任务中,卷积计算量远大于全连接。但是目标检测时,ROI的数量非常多,此时全连接 的计算量占几乎一半。此时可以使用truncated SVD来进行压缩。
u*v=u*t*t*t*t*v,其中U是W的t个左奇异向量构成的,V是t个右奇异向量构成的,Σ是一个由W的t个奇异值构成的对角矩阵。参数量从u*v变为t(u+v)。此时,可以将原来的单层全连接换成两层全连接,中间没有非线性激活。
主要成果
1. 实现了SOTA mAP在VOC07,10,12
2. 相比R-CNN,SPPNet更快
3. Fine-tune了VGG16的卷积层提高了mAP
一些总结:
前人的实验中,对于DPM,增加数据的量会出现饱和。本实验中,通过增强数据,提高了mAP。
分类器使用了softmax,而之前的SPPNet和R-CNN都是SVM。Softmax是不是比SVM更好,做了一个实验,
结果表明,差距不明显。但至少说明,相比SVM的multi-stage,softmax已经够用了。同时,softmax引进了SVM没有的竞争机制。
检测器可以大致分为两种,一种是具有稀疏proposal,比如selective。一种具有密集proposal,比如DPM。前者是一种级联的方法,首先去掉大量的候选框,然后再对剩下的少量候选框进行评估。实验表明,这种方法应用于DPM时提高了准确度。
实验表明,增加proposal的数量,AR先增加后轻微下降 (蓝色实线)。
当一幅图中proposal的数量固定时,在R-CNN中使用的几种proposal方法表明,mAP和AR是相关的。但是,本图中,当proposal的数量变化时,表现出不相关。所以使用使用AR这个指标时要慎重,因为随着proposal数量增加时,AR可能会增加,但是mAP并不会。
实验表明,在selective search box固定时,增加一些dense box,mAP会下降很多。当进一步使用SVM时,mAP会进一步下降。