R-CNN、Fast RCNN和Faster RCNN算法对比与总结

一.RCNN
全称Region CNN,利用深度学习进行目标检测的开山之作。
1.解决的问题:
1.1速度:
  传统目标检测算法使用滑动窗法依次判断所有可能的区域,RCNN则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断。
1.2训练集:
  传统的目标检测算法在区域中提取手工设定的特征。RCNN则需要训练深度网络进行特征提取。
2.算法步骤

  1. 一张图像生成1K~2K个候选区域(SS算法)
  2. 对每个候选区域,使用深度网络提取特征
  3. 特征送入每一类的SVM 分类器,判别是否属于该类
  4. 使用回归器精细修正候选框位置

RCNN 框架:
R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第1张图片

R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第2张图片
3.候选区域生成
  使用了SS方法从一张图像生成约2000-3000个候选区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。基本步骤如下:

  1. 使用一种过分割手段,将图像分割成小区域。
  2. 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置。
  3. 输出所有曾经存在过的区域,所谓候选区域。

4.特征提取
4.1.预处理
  使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。
  此处有一些细节可做变化:外扩的尺寸大小,形变时是否保持原比例,对框外区域直接截取还是补灰。会轻微影响性能。
4.2.对每个候选区域,使用深度网络提取特征。
  通过SS算法可以再一张图片中生成大概2000个候选区域,将候选区域送到CNN网络之前先进行resize处理,将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。
4.3. 特征送入每一类的SVM分类器,判定类别
  将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。
非极大抑制剔除重叠建议框流程:

  1. 寻找得分最高的目标
  2. 计算其他目标与该目标的IoU
  3. 删除所有IoU值大于给定阀值的目标
  4. 在剩下的边界框中重复前三步,直到将所有边界框遍历完

看不懂的可以参考这篇博文:非极大值抑制
4.4.使用过回归器惊喜修正候选框位置
  对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding boX

5.R-CNN存在的问题

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

二. Fast R-CNN
  继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,大幅提升了目标检测的速度。Fast RCNNRCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC数据集测试的准确率大约67%。
1.改进
  Fast RCNN对上面提到的RCNN的三个缺点进行了改进优化。
RCNN存在的问题:
4. 问题一:测试时速度慢
  RCNN一张图像内候选框之间大量重叠,提取特征操作冗余。
  Fast R-CNN将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。
5. 问题二:训练时速度慢
  原因同上。
  在训练时,本文先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。
6. 问题三:训练所需空间大
  RCNN中独立的分类器和回归器需要大量特征作为训练样本。
  本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

2.Fast R-CNN算法流程

  1. 一张图片生成1K~2K个候选区域(使用SS算法).
  2. 将图像输入到网络得到相应的特征图。将SS算法生成的候选区域投影到特征图上获得相应的特征矩阵。
  3. 将每个特征矩阵通过ROI pooling层错放到7 X 7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

Fast R-CNN框架:
R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第3张图片
R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第4张图片
3.R-CNN和Fast R-CNN生成候选框的区别
RCNN:
  R-CNN生成候选框是首先对每一个生成的候选区域进行缩放,然后再输入到网络中获取特征,通过SS算法获得了2000个候选框,那么就要进行2000正向传播,这就造成了冗余,因为候选区域存在大量重叠的部分。
Fast R-CNN:
  Fast R-CNN生成候选框是直接将整张图像输入到CNN中得到特征图,然后根据候选区域和特征图对应的映射关系,直接在特征图中获取特征矩阵。ROI Pooling层将后将候选框统一缩放到统一尺寸。
ROI Pooling:
  假设下图中的左边图为一个候选区域对应的一个特征矩阵,将特征矩阵划分为7X749等份,然后对分一个区域进行最大池化下采样操作,得到如图右所示的7X7特征矩阵。
R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第5张图片

4.两个全连接层
  在Fast R-CNN的最后并联了两个全连接层,第一个全连接层用于目标概率的预测,第二个全连接层用于边界框回归参数的预测。
4.1.目标概率预测分类器
  目标概率预测分类器输出N+1个类别概率,其中N为检测目标的种类,1为背景,以PASCAL VOC为例,它有20个类别,则会输出21个概率类别,第一个概率为候选框为背景的概率,全连接中有21个节点。如下图所示,坐左边第一个数表示背景概率,其余20个表示月初目标的概率。
