您的位置:首页 > 其它

目标检测系列(三):Fast R-CNN

2019-01-16 16:15 267 查看

目标检测系列(三):Fast R-CNN

References:

  1. https://www.geek-share.com/detail/2721114314.html
  2. https://www.geek-share.com/detail/2707669923.html

STAR

S: SPP-Net的训练过程依然是一个多阶段的训练(需要储存大量特征)+ 无法fine-tuning 卷积层(空间金字塔多尺度池化特点导致梯度回传没有很好的办法解决)
T: 如何解决多阶段训练问题? 是否可以进行梯度回传?
A: 多任务损失函数(traing is a single-stage, using multi-task loss) + 感兴趣区域池化(ROI:region of interest)
R: Higher detection quality (mAP) than R-CNN, SPPnet + No disk storage is required for feature caching.

1. Fast R-CNN 网络

2. SS算法:提取ROI区域

3. CNN网络: 提取特征

1. 感兴趣区域池化

其实RoI pooling是SPP的一种简化,原本SPP是一种多尺度的池化操作,最后将三个尺度的特征做串接作为全连接层的输入,而RoI pooling只选择了其中一种尺度,将ss算法的建议框做坐标变化后的尺寸的长和宽,平均分为w份和h份,在每一份中使用最大池化,最后产生wh个bin***,这样做有下面几个好处:
1.统一输出维度,这个是必须的。
2.相比于SPP-Net,RoI pooling的维度更少,假设RoI pooling选择了44的话,那么维度就可以从21个bin降低为16个,虽然这样看来降低的并不多,但是不要忘了特征还有厚度,如果厚度是256的话,那么降维就比较可观了。
3.RoI pooling不再是多尺度的池化,这样一来梯度回传*就会更方便,有利于Fast R-CNN实现end-to-end的训练。

2. 感兴趣区域池化的梯度回传

(1)一般情况下池化的梯度回传

(2)重叠情况下的梯度回传
重叠情况:

无重叠情况:

计算方法:
显然,重叠的区域经过相同的坐标变换之后在卷积特征图上同样是有重叠的,那么这部分重叠的像素梯度应该如何让计算呢?
是多个区域的偏导之和:

上图中有r0与r1两个区域,每个区域都通过RoI pooling之后生成4个bin,x23的意思是第23个像素,那么计算x23位置的梯度就可以根据上图中左侧的公式,其中r是包含有这一点的区域,j是某个区域内的所有位置。
但是x23的梯度计算显然不需要r0,r1内的所有位置的梯度信息,它只需要包含x23这一点的,或者说是x23这一点有贡献的点的梯度,所以这里需要一个阈值函数—i*(r,j),它的作用就是如果需要RoI pooling后的这一点的梯度,那么i*(r,j)=1,否则i*(r,j)=0。
这样一来,RoI pooling层的梯度回传只需要在Max pooling上简单修改即可。

4. SoftMax 分类

5. bounding box 回归

多任务损失函数:

6. fast R-cnn 训练与测试


前面两部分说明了RoI pooling层的梯度回传与多任务损失函数的构建,所以Fast R-CNN的梯度可以一直传到卷积层,实现end-to-end的训练

何为end-to-end?

End to End训练是指从输入端到输出端整个流程都是可以学习的,所有步骤都是同时优化训练的。R-CNN和Fast-RCNN的Proposal提取是用EdgeBox或者Selective Search。R-CNN分类是还是用SVM的。因此他们都不是End to End的。Faster-RCNN的Proposal提取用的RPN,后面分类用Softmax,目标位置用回归,全部都在一个框架里,可以同时优化训练整个框架,所以是End to End。

7. fast R-cnn 性能评价

8. fast R-cnn 的问题

  1. Fast R-CNN依然没有脱离ss算法,但是ss算法跑一张图的时间,大概是2s,所以讲道理的话,Fast R-CNN依然是达不到实时检测的要求的。上面那张图上写的,Fast R-CNN的单图测试时间为0.32s,但是其实这样说并不准确。

转载请注明出处,谢谢!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: