计算机视觉(三)Faster-RCNN

SPP-NetFast R-CNN之后,两篇论文的作者又联手实现了一个对R-CNN更快加速的算法,即Faster R-CNN论文首先分析下之前的Fast R-CNN,它使用了Softmax代替了SVM的二分类,然后把多阶段变成了多任务的算法,但是由于产生region proposal算法是selective search,只能在CPU上运行,而且由于其不是CNN网络,所以Fast R-CNN并不是真正意义上的end-to-end网络。我们既然知道了这个缺点,那么在Faster R-CNN中作者就提出来能不能把region proposal用一个CNN网络产生,这样既可以在GPU下运行又可以完全实现end-to-end?事实证明可以的,作者提出了RPN网络,使得检测算法在VGG16的模型中实现了5ps,做到了实时检测,源码见GitHub

一、RPN(区域建议网络)

Faster R-CNN摒弃了selective search算法,使用RPN网络去生成候选框,首先让输入图像经过CNN网络,得到一个feature map,利用RPN网络去产生候选框,把候选框在feature map的区域经过RoI pooling产生一个尺度固定的特征向量,接着进入全连接层做分类以及边框回归。并且,使得RPN和Fast R-CNN共享了CNN特征。

Faster R-CNN

RPN的输入为一个feature map,输出有两个分支,一个是cls层,用来判断是否有目标,另一个是reg层,用来产生一系列的目标建议框。在RPN中,我们会使用nxn的滑动窗口来遍历整个feature map,每个滑动窗口会产生K个不同尺度,不同比例的建议区域,称为Anchors,文中K=9,n=3,所以每个anchor在clf层会产生2k的分数(目标与非目标),而在reg层产生4k个位置信息。

在实现faster R-CNN时,设置了每张图片的最大尺寸为1000x600,如果小于这个尺寸,用padding去填充,如果大于这个尺寸,等比例缩放至小于该尺寸,然后进行padding,这样就保证了输入图片比例的基本不变,也就保证了目标的比例不变。这样最后的feature map的W*H大约为2400,即产生WHk个anchors。

而faster R-CNN中,anchor有以下性质:

  • 位移不变性:作者使用滑动窗口生成anchor,而不是像MultiBox使用K-mean的聚类算法,这样的话如果目标在一幅图中进行平移或其他变换,仍然可以检测出,由于K-mean的聚类算法依赖于起始点,不具有位移不变形
  • 多尺度anchor:作者对比了图像金字塔,这种方法图像在多个尺度上进行resize进行检测,然后进入到CNN网络,但比较费时间,于是使用了多尺度的anchor在一个特征图上进行滑动窗口检测,更加高效

二、网络结构

共享卷积层为VGG-16或者是ZF网络 

三、损失函数

文中对每个anchor赋予二值(是目标或非目标)类标签。对两种anchors赋予正标签:1. 和真值框有最高交并比的anchor/anchors;2. 和任何一个真值框的IoU高于0.7。对和所有真值框IoU都低于0.3的anchor赋予负标签。其他的anchors不作为训练目标。损失函数如下:

该loss函数对RPN网络进行训练,类似Fast R-CNN算法。i表示mini-batch的序号,其中Pi是anchor被预测为目标的概率,而标签Pi*在正标签为1,负标签为0。在reg层使用的是L1损失,cls层为两类的log损失,由于Ncls为mini-batch的数量,本文为256,但是经过计算一个feature map要产生大约2400个anchor,所以我们设置λ为10以平衡两者的权重,从而达到了归一化。 

四、RPN和Fast R-CNN共享特征

这里作者给出了一些方法,如下:

1.交替训练:首先训练RPN,使用proposals训练Fast R-CNN。网络使用Fast R-CNN微调,然后用来初始化RPN,迭代这个过程,这也是作者实验时用的方法!

2.近似联合训练:在每次SGD迭代时,前馈计算生成区域推荐,看作训练Fast R-CNN检测器的预计算推荐。反馈传播中共享层传播RPN和Fast R-CNN结合的损失。这种方式忽略了关于推荐框坐标的导数。

3.非近似联合训练:Fast R-CNN中的 RoI pooling层接收卷积特征和预测的bounding boxes作为输入,这时反向传播会涉及到box corrdinates.这时需要RoI poling层关于box coordinates是可微的。

4.细节

第一步:我们使用上面的loss去训练RPN,并使用预训练的Imagenet模型初始化卷积网络,端到端的微调RPN。

第二步:我们使用第一步产生的建议区域,分离的训练一个Fast R-CNN网络,也是对卷积网络进行预训练的Imagenet模型初始化,这两步不共享卷积层

第三步:使用检测网络初始化去单独的进行RPN训练,固定卷积层,只对RPN进行微调

第四步:固定共享卷积层,微调Fast R-CNN的分支层,这样就可以形成了一个统一的网络了

五、算法总结

优点:

  • 优化了建议区域的产生方式,使其真正实现了end-to-end训练
  • 在GPU上达到了实时,5fps based VGG & 17fps based ZF
  • 精度提高,COCO检测42.1%,而Fast R-CNN为39.3%

缺点:

  • 速度有待于进一步提升

参考

【AI】目标检测第二话:Fast R-CNN和Faster R-CNN https://zhuanlan.zhihu.com/p/55495520

  晓雷机器学习笔记 https://zhuanlan.zhihu.com/p/24916624

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值