R-CNN、Fast R-CNN、Faster R-CNN理论合集

R-CNN

首先R-CNN算法诞生于Rich feature hierarchies for accurate object detection and semantic segmentation一文中。R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。Ross也是目标检测领域的执牛耳者。

算法流程

RCNN算法流程可分为4个步骤:

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置
    请添加图片描述

候选区域的生成

利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

对每个候选区域,使用深度网络提取特征

将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。请添加图片描述

特征送入每一类的SVM分类器,判定类别

将2000×4096的特征矩阵与20个SVM组成的权值矩阵4096×20相乘,获得2000×20的概率矩阵,每一行代表一个建议框归于每个目标类别的概率。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。
请添加图片描述

非极大值抑制剔除重叠建议框

首先引入IoU(Intersection over Union)的概念:两个集合的交集除以并集
在这里插入图片描述
具体流程:
请添加图片描述

使用回归器精细修正候选框位置

对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。
请添加图片描述

R-CNN框架

请添加图片描述

R-CNN存在的问题

  • 1、测试速度慢:测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
  • 2、训练速度慢:过程及其繁琐
  • 3、训练所需空间大:对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5k图像上提取的特征需要数百GB的存储空间。

Fast R-CNN

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用vGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal voc数据集上)。

算法流程

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到公特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果请添加图片描述

与R-CNN的对比

Fast R-CNN一次性计算整张图像特征:

  • R-CNN依次将候选框区域输入卷积神经网络得到特征。
  • Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。

训练数据的采样

训练过程中并不是使用SS算法提供的所有候选区域,通过ss算法得到大约2000个候选框,训练过程中只需要使用其中的一小部分就可以了。采样的数据还分正样本和负样本:

  • 正样本:候选框中确实存在去检测目标的样本,IoU大于0.5
  • 负样本:背景,即没有需要检测的目标,IoU 在区间 [0.1,0.5) 中

ROI Pooling Layer

不限制输入图像的尺寸,均把图像下采样成7×7 的矩阵(对于每一个channel来说)

分类器(第一个FC层)

输出N+1个类别的概率(N为检测目标的种类,1为背景)共N+1个节点。经过softmax满足概率分布,所有类别概率之和为1

边界框回归器(第二个FC层)

输出对应N+1个类别的候选边界框回归参数(d x _x x,d y _y y,d w _w w,d h _h h),共(N+1)×4个节点
请添加图片描述
P x _x x,P y _y y,P w _w w,P h _h h分别为候选框的中心x,y坐标,以及宽高
G x _x x,G y _y y,G w _w w,G h _h h分别为最终预测的边界框中心x,y坐标,以及宽高

Multi-task loss

请添加图片描述

  • p是分类器预测的softmax概率分布p =(P 0 _0 0…P k _k k)
  • u对应目标真实类别标签
  • t u t^u tu对应边界框回归器预测的对应类别u的回归参数(t x u _x^u xu,t y u _y^u yu,t w u _w^u wu,t h u _h^u hu)
  • v对应真实目标的边界框回归参数(v x _x x,v y _y y, v w _w w,v h _h h)

分类损失

L c l s ( p , u ) = − l o g p u L_{cls}(p,u)=-logp_u Lcls(p,u)=logpu

公式可从以下交叉熵损失函数推出:
针对多分类问题时(softmax输出,所有输出概率和为1): H = − ∑ i o i ∗ l o g ( o i ) H=-\sum_io_i^*log(o_i) H=ioilog(oi)
其中 o i ∗ o_i^* oi为真实标签值, o i o_i oi为预测值

边界框回归损失
请添加图片描述

  • λ是一个平衡系数,用来平衡分类损失和边界框回归损失
  • [u≥1]是艾弗森括号,满足条件则为1,否则为0

Fast R-CNN框架

请添加图片描述
由R-CNN的4个部分变成了Fast R-CNN的2个部分,Faster R-CNN则是想办法把Region proposal也融入到CNN网络中,形成一个端对端的训练过程

