01
目标检测Fast R-CNN
![6c49f067562c0958e7c5a932265ed1bc.png](https://i-blog.csdnimg.cn/blog_migrate/f4ad3169499fcd885f82d1166d3ca548.png)
本篇介绍第三个目标检测算法Fast R-CNN,Fast R-CNN是在R-CNN和SPP-Net算法的基础进行改进的,关于R-CNN可以参考R-CNN系列深度学习框架之pytorch(63)目标检测R-CNN1,
SPP-Net可以参考SPP-Net系列深度学习框架之pytorch(70)目标检测SPP-Net1。
Fast R-CNN算法的详细内容是在论文《Fast R-CNN》中,这是看到的最短的论文题目了吧,论文的内容也如题目一样短。本篇对Fast-RCNN的算法流程和用到的核心方法进行整体介绍。
02
R-CNN和SPP-Net算法回顾
![6c49f067562c0958e7c5a932265ed1bc.png](https://i-blog.csdnimg.cn/blog_migrate/f4ad3169499fcd885f82d1166d3ca548.png)
如前所述,R-CNN开辟了深度学习目标检测的时代,随着后续深度学习技术的发展和创新,R-CNN的缺点明显的暴露出来。
R-CNN的缺点:
(1) 训练是一个多阶段的过程。
先通过卷积网络提取特征,然后使用SVM分类器进行分类,最后使用回归算法进行校正。
(2) 训练在空间和时间上都有很大的代价。
对于SVM和回归器训练,从每个图像中的每个region proposals中提取特征并写入磁盘。
对于非常深的网络,例如VGG16,这个过程需要2.5个GPU天来处理VOC2007训练集的5k图像。
这些功能需要数百千兆字节的存储空间。
(3) 物体检测很慢。
在测试时,从每个测试图像中的每个对象建议中提取特征。
在GPU上
VGG16检测每张
图像需要
47s。
SPP-Net是在R-CNN基础上设计改进的算法,它极大地提高了目标检测的速度,但是从整体的上对内存空间的要求、训练等问题仍未被解决。
SPP-Net
的缺点:
(1) 训练仍然是一个多阶段的过程。
(2) 特征仍然需要写入磁盘,消耗空间。
(3) 不能更新空间金字塔网络之前的卷积层参数。
03
Fast R-CNN的核心方案
![6c49f067562c0958e7c5a932265ed1bc.png](https://i-blog.csdnimg.cn/blog_migrate/f4ad3169499fcd885f82d1166d3ca548.png)
Fast R-CNN的作者在R-CNN的基础上以及受到SPP-Net的启发(虽然他不说),重点解决R-CNN和SPP-Net的三个问题中的两个重大问题:多阶段训练和不更新网络的参数(还有一个问题就是使用selective search方法提取region proposals十分耗时,这个是Faster R-CNN重点解决的问题)。解决方法是:单阶段训练和更新卷积层的参数,单阶段训练的好处是不需要另外存储中的特征,更新网络参数可以使网络具有更高的泛化能力。
相比R-CNN和
SPP-Net
,
Fast R-CNN
有如下优点:
(1) 检测质量mAP高于R-CNN和SPP-Net。
(2) 训练是单阶段的,即使用了multi-task-loss。
(3) 训练可以更新网络中的所有参数。
(4) 特征不需要空间缓存。
那么Fast R-CNN是如何实现这两种解决方案的呢?首先来看一看Fast R-CNN的算法架构。Fast R-CNN网络将整个图像和一系列region proposals作为输入。该网络首先用几个卷积(conv)和最大池层处理整个图像,以产生conv特征图。然后,对于每个目标的proposal,RoI池化层从特征图中提取出固定长度的特征向量。每个特征向量被输送到一系列全连接层中,这些层最终分支成两个兄弟输出层:一个层对K个目标类加上一个背景类产生softmax最大概率估计,另一个层为K个目标类输出四个实数值表示边界框位置。
![37a8cedc1ff83c86533bc6ee7ab5e969.png](https://i-blog.csdnimg.cn/blog_migrate/574a786a8d29d6481b358584d8e4577a.png)
所以
Fast R-CNN的框架,整体理解
Fast R-CNN算法需要弄清楚三个最重要的问题:(1) ROI pooling 的原理是什么,作用是什么,怎么实现?(2) 两个输出的设计原因是什么,原理是什么,效果怎么样?(3) 输入层的整张图像和region proposals是怎么进行输入操作的?