深度学习之目标检测之Faster R-CNN-----2016.1
几种objectproposal的方法:基于groupingsuper-pixels,如SS,CPMC, MCG; 基于slidingwindows,比如objectnessin windows和EdgeBoxes。最近的MultiBox方法使用网络来生成regionproposal,但是所用的feature并不与检测网络的通用。
Faster R-CNN有两个模块:第一个是deepfully convolutional network用于生成regionproposal(RPN);第二个是FastR-CNN detector。
1.1 region proposal network (RPN)
RPN以图像为输入输出一系列的带有objectness score的矩形region proposals。由于目的在于与检测网络共享计算,所以先假定RPN和object detector的网络有共同的卷积层。本实验测试了两个网络:有5层卷积层的ZF (3 fc)和13层卷积层的VCG16 (3fc)。
首先用一个nx n空间窗口的小网络在最后一层共同卷积层输出的convfeature map上滑动获取输入,每个窗口都映射到一个低维的特征向量(256dfor ZF and 512d for VCG(256和512就是最后一层的channel数),紧接着ReLU),然后这个特征输入到1x1的两个conv同级层: box-regressionlayer以及一个box-classificationlayer(two-classsoftmax layer)。本文使用的n=3,此时对应的receptivefield已经很大了,分别是171 for ZF和228 for VGG。由于小网络滑动窗口的操作方式,这个全连接层(nx n卷积层/intermediatelayer?)在所有空间位置都是共享的。
有些RPN proposal是高度重合的,所以要用基于proposal region cls score 的non-maximum suppression (NMS)来去重。进行NMS的region的IoU阈值为0.7,处理之后剩下约2000个proposal regions(可以取top k个用来训练)。
1.1.1 锚点(anchors)
对每个滑动窗口的位置,同时预测多个regionproposal,将每个位置最大可能的proposal的数量记为k。这k个proposal可以用k个reference box进行参数化表示,这k个reference box就记为anchor。将anchor定在滑动窗口的中心,并关联上不同的大小和长宽比(这里默认用3种大小1282, 2562, 5122和3种长宽比1:1, 1:2, 2:1),就可以在每个窗口获得k=9个anchors(将这些anchor从conv5映射回原图就能获取一系列的region,就可以根据与ground-truthbox的IoU确定anchor的正负性)(所以W x H大小的conv feature map上面一共有WHk个anchor(1 padding?))。
这个方法寻找锚点的一大就是平移不变性(translation-invariant)(MultiBox并不是),包括锚点和计算锚点相对proposal的函数(object平移之后proposal也会平移,而预测proposal的函数保持不变)。还有一个好处就是能减小model size,过拟合的风险也会减小(以VCG16为例,输出层的参数为512 x (4+2)x9,比GoogleNet所用的MultiBox的1536 x (4+1) x 800少两个数量级)。
对于1000x 600的图片,feature map为59 x 39,大概能产生20000个(59 x 39 x 9)anchors。在训练的时候,所有与图像边界交叉的anchor是被忽视的(如果不忽视会导致训练无法收敛),这样每张图剩下的anchor大概有6000个。
multi-scaleanchors作为regression reference
之前两种流行的multi-scale的方法:基于image/featurepyramid;基于滑动窗口(多种大小和长宽比),这两种方法通常在一起用。而本实验用的anchor法只需要一种大小的图像,feature map和filter,效率很高。由于fast R-CNN detector是在固定大小的图上操作的,所以设计multi-scaleanchors就是实现feature共享的关键。
1.1.2 loss function
为了训练RPN,对anchor进行二元分类(是/不是object),其中与ground-truthbox有最高IoU的anchor或者与任意一个ground-truthbox的IoU大于0.7的anchor作为正例(一个ground-truthbox可以能标注出多个anchor)(通常第二个条件就能确定正例,但是在某种情况下第二种没找到就需要第一种条件);而将IoU低于0.3的非正例anchor作为负例;剩下的anchor不用于训练。
最小化loss function(fastR-CNN的multi-taskloss):
其中i是mini-batch种anchor的索引,pi是预测anchor为object的概率,pi*=1 (正例)/0 (负例),ti是预测的bounding-box的4个参数化坐标,ti*是正例anchor的ground-truth box的坐标。Lcls是两个类的log loss,Lreg=R(ti-ti*),R是smooth L1。
Lreg x pi*指只在正例anchor的时候计算loss。然后这两项loss用Ncls(mini-batch size, 256)和Nreg (anchor location的数量,2400) normalize,并用λ(10,是前后两项loss位于一个数量级)平衡。
这里用于regression的feature的大小是相同的—3 x 3 onfeature map。(为了处理不同的size,一系列bounding-box regressor被训练出来,每种分别对应一个大小和长宽比,并且weight并不通用。??)
1.1.3 trainRPN
RPN训练通过BP和SGD end-to-end训练得到。每个mini-batch从一张包含多个正例负例anchor的图片生成。由于负例占了大部分,随机取会有偏差,所以取样的时候随机取256个anchor保持正例负例的比例控制在1:1附近,如果正例没有128就用负例补齐。
对于新加的conv层的weight用0为均值标准差为0.01的高斯分布进行初始化,而其他的层用ImageNet进行初始化。对ZF所有层和VCG16的con3_1以上的层进行fine-tuning(用PSACAL VOC数据集),前60k个mini batch的lr为0.001,后20k个mini-batch的lr为0.0001。momentum为0.9,weight decay为0.0005。
在整个faster RCNN算法中,有三种尺度。
原图尺度:原始输入的大小。不受任何限制,不影响性能。
归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale= 600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。
1.2 sharing feature for RPN and fast R-CNN
由于RPN和Fast R-CNN是分别独立训练的,所以需要用一种技术使这两个网络之间的conv层共享来减少计算量。这里讨论3种方法:
交替训练(Alternatingtraining)(本文使用的):首先训练RPN,然后用找出的proposal训练Fast R-CNN,经过fast-R-CNN tuning的网络参数反过来用来初始化RPN。重复此步。
本文采用的有4步:首先训练RPN(3.1.3),网络首先是用ImageNet pre-trained模型针对region proposal任务进行end-to-end的fine-tuning;然后训练用第一步获取的proposal训练一个单独的fast R-CNN检测网络,而这个网络也是用ImageNetpre-trained模型进行初始化的(此时这两个网络并没有共享conv层);下一步用检测网络初始化RPN,这一步先固定共享的conv层只对RPN特有层进行fine-tuning;最后固定共有的conv层对fast R-CNN进行fine-tuning。
(下面方法可跳过)
近似联合训练(approximatejoint training):RPN和fast R-CNN在训练的时候合并成一个。在每个SGD iteration中,forward pass产生的region proposal被当作事先算好的proposal用来训练fast R-CNN。而在BP时,返回的RPN loss和fast R-CNN loss被合并(但是proposalbox的坐标的导数被忽略,所以是近似的)。这种方法与之前的效果相近,而能节省25%-50%的时间。
非近似联合训练(non-approximatejoint training):fastR-CNN的RoI pooling层可以接收convfeature和predictedbounding box作为输入,所以有效的BP能够包含box坐标的梯度,也就是在非近似联合训练中RoI pooling层对于box坐标是可导的。具体方法要用RoI warpinglayer,具体参见instance-awaresemantic segmentation via multi-tast network cascades.
1.3 实验结果
PASCAL VOC 2007: 5k trainval, 5k test, 20 categories.
MS COCO: 80k train, 40k val, 20k test; mini-batch1/GPU; 240k iteration with lr 0.003, 80k iteration with lr 0.0003; anchor 3aspect ratio and 4 sacles (adding 642); 与ground-truth box IoU 在0-0.5之间的proposal作为负例; top 300 proposal; singlescale 600;
总结
从R-CNN到fast-R-CNN是将特征提取和分类,位置精修合并到一个网络;再到faster R-CNN则是将候选区域生成也合并到一起,使计算没有重复,提高计算效率。
参考:
http://m.blog.csdn.net/article/details?id=51247371