论文阅读: Fast R-CNN

Introduction

structure层面

论文中给出了Fast R-CNN的大致结构。需要注意的是,右半边的结构图(灰底色)中,黑框表示operation红框表示output
这里写图片描述

我画了一个流程图,用来解释Fast R-CNN的形成:
这里写图片描述

如图所示,R-CNN留下了两大问题亟待后人解决:
1. feature map不共享;
2. mutli-stage (特征抽取、SVM分类、location回归) 太复杂太costly。

第一个问题,被前辈SPPNet通过 共享卷积 (本质上就是共享特征提取的结果) 解决了。
Fast R-CNN继承了SPPNet这一思想,并把SPPNet的SPP layer简化为了RoI Pooling。
SPP layer是在RP上做3-stage (每个scale宽高比相等但 H × W 大小不等) 的max pooling;RoI Pooling将之简化为1-stage的max pooling。
由于这个时期人们都只在topmost-feature map上进行RP操作,因此,弃SPP layer用RoI Pooling相当于主动放弃了SPPNet中的multi-scale思想。而这一multi-scale思想在SSD中通过multi-feature map再次被发扬光大,并成为了之后的detection算法标配。当然,这都是后话。

针对第二个问题,特征抽取网络、SVM分类器、location回归器在Fast R-CNN中被整合到了同一个深度学习网络中,从此可以便捷快速地一起训练了。

loss层面

L l o c :由R-CNN、SPPNet时代沿用的 L 2 演化为了 S m o o t h   L 1

batch层面

RBG大神提出了mini-batch (即N=2) 的认知。

backbone层面

出于backbone的限制,R-CNN、SPPNet的backbone用的都是AlexNet。到了Fast R-CNN的时候,已经有VGG了。于是Fast R-CNN采用了VGG-16作为其backbone。

在SPPNet中,由于其backbone是AlexNet这种小网络,所以SPPNet的作者们说,train的时候只fine-tune最后的几个fc层,模型精度最高。
RBG大神说,这套定理到了以VGG-16为backbone的深网络中就不适用了。RBG大神做了一系列ablation,发现沿用SPPNet的fine-tune定理会掉点:
这里写图片描述

而如果把fine-tune的范围往前一直扩大到conv3_1 (再往前就对mAP几乎没有提升了) 则效果最好。

compute层面

从time的角度来看,fc层的存在对于单图的cls任务而言,耗时占比小于前面的那些conv层;但在detection任务中,conv只需执行一次,fc却要执行几千次 (对每个RoI都要完整地走一遍fc) ,此时在fc上的耗时就占到了总耗时的50%。

RBG大神给出了解决方案:通过TSVD (截断奇异值分解) 来简化计算。
该方法节省了30%的detection耗时,mAP只牺牲了0.3%:
这里写图片描述

Innovation

宏观上,

  • 从 stage 的角度来看,是从 four-stage 到 two-stage 的演进;
  • 从 task system 的角度来看,是从 two-network system (将分类器和定位回归器用两个网络分开,各自独立训练) 到 one-network system (虽然这两个task是并行的,但都属于同一个network,可以一起训练) 的演进。

Result

Fast R-CNN在VOC数据集上吊打其他算法。

VOC2007:
这里写图片描述

VOC2010:
这里写图片描述

VOC2012:
这里写图片描述

Thinking

Fast R-CNN最吸引我的地方是它第一个将三个独立的任务 (feature extraction、cls、loc regression) 三合为一。将原本笨拙的Detection惯用设计大大精简,Simple is powerful。

到了Faster R-CNN,更是将Selective Search也替换为了能无缝衔接的RPN,从此,Detection的四大任务 (feature extraction、region proposal、cls、loc regression) 归于一统 (可以被一起训练了) 。


[1] Fast R-CNN

猜你喜欢

转载自blog.csdn.net/jningwei/article/details/80324741