R-CNN 论文阅读笔记

论文链接:https://arxiv.org/abs/1311.2524

作者GitHub代码链接:https://github.com/rbgirshick/rcnn

一、简介

R-CNN是将深度学习用于目标检测的鼻祖之作,在目标检测精度几年不在提升之后,得到了约30%的精度提升,之后,开启了深度学习在目标检测领域的一统天下,包括后面提出的Fast R-CNN、Faster R-CNN等,不仅在精度上有了进一步的提升,在速度上也有较大的进步。

那么,作者实如何引入深度学习,又是为什么会产生如此大的提升,作者又是怎么做的呢?下面做详细介绍:

在深度学习之前,目标检测的方法多是使用人工提取的图像低层特征的组合(如:SIFT、HOG等),这样不仅图像提取的特征的维度非常大,而且由于其特征较为低级,很难突破瓶颈,导致在2010-2012年,图像目标检测的精度提升缓慢。

在2012年,AlexNet横空出世,在图像分类领域一枝独秀,作者在AlexNet以及特征多级提取的思想作用下,作者设计了R-CNN,并通过多次试验,达到了30%的精度提升。

那么R-CNN是怎么干的呢?如下图:

这里写图片描述

简单描述为:R-CNN首先利用Selective Search方法提取图像候选框,然后将候选框缩放到227*227,放入CNN网络(AlexNet)提取特征,CNN后,利用SVM进行类别分类。

那么为什么要这么做?每一步的细节又是什么样的呢?

1、利用Selective Search提取候选框

跟图像分类不同的是,目标检测需要对目标进行精确的定位,作者论文提到了如下一些方法:
1. 直接使用回归进行定位,但是作者说该方法效果较差。
2. 利用sliding-window,但是由于特征提取中我们的网络较深,所以最后提取的特征感受野较大,这使得sliding-window方法受限。
3. recognition using regions

该方法通过类似Selective Search等方法,在图像中提取大量的候选框,然后对每一个候选框进行特征提取分析,找到做好的定位。与Selective Search相似的算法也比较多,作者选择Selective Search也是由于Selective Search可控性较强,而且速度还可以。

在提取候选框之后,便需要将图像输入到CNN中提取特征,作者又是如何做的呢?

2、输入图像处理方式

由于Selective Search提取的候选框的大小不一,但是CNN要求输入的图像大小固定(227*227),所以需要对SS方法提取的图像进行变换,作者尝试了几种方法如下:
1、直接截取较大的矩形区域,然后缩放到227*227。
2、直接填充训练图像的均值,得到矩形区域,然后缩放到227*227。
3、直接缩放到227*227。
4、对上述方法,预留16个像素的边界。

截取方法如下图所示,其中B、C、D分别对应1、2、3,每组的第一行为没有预留边界,第二行为预留了16个像素边界。

这里写图片描述

作者通过实验发现,采用直接缩放,并且预留16个像素边界的实验效果最好。

输入图像的问题解决了,那么该如何训练我们的网络呢?这里又遇到了第二个问题,训练数据集较小。

训练网络

由于在目标检测中,我们的数据量有限,所以作者首先采用ImageNet数据集预训练网络模型,然后利用VOC数据集进行fine-tuning,由于VOC数据集只包含20类,所以作者调整CNN模型只输出21类(20类+背景),并且为了增大数据集,作者将与Ground Truth的IOU大于0.5的Region Proposal标记为正样本,其余的为负样本,在训练的时候batch size为128,其中32个正样本,96个负样本。

训练SVM分类器

为了得到每个对象的类别,作者为每个类别训练了一个SVM分类器,作者将每个类别的Ground Truth作为正样本,对于IOU小于0.3的region proposal作为负样本。
并且由于训练的数据较大,需要占用较大内存,所以作者利用standard hard negative mining方法进行训练,实验证明该方法收敛迅速。

0.3这个阈值是作者通过grid search试出来的,{0,0.1,0.2,0.3,0.4,0.5}逐一试。

为什么训练CNN与训练SVM采用不同的训练样本?

