1 Fast R-CNN的改进
Fast R-CNN是在R-CNN的基础上融入了SPP Net网络优点之后的一个改进网络,相比于R-CNN和SPP Net具有以下优点:
1 训练/预测运行速度更快;
2 mAP效果评估指标更高;
3 实现端到端(
end-to-end
)的
单阶段
模型训练;(多任务损失函数(Multi-task loss))
4 所有层的参数都可以fine tune重训练;
5 不需要离线存储特征文件;
6 采用SVD简化FC全连接层的计算量;
7 使用Softmax替换SVM分类器;
2 Fast R-CNN引进的技术
Fast R-CNN引入三种新技术:
RoI Pooling Layer
Multi-task loss
(多任务损失函数)
SVD
(类似连续的FC层<没有激活>)
![](https://i-blog.csdnimg.cn/blog_migrate/5248ab3309d7a32a7c085d91ccc2e0c3.png)
2.1 ROI Pooling Layer
空间金字塔结构SPP的单层特例;
将ROI区域卷积高阶特征转换为HxW的结构;
内部使用Max Pooling。
就是将SPP三层融合在一起,变成了只有一层,如下图
这个改动我的理解来看,变成单层,留池化最多的一层,是因为,另外两层的特征在池化最多的一层里面其实也有部分体现,留一层减少了计算量等费时操作,效果的话相比较而言
ROI Pooling可能效果差一些,不过也还行,算是在在费时方面做了优化
![](https://i-blog.csdnimg.cn/blog_migrate/3fc9210d6cde639497e4d4ed7a1939ec.png)
2.2 Multi-task loss(多任务损失函数)
Multi-task loss:包含分类分支和回归分支,其中分类返回输出的是K+1个概率分布p,回归分支输出的是预测位置(box offset偏移系数值)。
![](https://i-blog.csdnimg.cn/blog_migrate/c74b2558e8d2d9738a9731760eee5276.png)
前面是分类器损失,后面是回归器损失
指示函数
![](https://i-blog.csdnimg.cn/blog_migrate/baee25fd43cadfa5302f67c15ad2e0a3.png)
当u=0的时候(当前候选框为背景/负例),函数值为0;
当u>=1的时候(当前候选框为物体/正例),函数值为1;
在回归器用指示函数是因为在候选框为背景的时候,不需要用回归器,所以不计算回归损失
分类器损失就是计算每个类别的置信度的损失
![](https://i-blog.csdnimg.cn/blog_migrate/286293c754f6859d31e14f78e6c92ac5.png)
回归器
Smooth L1 Loss损失函数
![](https://i-blog.csdnimg.cn/blog_migrate/b94911aede3b80a37b3d5f7008cc3622.png)
在RCNN中回归器使用的
L2Loss(平方误差损失
)
相比较于RCNN为什么采用Smooth L1 Loss损失函数呢?
Smooth L1 Loss相比于L2 Loss,对于
离群点
更
不敏感
,当预测值和实际值差值比较大的时候,使用L2 Loss容易出现梯度爆炸的问题,而使用Smooth L1Loss不容易出现梯度爆炸。
Smooth L1 Loss相比于L1 Loss,在预测值接近实际值的位置(x=0位置),是连续可导的,收敛速度会更快。
Smooth L1 Loss的功能类似Huber Loss。
函数如下图
![](https://i-blog.csdnimg.cn/blog_migrate/9c5154967c0abb87f83f8020fbe30fe0.png)
2.3 SVD(类似连续的FC层<没有激活>)
在R-CNN和SPP Net中,SS提取的ROI区域比较多,所以后面的全连接操作比较多,差不多得进行2K次全连接操作,因此计算量有点大,故Fast R-CNN中采用SVD分解加速全连接计算。在实现上,相当于将一个全连接拆分为两个全连接。
![](https://i-blog.csdnimg.cn/blog_migrate/449256bad278170621f7e1965b9e3e9d.png)
使用SVD之后的效果如下图
![](https://i-blog.csdnimg.cn/blog_migrate/b50a364f9d9b605e9e8886048cd47315.png)
3 Fast R-CNN fine tune训练操作
在pre train的基础模型(前面的Conv特征提取使用ImageNet数据集上训练好的AlexNet或者VGG网络)上进行fine tune训练操作(微调,为了适应新的数据)
3.1 Mini-Batch Sampling抽样
分级抽样法(Hierarchical Sampling)
每个Batch抽取N个图像,然后从N个图像中抽取R个ROI区域组成训练数据
论文建议:Batch尺寸(128) = 每个Batch的图像数目(2) * 每个图像的ROI区域数目(64)
论文建议:每个Batch中,至少25%的正例样本。
充分利用卷积层的共享计算。
就是说每个批次选择两个图像,从两个图象里抽出来64个区域提名,一共128个样本进行批次训练
RoI分类基于和Ground Truth的重叠
物体/正例:IoU >= 0.5
背景/负例:IoU < 0.5
![](https://i-blog.csdnimg.cn/blog_migrate/d07f5c74c96d21e8e7ed25b5191ed3bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/40b7c7e5275e22ac39dbef7d5990f6cd.png)
3.2 使用Softmax替换SVM分类器
为什么使用Softmax替换SVM分类器?
因为在R-CNN中,微调操作是一个独立的分类损失函数,模型的求解是一个 独立的过程,所以求解的模型容易过拟合,故需要单独训练一个SVM分类器来进行明确的分类操作。 而在Fast R-CNN中,由于损失函数是由两部分构成的:分类损失和回归损失; 这相当于在softmax中引入了类间竞争,效果会更好,另外论文中测试效果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/e13659a5227e1541b2e5ec0b07fb7cea.png)
4 Fast R-CNN的改进和缺陷
1 改进
基本解决了R-CNN的绝大多数问题,但是还是有一些问题没有解决,具体如下:
解决了SPP Net网络中的fine tune的问题(局部训练);
解决了R-CNN网络中各阶段独立模型训练的问题(特征提取、SVM分类器、BBR回归器);
使用Full Image的方式一次性提取图像的Feature Map,降低了提取RoI区域特征属性的运行时间;
引入RoI Pooling Layer层,对于不同大小的RoI候选框产生相同维度大小的特征属性向量。
2 缺陷
Fast R-CNN中的主要问题就是使用SS产生候选区域块ROI区域在整个检测过程中耗
时太长(SS候选框获取2~3s,特征分类0.3s)。