目标检测网络的介绍及应用(二) -- Faster-RCNN

二、Two-stages的开山之作—从R-CNN到Faster-RCNN

在2015年之前,传统的目标检测算法主要是通过特征提取或滤波变换来实现的,人们大多在低层特征表达基础上构建复杂的模型或更加复杂的多模型集成来缓慢地提高目标检测的精度,如DPM算法使用了许多传统的算法模型,以“从整体到部分,再从部分到整体”为指导思想。尽管DPM算法连续获得VOC07,08,09三年的检测冠军,但它在VOC数据集上的mAP却只有大约30%左右。直到2014年卷积神经网络空降目标检测领域,Ross
Girshick开创性地提出R-CNN模型来完成目标检测任务。以R-CNN为起点,后面两年相继提出了SPPNet,Fast-RCNN以及Faster-RCNN模型,Faster-RCNN模型使得Two-Stages模型日趋完善,极大地提高了目标检测的精度及准确度。下面我们就来一一介绍这些算法的思想及实现流程。

2.1 R-CNN算法原理

R-CNN论文原文在这里

通过之前的介绍,我们知道目标检测有两个任务,一个是检测出目标的类别,另一个是找出目标的最小标定框,所谓two-stage方法,就是将这两个任务分开来,先通过某种方法给出候选区域,再对候选区域进行判别依照某种准则输出最终的bbox。这种方法也称基于区域(Region-based)的方法,R-CNN系列算法就是这一类型的代表。R-CNN算法可以分成三个步骤(也可以认为是两个阶段):

  • 生成候选区域;

  • 对候选区域的使用CNN提取特征向量并训练分类器进行分类,对比阈值用于判别物体得到bbox;

  • 修正bbox,对bbox做回归微调。

上述步骤可以通过下图来表述:

在这里插入图片描述

2.1.1 候选框的提取

对于候选区域的提取阶段,最容易想到的方法就是滑窗法(sliding window)。所谓滑窗法就是设计不同尺寸的窗口,给定一定的滑动间隔沿图像方向移动产生候选框。滑窗法设计简单,但由于需要对图像进行全局搜索而效率低下,所以对于实时性要求比较高的检测分类器不推荐使用滑窗法。在RCNN中,作者对比了不同产生候选框的方法,最终采用了选择性搜索(selective search)方法来产生候选框,选择性搜索的详细介绍可以看这里 Search for Object Recognition.pdf)。由于同一物体往往具有相似性,选择性搜索算法通过对比颜色、纹理、尺寸和空间交叠这四个参数来计算区域集R中每个相邻区域的相似度,并选出相似度最高的两个区域,将其合并最终生成我们需要的候选框,如下图表示了设置不同尺度的标定框的搜索结果。
在这里插入图片描述

在RCNN算法中,首先使用Selective Search方法生成2000个左右的候选框,这些候选框的尺寸和位置有图像中的目标有一定的关联性。

对于经过选择性搜索得到的候选框,我们再将其输入到一个深度学习网络进行训练。注意卷积网络的输入应该是固定的,而候选框的尺寸却不是固定的,所以在输入网络之前应该对候选框进行缩放,论文中提出了两种缩放方式,各向异性缩放各向同性缩放。各向异性缩放即直接缩放到指定的大小,但会造成图像失真;各向同性缩放即直接裁剪到指定大小,并对边界区域填充固定的背景颜色。在实际应用过程中,作者发现各向异性缩放的效果要比各向同性缩放的效果更好。

2.1.2 CNN输出检测结果

在R-CNN中,作者采用了迁移学习的策略,即采用在ImageNet数据集上已经训练好的AlexNet/VGG网络作为R-CNN的基础网络结构,并对其做fine-tuning(微调)。如下图所示,将ImageNet中的1000个输出改成N+1个(其中N表示检测目标的类别数,1表示背景)。

将前面利用选择性搜索方法得到的2000个候选区域输入经过缩放后作为fine-tuning过的AlexNet网络中,提取出2000*4096个特征向量,然后把这些特征向量存到硬盘中(这里的存取操作,再加上后面SVM训练的读取操作非常浪费时间)。将这些特征向量用来训练N个二分类的SVM分类器,SVM的权重矩阵为4096*N。注意这里另外再训练SVM分类器而不是直接采用卷积网络的输出是有原因的,这是因为我们在训练CNN的样本不够准确,直接使用softmax输出的效果不是很好,而在特征向量的基础上,再训练一组SVM的效果能提高网络性能。而且我们在训练SVM的时候,正样本的选择也有所变化,只有当候选区域与ground-truth的IoU大于0.7时才被视为正样本,而在CNN中,当IoU大于0.5就会被视为正样本。经过SVM分类后,我们就得到了对于某一类的一堆的候选框,但是同一目标同一区域可能存在多个候选框,这时我们就需要对这些实际上表示同一目标的候选框进行分类,这个过程叫做非极大值抑制(NMS)。非极大值抑制,顾名思义就是抑制不是极大值的元素,只保留极大值的元素的过程。实现过程如下图所示。

在这里插入图片描述

具体的实现过程如下,首先我们给定一个NMS的阈值T,并建立一个集合S存储经SVM输出的某一类(如马)的所有正样本候选区域。在集合S中选出得分最高的候选区域A并将A从集合S中移出,依此计算集合S中剩下的候选区域与A的重叠度IoU,若IoU大于阈值T,则将该候选区域从集合S中移出。重复上述过程直至集合S为空。当然这种算法有一些固有的缺陷,有一些研究针对NMS提出了改进方案,有兴趣的同学可以看这里

经过NMS之后,已经能够输出一组置信度最高的候选框了,但是在R-CNN中提出了对输出bounding-box进行线性回归的方法来进一步提高算法的性能。对于我们的候选框P,我们希望能够训练一组线性变量 d x ( P ) , d y ( P ) , d w ( P ) , d h ( P ) d_{x}\left( P \right),d_{y}\left( P \right),d_{w}\left( P\right),d_{h}(P) dx(P),dy(P),dw(P),dh(P),候选框P能够通过这组线性变换进行平移和缩放操作变成最终的预测框 G ^ \hat{G} G^。预测框 G ^ \hat{G} G^与候选框P的关系如下:

G ^ x = P w d x ( P ) + P x ,   G ^ y = P h d y ( P ) + P y {\hat{G}}_{x} = P_{w}d_{x}\left( P \right) + P_{x},\ {\hat{G}}_{y} = P_{h}d_{y}\left( P \right) + P_{y} G^x=Pwdx(P)+Px, G^y=Phdy(P)+Py

G ^ w = P w e d w ( P ) , G ^ h = P h e d h ( P ) {\hat{G}}_{w} = P_{w}e^{d_{w}\left( P \right)},{\hat{G}}_{h} = P_{h}e^{d_{h}\left( P \right)} G^w=Pwedw(P),G^h=Phe

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值