在这里插入图片描述4.2.边界框回归器
  边界框回归器会输出N+1个类别候选边界框回归参数( d x d_{x} dx, d y d_{y} dy, d w d_{w} dw, d h d_{h} dh),因为每个类别对应四个候选边界框回归参数,所以全连接层有(N+1)x4个节点。
XA
5…怎么根据预测的回归参数得到预测边界框?
  根据如下公式根据回归参数计算得到边界框的横纵坐标和宽度和高度。
G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y G ^ w = P w exp ⁡ ( d w ( P ) ) G ^ h = P h exp ⁡ ( d h ( P ) ) \begin{aligned} \hat{G}_{x} &=P_{w} d_{x}(P)+P_{x} \\ \hat{G}_{y} &=P_{h} d_{y}(P)+P_{y} \\ \hat{G}_{w} &=P_{w} \exp \left(d_{w}(P)\right) \\ \hat{G}_{h} &=P_{h} \exp \left(d_{h}(P)\right) \end{aligned} G^xG^yG^wG^h=Pwdx(P)+Px=Phdy(P)+Py=Pwexp(dw(P))=Phexp(dh(P))

  • P x P_{x} Px, P y P_{y} Py, P w P_{w} Pw, P h P_{h} Ph分别为候选框的中心x,y坐标,以及宽高。
  • G ^ x \hat{G}_{x} G^x, G ^ y \hat{G}_{y} G^y, G ^ w \hat{G}_{w} G^w, G ^ h \hat{G}_{h} G^h分别为最终预测的边界框中心的x,y坐标。

6.Fast R-CNN损失函数
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L\left(p, u, t^{u}, v\right)=L_{c l s}(p, u)+\lambda[u \geq 1] L_{l o c}\left(t^{u}, v\right) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)
  其中,左边表示分类损失,右边一项表示边界框回归损失。

  • p p p是分类器的预测的softmax概率分布 p = ( p 0 , . . . , p k ) p =(p_{0},...,p_{k}) p=(p0,...,pk)
  • u u u对应真实类别标签
  • t u t^{u} tu对应边界框回归器预测的对应类别 u u u的的回归参数 ( t x u , t y u , t w u , t h u ) (t_{x}^{u},t_{y}^{u},t_{w}^{u},t_{h}^{u}) (txu,tyu,twu,thu)
  • v v v对应真是的边界框回归参数 ( v x , v y , v w , v h ) (v_{x},v_{y},v_{w},v_{h}) (vx,vy,vw,vh)

分类损失安徽省南海为交叉熵损失函数:
L c l s ( p , u ) = − l o g ( p u ) L_{c l s}(p, u)=-log(p_{u}) Lcls(p,u)=log(pu)
边界框损失如下:
L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } smooth ⁡ L 1 ( t i u − v i ) L_{l o c}\left(t^{u}, v\right)=\sum_{i \in\{x, y, w, h\}} \operatorname{smooth}_{L_{1}}\left(t_{i}^{u}-v_{i}\right) Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)
smooth ⁡ L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣ < 1 ∣ x ∣ − 0.5  otherwise  \operatorname{smooth}_{L_{1}}(x)= \begin{cases}0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise }\end{cases} smoothL1(x)={0.5x2x0.5 if x<1 otherwise 

三.Faster RCNN
  Faster RCNN是继RCNNFast RCNN之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。
三种检测模型框图对比,从RCNNFast RCNN,再到本文的Faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,边界框回归)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第6张图片
  Faster RCNN可以简单地看做“区域生成网络+Fast RCNN“的系统,用区域生成网络代替Fast RCNN中的Selective Search方法。本篇论文着重解决了这个系统中的三个问题:

  • 如何设计区域生成网络。
  • 如何训练区域生成网络。
  • 如何让区域生成网络和Fast RCNN网络共享特征提取网络。

1.算法步骤

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

  实际上就是将Fast RCNNSS算法换成了RPN 算法,会了RPN算法也就会了Faster RCNN算法。所以Faster RCNN的核心就是RPN

R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第7张图片

2.RPN算法
R-CNN、Fast RCNN和Faster RCNN算法对比与总结_第8张图片
  在特征图上使用滑动窗口在特征图上进行滑动,每滑动到一个位置就生成一个向量,在向量的基础上通过两个全连接层输出2k个目标概率值和4k个边界框回归参数。