这个参数的选择也是作者实验做出来的效果,采用该定义的时候,效果较好。
同样作者为了解释这个现象同样进行了对比实验,作者首先利用预训练的CNN提取的特征训练SVM,在训练过程中,作者发现,存在一些优化方法可以优化结果,这就包括本文式样的fine-tuning方法,然后作者使用训练SVM的样本定义方法进行fine-tuning,但是作者发现效果没有本文最后确定的方法好,作者解释如下:

对于在训练CNN以及SVM的时候,正负样本的定义不同,主要在于训练数据集有限。作者采用IOU为0.5增加了将近30倍的训练数据,这可以有效的在fine-tuning的过程中防止过拟合,但是由于使用了这些数据,导致其在目标定位中的精度下降。
这就带来了另一个问题,我们为什么不直接在网络后面利用回归进行检测而是训练SVM分类器呢?作者实际上使用softmax进行了测试,但是作者发现,其精度降低了,导致精度降低的主要有几方面,如:进行fine-tuning时候的目标精度本身就存在偏差,不是ground truth,另外softmax的训练采用的是随机的负样本而不是采用的hard negatives样本。
另外,作者提出,不使用SVM应该也可以达到类似的精度,可以进行进一步的研究。

Bounding-box Regression

进一步的,作者设计了Bounding-box Regression用于对坐标进行微调,使得得到的目标更接近于ground truth

对于region proposal 以及ground truth,本文分别用如下代替:

P i = ( P x i , P y i , P w i , P h i ) G i = ( G x i , G y i , G w i , G h i )

其中x,y为中心点坐标,w和h分别为长和宽。
作者通过线性变换,计算P的偏移量,得到预测坐标如下:
G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y

G ^ w = P w e x p ( d w ( P ) ) G ^ h = P w e x p ( d h ( P ) )

其中 d ( P ) 代表一种线性变换,对pool5特征进行计算,我们标记特征为 ϕ 5 ( P ) d ( P ) = w T ϕ 5 ( P ) ,作者设定优化函数为:

w = a r g m i n w ( t i w T ϕ 5 ( P i ) ) 2 + λ | | w | |

t 定义如下:

t x = ( G x P x ) / P w t y = ( G y P y ) / P h

t w = l o g ( G w / P w ) t h = l o g ( G h / P h )

这里分析一下,为什么作者在x,y分别除了w和h,原因在于其偏移量产生的loss与proposal的大小有关,比如同样是向左偏移10个像素,如果proposal是100*100和10*10产生的误差是不一样的,所以作者除了w和h。

并且作者指出,必须选用有用的(P,G)组合才行,如果P离Ground Truth较远,那么进行转换便没有意义了,所以,这里作者只选用了距离ground truth较近的目标进行回归,作者设定的参数是IOU为0.6。

R-CNN精度对比

作者对比了R-CNN(是否包含bounding box方法),以及其他算法的精度,测试结果见下图,由下图可以发现,R-CNN BB的精度遥遥领先。

这里写图片描述

学习特征可视化

作者设计了一种无须参数的可视化方式,来判断每个unit学到的是什么,该方法首先选定一个特定的unit,然后在10万个region proposal中找到激活值最大的前几个,并利用非极大值抑制,最后显示出学到的区域,作者在CNN网络的pool5后进行实验,作者论文中展示了6组测试结果,如下:

这里写图片描述

Ablation studies

为了验证不同层在检测中的作用,作者进行了如下对比实验,实验结果如下图:
* 针对pool5,fc6,fc7层的分类能力对比,作者发现,其实pool5的分类能力已经很强,fc6和fc7虽然占有大量的参数,但是并没有取得实质的提升。row1-3
* 对pool5,fc6,fc7采用fune-tuning进行实验对比,作者发现,fune-tuning之后,模型的识别能力提升了近8%,fc6和fc7提升明显,但是pool5提升不明显,这样说明了pool5提取的特征具有一定的泛化性。row 4-7
* 与其他方法进行对比,优势明显。row 8-10
这里写图片描述

猜你喜欢

转载自blog.csdn.net/chunfengyanyulove/article/details/79548472