论文地址:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Github:https://github.com/rbgirshick/py-faster-rcnn
解决问题
主要解决Fast R-CNN中region proposal计算花费大量时间。Faster R-CNN提出RPN,它与检测网络共享整张图片的卷积特征,这种方法既检测提高效率又提高检测准确率。
算法概述
Faster R-CNN主要由两部分组成:1、一种全卷积网络,用于生成region proposal;2、Fast R-CNN目标检测网络。
该模型每张图测试时间为200ms左右,在数据集VOC12上mAP最高达到78.8%。
算法详解
RPN(Region Proposal Networks)
输入:图片
输出:一系列region proposals,每一个proposal对应一个目标得分。
工作原理:为了产生region proposal,我们在最后一个共享卷积层输出的卷积特征图上滑动一个小网络,这个小网络输入为在feature map上的一n*n的空间窗,每个滑动窗(sliding window)映射到低维特征(ZF:256维;VGG:512维),这些特征送到两个并列的全连接层:回归与分类。本论文中n=3。
Anchor
滑动窗在每个位置产生k个可能的region proposals,因此回归层有4k个输出,分类层有2k个得分,表示目标与非目标的可能性。这k个proposal参数化为相关联的k个anchor,每个anchor以滑动窗为中心,论文默认适用3种尺寸()和3种纵横比(),因此k=9。对于一个W*H的特征图,将共产生W*H*k个anchor。
这些anchor具有平移不变性:即当图片中目标发生平移时,proposal同时发生平移,同一个function在任何位置都能预测proposal。
训练过程中,对于一张的图片,可产生20000()个anchors,除去跨过边界的anchor,每张图片剩余6000个anchors用于训练,如果不去除,训练不能收敛。
测试过程中,对于跨界框,我们对其剪切到边界。
损失函数
为了训练RPN,对每一个Anchor我们进行正负样本标记:
正样本满足条件:(i)anchor与ground truth box具有最高的IoU(交并比)或者(ii)anchor与任一ground truth box的IoU大于0.7。
负样本满足条件:anchor与所以ground truth boxses的IoU小于0.3。
其余Anchors不用于训练。在训练RPN时,在每个mini-batch(论文中256)中,正负样本比例为1:1,如果正样本少于128,则用负样本填补。
表示一个mini-batch中anchor的索引;表示预测的anchor 成为目标的可能性;如果anchor为正样本,则ground-truth标签为1,如果anchor为负样本,则ground-truth标签为0;表示一个矢量,包含预测框的4个参数化坐标;表示与正样本anchor相关的ground-truth box的4个参数化坐标。
采用基于两个类别的log loss(有目标,没目标)。
,其中R表示smooth L1函数。
意味着只对possitive anchor计算回归损失。
与分别通过与进行归一化,通过调整两部分权重。表示mini-barch大小,本论文为256;表示anchor位置的数量,本论文~2400(40*60);=10,这样两部分权重基本相等。
4个坐标信息如下:
分别表示box的中心坐标以及宽度和高度;变量分别对应预测框(即proposal),anchor box和ground-truth box
anchor与proposal
调整图片大小,最短边为600,anchor在不同尺寸及纵横比时所产生的proposal大小如下表所示:
NMS
RPN产生的一些proposal之间有重叠,对此我们采用NMS,固定IoU为0.7,这样每张图剩余2000个proposals,最后只取top-N个proposal,本论文取N=300.
NMS过程:假设生成A,B,C,D四个proposal。1、根据目标概率对proposal进行排序,假设顺序为:A,B,C,D。2、从最大概率A开始,判断B,C,D与A的IoU是否大于设定的阈值,若大于则舍弃;否则保留。3、若B,C,D与A的IoU都小于阈值,则保留A,开始判断C,D与B的IoU是否大于设定的阈值。依次进行下去。
网络训练过程
Faster R-CNN网络训练过程包括四步:
1、训练RPN,产生proposal,由ImageNet预训练模型初始化。
2、训练Fast R-CNN网络,RPN生成的propasal作为此网络的输入,同样由ImageNet预训练模型初始化。此时两个网络还未共享卷积层。
3、训练RPN网络,用训练的Fast R-CNN网络初始化RPN网络,固定共享卷积层,只微调RPN独有的层。
4、训练Fast R-CNN网络,只微调Fast R-CNN独有的层。
实验结果
1、针对是否共享卷积层,测试阶段proposal数量,产生proposal的方法,是否有cls或者reg,以及特称提取方法ZF与VGG进行对比。
2、针对产生proposal不同方法,卷积层是否共享以及数据集的不同进行测试
3、在数据集VOC07以及VOC12上mAP得分以及每一类的AP
4、网络各模块所消耗时间比较
系统采用VGG-16,产生proposal以及检测时间为198ms。
5、针对anchor进行不同设置,比较mAP值
6、测试超参数对mAP影响。为Loss函数中为使reg loss与cls loss等权重所设置的超参数。
7、针对不同产生proposal的方法,测试阶段proposal个数N由2000到300,recall的变化如下图所示。
8、COCO数据集上目标检测结果,为检测小目标,anchor增加一尺寸,因此共有12种anchor。
9、COCO数据集用于训练,在VOC数据集上测试结果。
之所以mAP得到提升,是因为COCO集合种类多,VOC集合小于COCO集合。
VOC07 | COCO(2014年) | ImageNet | ISLVRC(ImageNet子集) | |
类别 | 20 | 80 | 2.2W | 1000 |
训练集 | 2501 | 82783 | 共1500W张图片 | 1281167 |
验证集 | 2510 | 40504 | 5w | |
测试集 | 4952 | 40775 | 10w |
结论
Faster R-CNN在时间以及准确率上都得到提升,每张图片检测时间为200ms左右,基于VGG网络fps为5,在VOC07数据集上mAP最高为78.8%。
主要原因为引入RPN网络,此网络与Fast R-CNN网络共享卷积层,生成proposal几乎不耗时间,基于VGG网络每张图片生成proposal时间为10ms左右,并且proposal质量提高,从而提高目标检测精度。