RCNN算法理论

R-CNN通过深度学习引入目标检测,利用选择性搜索生成建议框,CNN模型提取特征,然后用SVM分类器进行目标识别。预训练的CNN模型在ImageNet上,再在PascalVOC上微调。SVM分类优于直接在CNN后加softmax层,因为SVM更适合小样本训练。R-CNN的缺点包括训练阶段多、耗时长和测试速度慢。
摘要由CSDN通过智能技术生成

一.简介

R-CNN(region with CNN features)的重要贡献在于将深度学习引入目标检测,并将 Pascal VOC 2007 数据集上的 mAP 由之前最好的 35.1% 提升到 66.0 %。在 R-CNN 之后,提出了 Fast R-CNN、Faster R-CNN 等改进模型,形成了 R-CNN 系列模型。

二.算法流程

如下图所示,R-CNN在一幅图像上进行目标检测时,它首先通过选择性搜索算法(selective search)提取一组目标作为建议框(也叫候选框、边界框),然后将这些建议框选定的图像区域重新调整成统一大小,再输入到一个在ImageNet上训练得到的CNN模型来提取特征。最后利用线性SVM分类器对每个建议框进行预测。
在这里插入图片描述

1.建议框(Region Proposal)的确定

R-CNN 首先使用选择性搜索算法,在图像中选取2000个建议框,它们的大小不一样。选择性搜索算法的流程如下:

(1).使用过分割手段,将图像分割成很多个小区域(1000~2000)

(2).计算所有邻近区域之间的相似性,包含纹理、颜色、尺度等

(3).将相似度比较高的区域合并

(4).计算合并区域和临近区域之间的相似度

(5).重复(3)、(4)直到整个图片变成一个区域,此时已经积累了很多个建议框了
在这里插入图片描述

(6).根据相似度从大到小,筛选出2000个建议框。

2.CNN模型提取特征–预训练和微调

CNN网络经过预训练与微调以后,就固定不变了,只是单纯作为一个提取特征的工具。

(1).CNN模型预训练

CNN模型需要提取建议框中的特征,但是物体标签训练数据少,所以采用有监督的预训练。R-CNN选择AlexNet作为特征提取模型,ImageNet数据集为训练数据进行预训练。AlexNet 的输入为 227 x 227 的图像,输出的最后一层是1000个分类的4096 维特征向量。

(2).CNN模型微调

AlexNet的输入是固定的,而候选框的大小却各不相同。预训练完成以后,还需要在 Pascal VOC 数据集上进行参数的调优。在调优阶段,AlexNet 的输入不再是完整的图像,而是被调整到 227x227的建议框,所以要把上一步得到的建议框都调整为227x227大小。此时将2000个建议框输入到AlenNet网络提取特征,得到输出为:2000x4096维矩阵。

3.SVM分类训练

在R-CNN中,CNN用于提取特征,在对目标进行分类时采用的是SVM分类器。因为SVM是二分类,所以对于每个类别,都要训练一个SVM分类器,共有N+1个分类器(N代表类数,1代表背景)。SVM分类器的输入是经过CNN提取的4096维的特征向量,输出的是属于该类别的得分。在SVM训练过程中,建议框和真值边界框的IOU>0.7的被视为正样本, IOU<0.3的被视为负样本,其余的建议框则全部丢弃。

由于负样本的数量非常多,会出现样本不平衡的情况,所以应采用难负样本挖掘的方法选取有代表性的负样本,即把每次检测结果为错误的情况作为难负样本送回去继续训练,直到模型的成绩不再提升。

对于 Pascal VOC 数据集,N = 20,将(2000,4096)维矩阵输入进SVM分类器中,最终得到(2000,21)维矩阵。

扩展:为什么要用SVM分类,而不在CNN模型后面添加softmax层进行分类?

如果要使用CNN模型对(2000,4096)矩阵进行分类,具体做法如下为:AlexNet模型的输出是 1000 个神经元的分类层替,只要将该层换成一个随机初始化的包含 N + 1 个神经元的分类层(N代表类数,1代表背景)即可。提取特征以后,然后计算每个建议框的和真值边界框GT 的IOU,对于IOU>0.5的建议框l被视为正样本,否则为负样本(即背景)。由于一张图片的建议框中,负样本远远大于正样本数,所以需要将正样本进行上采样来保证样本分布均衡。在每次迭代的过程中,选择层次采样,随机选取32个正样本和96个负样本组成一个mini-batch。

可以看到对于IOU阈值的选择,CNN和SVM中的并不相同,这是因为以IOU为0.5为界限区分数据会得到所有的数据,而以0.3,0.7为界限只会得到少量数据。对于CNN的训练,需要大量的数据,不然容易过拟合,所以设置的阈值较为宽松,比如一个bbox可能只包含物体的一部分,那也把它标注为正样本;然而svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当bounding box把整个物体都包含进去了(IOU>0.7),才把它标注为物体类别,IOU<0.3的标注为负样本,然后训练svm。就因为这个特点,只能用宽松IOU来softmax分类,那么很可能导致最后的bbox框位置不准确,类识别精度也会降低,因此选择了SVM完成分类,CNN只用来提取特征。最后实验证明,在将SVM作为分类器时,mAP为54.2%,而使用softmax函数作为分类器时,mAP为50.9%。