Faster R-CNN

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用vGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及cOCO竞赛中获得多个项目的第一名。

算法流程

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
    请添加图片描述

Conv layers

  • conv层都是:kernel_size=3,pad=1,stride=1
  • pooling层都是:kernel_size=2,pad=0,stride=2

在Faster RCNN Conv layers中对所有的卷积都做了扩边处理( pad=1,即填充一圈0),导致原图变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。正是这种设置,导致Conv layers中的conv层不改变输入和输出矩阵大小。

类似的是,Conv layers中的pooling层kernel_size=2,stride=2。这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。

RPN网络结构

请添加图片描述
在特征图上使用滑动窗口,每滑动到一个位置上就生成一个一维的向量,在向量的基础上再通过2个全连接层分别去输出目标概率和边界框回归参数。

  • 2k是针对k个anchor boxes生成的2个概率,一个是它为背景的概率,一个是为前景的概率
  • 4k是针对k个anchor boxes生成的4个边界框回归参数
  • 将ZF网络作为backbone生成的channel即深度是256,如果使用VGG16则是512

对于特征图上的每个3x3的滑动窗口,计算出滑动窗口中心点对应原始图像上的中心点,并计算出k个anchor boxes(注意和proposal的差异)。

其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。

anchor

  • 三种尺度(面积){ 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122}
  • 三种比例{1:1,1:2,1:3}
  • 每个位置(每个滑动窗口)在原图上都对应有3×3=9个anchor

面积大小的得来论文中解释为经验所得。对于ZF的感受野是171,对于VGG的感受野228,但是为什么能预测面积更大的目标呢?作者解释为这是可能的(看到物体的一部分也能大概猜出目标完整的区域)。

对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

训练样本的采样

在图像中随机采样 256 个anchor来计算mini-batch的损失函数,其中采样的正负样本的比例为1:1。如果图像中的正样本少于128个,用负样本来填充。

  • 正样本:在一个 ground-truth box具有最高IoU的anchor或者在任意 ground-truth box中IoU>0.7的anchor
  • 负样本:在任何ground-truth box中IoU都小于0.3

单个 ground-truth box可能会为多个anchor分配正标签。通常第二个条件足以确定正样本;但作者仍然采用第一个条件,因为在一些罕见的情况下,第二个条件可能找不到正样本。既不是正面也不是负面的锚点对训练目标没有贡献。

RPN Multi-task loss

请添加图片描述

  • p i p_i pi表示第i个anchor预测为真实标签的概率
  • p i ∗ p_i^* pi当为正样本时为1,当为负样本时为0
  • t i t_i ti表示预测第i个anchor的边界框回归参数
  • t i ∗ t_i^* ti表示第i个anchor对应的GTBox
  • N c l s N_{cls} Ncls表示一个mini-batch中的所有样本数量256
  • N r e g N_{reg} Nreg表示anchor位置的个数(不是anchor个数)约2400

λ依旧是一个平衡系数,文中取10。同时文中给出了损失函数的化简方法,可以把 1 N c l s \frac{1}{N_{cls}} Ncls1 λ 1 N r e g λ\frac{1}{N_{reg}} λNreg1看成近似相等。

t i = [ t x , t y , t w , t h ] t_i=[t_x,t_y,t_w,t_h] ti=[tx,ty,tw,th], t i ∗ = [ t x ∗ , t y ∗ , t w ∗ , t h ∗ ] t_i^*=[t_x^*,t_y^*,t_w^*,t_h^*] ti=[tx,ty,tw,th]

相应值可由以下公式求出,与Fast R-CNN一致:
在这里插入图片描述

Faster R-CNN训练

直接采用RPN Loss+ Fast R-CNN Loss的联合训练方法(Pytorch官方源码的方法)

原论文中采用分别训练RPN以及Fast R-CNN的方法

  1. 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数
  2. 固定RPN网络独有的卷积层以及全连接层参数,再利用lmageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数
  3. 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数
  4. 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络

Faster R-CNN框架

请添加图片描述
R-CNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡心curry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值