Fast R-CNN 论文笔记

Ross Cirshick针对R-CNN的改进

发表于2015年的ICCV

作者给出的代码:有pythonC++语言,基于caffe,

工程地址 https://guthub.com/rbgirshick/fast-rcnn.


R-CNN的缺点:

1,是一个多级的pipeline,它有几个单独的流程:1,训练CNN;2训练SVM;3训练bbox。

2,训练太过耗费时间与空间(CNN训练好的特征都要保存在磁盘中给SVM用)

3,测试也很耗时


Fast R-CNN的贡献:

1,精度(mAP)提升.

2,训练是一个整体的流程,通过使用多任务的回归

3,不需要耗费磁盘空间保存特征


Fast R-CNN的结构:

Fast R-CNN 论文笔记_第1张图片

此结构相对于传统DCNN的主要特点在于:

1,输入为一系列的图片与每张图片上的感兴趣区域ROI(其实这些ROI也是通过selective search)

2,将传统DCNN最后一个max-pooling层替换为ROI-pooling 层,即对Conv feature map中的感兴趣区域

      逐一进行max-pooling(先归一化)。

3,将最后两层替换为两个并行的回归组合:一个是FC+softmax,负责分类;另一个是FC+bbox regresor,负责修正位置。


Fast R-CNN为什么能提速:

1,因为对于同一张图片上的所有ROI,它们使用的是同一个Conv feature map,因此大大节省了计算量和空间。

(RCNN中每一个ROI都要将整个卷积过程计算一遍)。

2,在detection过程中使用了SVD加速。


多任务损失

Fast R-CNN 论文笔记_第2张图片

Fast R-CNN网络有两个同级输出层(cls score和bbox_prdict层),都是全连接层,称为multi-task。

① clsscore层:用于分类,输出k+1维数组p,表示属于k类和背景的概率。对每个RoI(Region of Interesting)输出离散型概率分布

通常,p由k+1类的全连接层利用softmax计算得出。

② bbox_prdict层:用于调整候选区域位置,输出bounding box回归的位移,输出4*K维数组t,表示分别属于k类时,应该平移缩放的参数。

k表示类别的索引,是指相对于objectproposal尺度不变的平移,是指对数空间中相对于objectproposal的高与宽。

loss_cls层评估分类损失函数。由真实分类u对应的概率决定:


loss_bbox评估检测框定位的损失函数。比较真实分类对应的预测平移缩放参数

真实平移缩放参数为的差别:


其中,smooth L1损失函数为:

smooth L1损失函数曲线如下图9所示,作者这样设置的目的是想让loss对于离群点更加鲁棒,相比于L2损失函数,其对离群点、异常值(outlier)不敏感,可控制梯度的量级使训练时不容易跑飞,使用L2必须要小心地设置学习率,防止遇到异常点发生梯度爆炸(RCNN中使用的是L2,我认为这是因为在RCNN中bbox是单独训练的,而在fast-rcnn中bbox的损失是总损失的一部分,如果这一部分反向传播的梯度特别大,会对分类部分造成影响)

Fast R-CNN 论文笔记_第3张图片


最后总损失为(两者加权和,如果分类为背景则不考虑定位损失):


规定u=0为背景类(也就是负标签),那么艾弗森括号指数函数[u≥1]表示背景候选区域即负样本不参与回归损失,不需要对候选区域进行回归操作。λ控制分类损失和回归损失的平衡。Fast R-CNN论文中,所有实验λ=1。

艾弗森括号指数函数为:



你可能感兴趣的:(机器学习,深度学习,fast,r-cnn,目标识别)