4.剔除部分边界框

对于一个目标来说,会存在很多的建议框bbox,其中大部分的bbox都是无用的,通过**非极大抑制(NMS)**方法可以去掉多余的bbox,最后每个类只保留一个得分最高的建议框。对于每一类,主要流程如下:

  • (1).首先把所有概率score得分小于某个阈值的bbox全部剔除

  • (2).之后,将所有的bbox按照得分排序,选中最高的分对应的bbox作为当前bbox

  • (3).遍历其余的bbox,如果和当前bbox的IOU大于某个阈值,便将这个bbox剔除

  • (4).从剩下的bbox中继续选择一个最高分的bbox,重复上述步骤

  • (5).当处理完某一类时,继续处理下一类即可

加入最后只剩下了m个边界框,那么(2000,4096)矩阵就变为了(m,4096)

5.边界框回归训练

(1).设计回归

下图所示,绿色的 G G G框是真实框,红色的 P P P框是原始建议框。边界框回归的目的就是就是寻找一种映射关系,使红框经过映射变成一个接近绿框的蓝框 G ^ \hat G G^

一个矩形框通常可以用x、y、w、h四个参数表示,分别为窗口中心坐标以及窗口的宽高,因此这个映射关系可以表示为:
f ( P x , P y , P w , P h ) = ( G ^ x , G ^ y , G ^ w , G ^ h ) ≈ ( G x , G y , G w , G h ) f(P_x,P_y,P_w,P_h)=(\widehat G_x,\widehat G_y,\widehat G_w,\widehat G_h)\thickapprox(G_x,G_y,G_w,G_h) f(Px,Py,Pw,Ph)=(G x,G y,G w,G h)(Gx,Gy,Gw,Gh)

其中:
G ^ x = Δ x + P x = P w d x ( P ) + P x G ^ y = Δ y + P y = P h d y ( P ) + P y G ^ w = S w P w = e d w ( P ) P w G ^ h = S h P h = e d h ( P ) P h \widehat G_x=\Delta x+P_x=P_wd_x(P)+P_x\\ \widehat G_y=\Delta y+P_y=P_hd_y(P)+P_y\\ \widehat G_w=S_wP_w=e^{d_w(P)}P_w\\ \widehat G_h=S_hP_h=e^{d_h(P)}P_h\\ G x=Δx+Px=Pwdx(P)+PxG y=Δy+Py=Phdy(P)+PyG w=SwPw=edw(P)PwG h=ShPh=edh(P)Ph

(2).训练

四个函数 d ∗ ( P ) d_*(P) d(P)通过建议框在CNN的最高层特征图上建模,因此可表示为 d ∗ ( P ) = w ∗ T Φ 5 ( P ) d_*(P)=w^T_*\Phi_5(P) d(P)=wTΦ5(P) Φ 5 ( P ) \Phi_5(P) Φ5(P)表示建议框P的最高层特征图, w ∗ w_* w是参数向量,通过岭回归固定:
w ∗ = a r g m i n ∑ i N ( t ∗ i − w ^ ∗ T Φ 5 ( P i ) ) 2 + λ ∣ ∣ w ^ ∗ ∣ ∣ 2 w_*=argmin\sum_{i}^{N}(t_*^i-\widehat w^T_*\Phi_5(P^i))^2+\lambda||\widehat w_*||^2 w=argminiN(tiw TΦ5(Pi))2+λ∣∣w 2
t ∗ t_* t的定义如下:
t x = ( G x − P x ) / P w t y = ( G y − P y ) / P h t w = l o g ( G w / P w ) t h = l o g ( G h / P h ) t_x=(G_x-P_x)/P_w\\ t_y=(G_y-P_y)/P_h\\ t_w=log(G_w/P_w)\\ t_h=log(G_h/P_h)\\ tx=(GxPx)/Pwty=(GyPy)/Phtw=log(Gw/Pw)th=log(Gh/Ph)
其损失函数为:
l o s s = ∑ i N ( t ∗ i − w ^ ∗ T Φ 5 ( P i ) ) 2 + λ ∣ ∣ w ^ ∗ ∣ ∣ 2 loss=\sum_{i}^{N}(t_*^i-\widehat w^T_*\Phi_5(P^i))^2+\lambda||\widehat w_*||^2 loss=iN(tiw TΦ5(Pi))2+λ∣∣w 2
然后根据梯度下降法或最小二乘法就可以求得W。当模型训练完成后,就能通过建议框在CNN的顶层特征 Φ 5 ( P ) \Phi_5(P) Φ5(P)中预测出 d ∗ ( P ) d_*(P) d(P),进而计算出 G ^ ∗ \widehat G_* G


此时将第4步中得到的矩阵(m,4096)输入训练好的回归矩阵(4096,4)中,得出(m,4)偏移矩阵。

三.R-CNN缺点

  • 训练阶段多:微调网络、训练SVM、边界框回归,并且训练相互独立,整体缺乏联动

  • 训练耗时:分阶段多次训练导致整体时间较长

  • 测试处理速度慢:由于不共享计算,每测试一张图片都要单独进行特征提取

  • 图像形状变化:建议框发生形变,会导致输入到CNN的信息丢失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值