深度学习之目标检测之Fast RCNN

深度学习之目标检测之Fast RCNN------2015.9

与R-CNN相比,fast R-CNN的优势在于:1.使用multi-task loss,训练是一步到位的;2.训练会更新所有的网络层(R-CNN只更新卷积层);3.不需要储存中间卷积层产生的feature。

1.1    Fast R-CNN的结构

网络首先用卷积层对全图进行处理提取特征生成convfeature map,然后对每个objectproposal(每个proposal是在feature map上用SS提取的,而全图的feature已经计算过了,因此在处理proposal feature的时候就不需要重新计算了)用一层RoI(region of interest)pooling层从feature map中提取固定长度的特征向量。每个特征向量通过一系列的fc层后分别连接到两个输出层:一个输出softmaxprobability预测K+1个class(K个object,1个background);另一个输出4个用于优化各个class 的bounding box位置的参数。

1.1.1   RoIpooling 层

RoI pooling层用maxpooling将RoI(h x w)中的feature转换成固定大小的feature map(H x W, eg: 7x7,大小与具体RoI无关,而RoI由(r, c, h, w)定义,其中r, c为RoI左上角坐标,h为RoI高度,w为RoI宽度)。就是将RoI分成 h/H x w/W个小窗口并对每个窗口进行max pooling,并且每个channel独立操作。其实RoI pooling层就是SPPnets中使用的只有一个pyramid level的SPP层。

1.1.2   initializingfrom pre-trained network

将pre-trained网络 转化到fastR-CNN需要3步(这里用的pre-trained网络是有5层max pooling层,5-13层conv层的ImageNet网络):将最后一层max pooling层用RoI pooling层替换(H=W=7 for VCG2016),使之与第一层fc适配;最后一层fc和softmax用两个同级层替换,就是之前提到的fc层 + softmax 到K+1个class以及class-specific bounding boxregressors;网络调整为输入两种数据– image + RoI in image。

1.1.3   fine-tuningfor detection

fast R-CNN可以通过back-propagation训练所有网络的weights(SPPnet不能更新SPP pooling层下面的weights的原因就是训练样本来自不同的图片导致的SPP层BP的低效性)。Fast R-CNN中的SGD 所用 的mini-batch是分层抽样产生:先取样N张图片,然后在每张图片上取样R/N个RoI。由于从同一图片上取样 的RoI在FP和BP时的计算可以共享,因此减小N就能减少mini batch的计算量(文中取N=2, R=218训练速度比从128张不同图片各取一个RoI要快64倍,而且从测试结果来看看,这个条件下同一图片的RoI之间的相关性对SGD收敛的速度几乎没有影响)。Fine-tuning与sofmax classifier和bounding-box regressor时同时进行的。在本实验中,对VCG网络进行fine-tuning是在conv3_1层及其以上的层(9/13)。

1.1.4   multi-taskloss

前面说过fastR-CNN的两个输出层第一个输出softmax概率分布p=(p0, …, pk),而第二个输出bounding-box回归值tk = (txk,tyk, twk, thk)(k指特定的class)。每个训练的RoI都标记了gound-truth class u和ground-truth bounding-box回归值v。这里使用multi-task lossL来同时训练classification和regression:

其中Lcls(p, u ) = - log pu

对于Lloc:(u=0指背景,背景的Lloc不做计算):

这是一个robustL1 loss比R-CNN和SPPnet使用的L2 loss对例外值更不敏感(用L2训练时要注意lr防止梯度爆炸)。而λ超参用于平衡两种loss,这里用的λ=1。

1.1.5   mini-batchsampling

取样的描述同2.1.3:N=2, R=128。其中25%的RoI是与ground-truth bounding box的IoU > 0.5的object proposal,标记为相应的class;剩下75%的RoI是IoU在0.1-0.5之间的object proposal,标记为背景;而那些IoU小于0.1的作为hard example mining (本来用于SVM training,但是这里没有训练SVM,所以可以用来作为负例的)。唯一使用的data  augmentation措施是在训练时有图片有50%的概率水平翻转。

1.1.6    通过RoI pooling层的BP(可跳过)

令xi∈R, 是RoI pooling层第i个activationinput,令yrj是第r个RoI的第j个输出,RoI层计算yrj= xi*(r, j) ,其中i*(r,j) = argmax i’R(r, j) xi’.R(r, j)是yrj max pool的子窗口中的输入的索引集。xi可能赋予不同的yrj。RoI层的backwordfunction为:


在BP时,后面的偏导部分由RoI上面一层的backwordfunction已经计算过了,减少计算量。

1.1.7   SGD超参

用于softmaxclassification和bounding-boxregression的fc分别用0为均值,标准差为0.01和0.001的高斯分布初始化,bias初始化为0。所有层用1作为weights的每层学习率;2作为bias的每层学习率;全局lr为0.001。实验中用VOC07/12数据集训练的时候在30k iteration后lr降为0.0001再train 10k iteration。在处理更大的数据集的时候用momentum为0.9以及parameter decay为0.0005。

1.1.8    scaleinvariance (可跳过)

实验测试了两种方式用于获取scaleinvariant object detection:bruteforce learning和imagepyramids。前者在训练和测试的时候图片需要先转化成预定的大小,网络直接从训练集中直接学习scale-invariantobject detection;multi-scale方法通过image pyramid提供近似scale-invariance给网络。测试的时候imagepyramid用于scale-normalize每个object proposal;而在训练的时候,随机用一个pyramidscale取样作为一种dataaugmentation。

1.2    fast R-CNN检测

fast R-CNN网络fine-tuning以后将image/image pyramid和R个(~2000)object proposal作为输入进行打分。使用imagepyramid时,每个RoI会被scale成224 x 224大小的区域。对于每个测试的RoI,正向计算会输出每个class的概率分布以及bounding-box的坐标信息,然后对每个class进行non-maximum suppression 。

由于正向计算有一半的时间用于计算fc层,而大的fc层可以用truncated SVD进行压缩加速计算。

将一层fc换成两层fc,第一层的weightmatrix时ΣtVT,第二层的时U。

1.3   实验结果

实验用3个pre-trained ImageNet:CaffeNet (samll),VCG_CNN_M_1024 (wide), VCG16 (deep)。


1.4   设计评估

1.4.1   训练数据量

VOC07, mAP=66.9%; VOC07(trainval)+VOC12(trainval)(16.5k), mAP=70.0%, 60k mini-batch iteration

VOC10, mAP=66.1%; VOC2012, mAP=65.7%, VOC07(trainval +test)+VOC2012(trainval) (21.5k), mAP=68.8% 和68.4%,100k SGD iteration, lr x 0.1 each 40k iteration。

1.4.2    softmaxvs SVM

1.4.3    proposal数量



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值