引入:本次学习内容基本来自于Ross Girshick编写的的《Fast R-CNN》,以及部分讲解视频,本学习记录仅为个人学习收获,部分内容存在纰漏烦请各位大佬批评指正。
(一)摘要:FastRCNN使用卷积神经网络执行目标检测任务,通过训练VGG16,最终的效果是RCN的九倍,并且经过PASCALVOV2012的验证,获得了更高的精准度。
(二)发表时间:2015
(三)关键词:目标检测,卷积神经网络,特征提取
(四)学习记录:
目标检测需要处理的两个问题分别是候选区域的处理,以及,因为候选区域只能提供粗糙的定位,必须细化才能获得精确的定位。论文中提出了一种单节段算法,基于卷积神经网络的目标检测器,它可以联合学习分类目标建议和空间位置。
以前的RCNN虽然表现的不错,但是还是存在一些问题的。比如,训练的花费很高,因为SVM和边界框回归需要对每个对象进行处理。检测速度很慢,因为提取的对象太多,从每个测试图像中的每个对象中提取特征也很花费时间。而且它对每个目标都执行一次卷积神经网络的前向传递,但是并不进行计算共享,也导致了它的速度很慢。
于是作者提出了FastRCNN,可以解决训练速度慢,检测慢的问题,并且提高了准确率。FastRCNN有以下几个优点。
- 检测质量相比于上一代更高。
- 训练是单节段的,使用多任务损失。。
- 训练可以更新所有网络层。
- 特征储存不需要磁盘空间。
结构整体图如下所示。
当图像输入的时候,首先使用卷积层和最大池化层对图像进行处理,生成conv特征图,然后对于一个proposal,使用ROI层提取固定长度的特征向量。每个特征向量都被输入到全连接层当中,最后经过两个输出层,一个输出针对K个目标类别(加上一个“背景”类别)的softmax概率估计,另一个输出每个目标类别的四个实值数字。
随后作者阐明了为什么SPPNet不能更新金字塔池化层以下的权重,是因为SPP层的反向传播非常低效,因为每个RoI可能有一个非常大的接受域,通常跨越整个输入图像。由于正向传递必须处理整个接受野,所以训练输入很大(通常是整个图像)。
而在FastRCNN中解决了这个问题,作者通过利用权重分享和SGD分层采样解决了这个问题。通过先从少量图像中采样,然后从每个图像中采样少量的RoIs,共享计算和内存可以极大地提高计算效率。与从多个不同图像中采样一个RoI的策略相比,这种训练方案更快速。