2k个目标概率值和4k个边界框回归参数
2k个目标概率值
  在2k个scores中两两一组,其中第一个值为背景的概率,第二个值为不是背景的概率,只判断目前anchor中是背景还是前景。
4k个边界框回归参数
  将4k个coordinates各参数为一组,其中前两个为anchor的中心坐标偏移量,后两个为anchor的相对宽度和高度
Faster R-CNN中共使用三种尺度和三种比例的anchor,每个位置在原图上都对应3x3=9个anchor。三种比例分别为1:1,1:2,2:1。对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
3.损失函数
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N reg ∑ i p i ∗ L reg  ( t i , t i ∗ ) L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right)=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right)+\lambda \frac{1}{N_{\text {reg}}} \sum_{i} p_{i}^{*} L_{\text {reg }}\left(t_{i}, t_{i}^{*}\right) L({pi},{ti})=Ncls1iLcls(pi,pi)+λNreg1ipiLreg (ti,ti)
其中:

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

分类损失如下:
L c l s = − l o g ( p I ) L_{cls}=-log(p_{I}) Lcls=log(pI)
边界框回归损失:
  同Fast RCNN的边界框回归损失
L r e g ( t i , t i ∗ ) = ∑ i smooth ⁡ L 1 ( t i − t i ∗ ) t i = [ t x , t y , t w , t h ] t i ∗ = [ t x ∗ , t y ∗ , t w ∗ , t h ∗ ] \begin{aligned} &L_{r e g}\left(t_{i}, t_{i}^{*}\right)=\sum_{i} \operatorname{smooth}_{L_{1}}\left(t_{i}-t_{i}^{*}\right) \\ &t_{i}=\left[t_{x}, t_{y}, t_{w}, t_{h}\right] \quad t_{i}^{*}=\left[t_{x}^{*}, t_{y}^{*}, t_{w}^{*}, t_{h}^{*}\right] \end{aligned} Lreg(ti,ti)=ismoothL1(titi)ti=[tx,ty,tw,th]ti=[tx,ty,tw,th]
smooth ⁡ Σ 1 ( x ) = { 0.5 x 2  if  ∣ x < 1 ∣ x − 0.5  otherwise  \operatorname{smooth}_{\Sigma_{1}}(x)= \begin{cases}0.5 x^{2} & \text { if } \mid x<1 \\ \mid x-0.5 & \text { otherwise }\end{cases} smoothΣ1(x)={0.5x2x0.5 if x<1 otherwise 
其中:
t x = ( x − x a ) / w a , t y = ( y − y a ) / h a , t w = log ⁡ ( w / w a ) , t h = log ⁡ ( h / h a ) , t x ∗ = ( x ∗ − x a ) / w a , t y ∗ = ( y ∗ − y a ) / h a , t w ∗ = log ⁡ ( w ∗ / w a ) , t a ∗ = log ⁡ ( h ∗ / h a ) \begin{aligned} &t_{x}=\left(x-x_{a}\right) / w_{a}, t_{y}=\left(y-y_{a}\right) / h_{a}, \\ &t_{w}=\log \left(w / w_{a}\right), t_{h}=\log \left(h/h_{a}\right), \\ &{t_{x}^{*}}=\left(x^{*}-x_{a}\right) / w_{a}, t_{y}^{*}=\left(y^{*}-y_{a}\right) / h_{a}, \\ &{t_{w}^{*}}=\log \left(w^{*} / w_{a}\right), {t_{a}^{*}}=\operatorname{log}\left(h^{*} / h_{a}\right) \end{aligned} tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha),tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),ta=log(h/ha)
其中,

  • p i ∗ p_{i}^{*} pi为正样本是为1,为负样本时为0。
  • t i t_{i} ti表示预测第 i i ianchor的边界框回归参数。
  • t i ∗ t_{i}^{*} ti表示第 i i ianchor对应的GT BOX的回归参数。

4.训练

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

四.三种算法步骤对比

RCNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置

Fast R-CNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.对整张图片输进CNN,得到feature map
3.找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层
4.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
5.对于属于某一类别的候选框,用回归器进一步调整其位置

Faster R-CNN

1.对整张图片输进CNN,得到feature map
2.卷积特征输入到RPN,得到候选框的特征信息
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置

  • R-CNN:(Selective Search + CNN + SVM)
  • Fast R-CNN:(Selective Search + CNN + ROI)
  • Faster R-CNN:(RPN + CNN + ROI

你可能感兴趣的:(目标检测,目标检测,cnn)