Fast R-CNN总结

Fast R-CNN

(1)输入测试图像;

(2)利用selective search算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal) ;

(3)将整张图片输入CNN,进行特征提取;

(4)把建议窗口映射到CNN的最后一层卷积feature map上;

(5)通过RoI pooling层使每个建议窗口生成固定尺寸的feature map

(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率边框回归(Bounding box regression)联合训练.

相比R-CNN,主要两处不同:

(1)最后一层卷积层后加了一个ROI pooling layer

(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

Fast R-CNN是端到端(end-to-end)的。

Fast R-CNN的架构如下图:
Alt

输入图像和多个感兴趣区域(RoI)被输入到全卷积网络中。每个RoI被池化到固定大小的特征图中,然后通过全连接层(FC)映射到特征向量。网络对于每个RoI具有两个输出向量:Softmax概率和每类检测框回归偏移量。该架构是使用多任务丢失端到端训练的。

Alt
Fast R-CNN的RegionProposal是在feature map之后做的,这样可以不用对所有的区域进行单独的CNN Forward步骤。
原文:https://blog.csdn.net/nuohanfengyun/article/details/82215899

1、输入是224×224的固定大小图片
2、经过5个卷积层+2个降采样层(分别跟在第一和第二个卷积层后面)
3、进入ROIPooling层(其输入是conv5层的输出和region proposal,region proposal个数大约为2000个)
4、再经过两个output都为4096维的全连接层
5、分别经过output各为 2184维的全连接层(并列的,前者是分类输出,后者是回归输出
6、最后接上两个损失层(分类是softmax,回归是smoothL1)

ROIPooling

由于region proposal的尺度各不相同,而期望提取出来的特征向量维度相同,因此需要某种特殊的技术来做保证。ROIPooling的提出便是为了解决这一问题的。其思路如下:

1、将region proposal划分H×W大小的网格
2、对每一个网格做MaxPooling(即每一个网格对应一个输出值)
3、将所有输出值组合起来便形成固定大小为H×W的feature map

训练样本

训练过程中每个mini-batch包含2张图像128个region proposal(即ROI,64个ROI/张),其中大约25%的ROI和ground truth的IOU值大于0.5(即正样本),且只通过随机水平翻转进行数据增强。

损失函数

在这里插入图片描述

改进全连接层

由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半(如下图)。作者采用奇异值分解(Singular Value Decomposition ,即SVD)来简化全连接层计算。

在这里插入图片描述

改进

1、卷积不再是重复对每一个region proposal,而是对于整张图像先提取了泛化特征,这样子减少了大量的计算量(注意到,R-CNN中对于每一个region proposal做卷积会有很多重复计算)

2、ROIPooling的提出,巧妙的解决了尺度放缩的问题

3、将regressor放进网络一起训练,同时用softmax代替SVM分类器,更加简单高效

不足

region proposal的提取仍然采用selective search,整个检测流程时间大多消耗在这上面(生成region proposal大约2~3s,而特征提取+分类只需要0.32s),之后的Faster RCNN的改进之一便是此点。