Faster R-CNN 详解

翻译自https://medium.com/@smallfishbigsea/faster-r-cnn-explained-864d4fb7e3f8

Faster R-CNN有两部分网络:region proposal network(RPN)用来生成“region proposal” 以及一个利用这些proposal来做检测的网络。Faster R-CNN与它的上一个版本检测网络Fast R-CNN最主要的不同点在于:Fast R-CNN用的是“选择性搜索”(selective search)来生成region proposal,而selective search要比RPN慢的多,因为RPN与检测网络共享了一部分计算。简要说来,RPN网络可以根据包含目标的可能性来提出region box(anchor)。Faster R-CNN的结构如图1:

图1 网络结构

Anchors

anchor在Faster R-CNN里面扮演重要角色,anchor其实就是一个方框。在Faster R-CNN的默认配置里面,每一个位置都有9个anchor。下面的图2是(600,800)尺寸的图片在(320,320)位置的9个anchor。

图2 anchor

这些anchor是这样产生的:

1. 三种颜色分别代表由128×128,256×256,512×512缩放来的anchor

2. 每种颜色是1:1,1:2,2:1三种比例框

如果我们按照步长(stride)为16选择位置来布置anchor,则整个600×800的图片会有1989(39 × 51)个位置(9个anchor的中心点),那么会产生17901(1989 × 9)个box。虽然box的绝对数量并不比金字塔结构的滑窗少,但这也正是RPN的效果与state-of-the-art同样好的原因。

上述尺寸的anchor在Pascal VOC和COCO数据集上面表现都不错。然而你也可以针对不同任务/数据,设计不同比例的anchor或者不同尺寸的box。例如:如果anchor用来检测行人,那么就不需要特别短、特别大以及方形的box。anchor设计接近数据集的需求,也会加快网络收敛速度以及精度。

Region Proposal Network

RPN网络的输出是一些box/proposal,最终的分类和回归网络会用这些box/proposal来预测目标的出现与否。具体说来,RPN是用来预测每个anchor是前景还是背景的概率(分类),并最终给出精确的坐标(回归)。

图3 回归和分类

背景和前景的分类

训练分类器的第一步是要构建训练数据:训练数据是经过上述步骤得来的一系列anchor以及ground-truth的box。现在问题是,如何用ground-truth来标记anchor。最简单的办法是用anchor和ground-truth的重叠大小来衡量:重叠多的是前景,重叠少的是背景。这是作者关于上述操作基于python和caffe的实现。现在有了anchor的label。

第二步考虑anchor的feature

上述39×51的feature map,每个点上有9个anchor,每个anchor都有两个可能的label(前景或背景)。如果我们把feature map的深度定义为18(9 anchor × 2 label),那么每个anchor都具有一个二值的vector(一般叫做logit)来表示前景和背景。如果我们把这些logit喂入softmax或logistic回归激活函数,就可以预测label。

现在便形成了训练数据anchor的feature和label。

另外,如果打算复用CNN网络训练过程中的中间feature,那么还要注意感受野的问题。需确认feature map上面每个位置的感受野覆盖了所有anchor表示的感受野。否则anchor的feature vector就没有充足的信息来预测目标。感兴趣的话,这里有关于感受野的解释。

在overfeat(第一篇用CNN的方法做目标检测的论文)的结构中,只采用不重叠的卷积核以及pooling来保证feature map的每个位置覆盖其相应的感受野。而在Faster R-CNN中不同anchor的对应感受野往往会与其他的产生重叠,从图2可以看出,这就造成了RPN对位置敏感。想了解overfeat的相关内容,可以参考博主的另一篇博客

Bounding Box回归

得到anchor的标签后,就可以用相似的评判标准(anchor与ground truth bounding box overlap的大小)做回归来对bounding box的坐标进行优化。一个重要的点是:label是背景的anchor,不应该喂入回归网络,因为数据中没有相应的ground truth box。

加入box(左上角坐标x、y,box的宽度w和高度h)后,feature map的深度为36(9 anchor × 4 position)。

Faster R-CNN原文中的回归用了smooth-L1损失

图4 回归的损失函数

整个RPN的损失函数是分类损失和回归损失的和。

ROI池化

经过RPN之后,我们得到一系列不同尺寸的region proposal,不同尺寸的region代表不同尺寸的CNN feature map。这样很难用一个可以输入不同尺寸feature的有效结构来进行下一步操作。所以我们用一个ROI池化的操作来把不同尺寸的feature map缩放到同一个尺寸。maxpooling 有固定的pooling size,而ROIpooling则有固定数目的池化(每块池化区域的大小可以不相等),在每个池化区域上面做maxpooling。这样,不管输入大小是多少,总能得到相同大小的输出。

可以参考这个博客,里面有对ROI比较详细的解释。

然后把ROI pooling的结果作为回归和分类的输入,如图1所示。

训练

文章中提到了两种方法:1.轮流训练RPN和回归/分类网络,2.同时训练。同时训练的在达到相同精度的前提下,速度能快1.5倍。

参考文献

 Faster R-CNN:《Towards Real-Time Object Detection with Region Proposal Networks 》https://arxiv.org/pdf/1506.01497.pdf

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值