R-CNN原文标题:
Rich feature hierarchies for accurate object detection and semantic segmentation
当时的目标检测一般分为两个阶段,第一个阶段是region proposals,先利用一些传统算法得到框住物品的bounding boxes;第二阶段是对这些bounding boxes抽取出特征后,再进行分类。从而达到检测出图像中所有物品的目标。这篇论文采用的方法是:每张图先用selective search算法得到2000个bounding boxes并使用bounding boxes regressor进行修正,再用CNN抽取特征(这也是这篇论文的创新点,不再使用传统方式抽取特征),最后送进SVM进行分类。
接下来详细讲讲R-CNN的每个部分。
找框最直接的想法就是用滑动窗口穷举,但这样子我们既无法确定窗口应该多大,穷举计算量又巨大,显然不是个好办法。
论文采用的是selective search的方法来得到每张图上的约2000个bounding boxes。简单描述一下这个算法的步骤:
先用某个算法得到图像的初始regions,接着使用贪心算法对这些regions进行分组:
参考资料:
理解Selective Search
选择性搜索算法(Selective Search)超详解
因为前面一步得到的区域大小是不同的,而CNN的输入要求大小相同(227x227),这时就要求我们对图像做一定的变换。
论文提供三种变换思路:
1.方法B: 直接用原图像对区域进行扩充,若图像还不够扩充,就用图像像素值均值来填充。(各向同性)
2. 方法C:直接使用图像像素值均值对区域进行扩充。(各向同性)
3. 方法D:直接将区域拉伸到需要的大小。(图像比例改变,各向异性)
具体见下图:
上下两行的差别是:第一行在区域四周没有使用原图像的像素值进行填充,第二行有。
实验表明,方法D(各向异性)再加上padding=16(即第二行第三列的图像)最好。
在训练阶段,当bounding box与真实边界框的IOU大于0.5时,则标记为真实边界框对应的物体类别(也是正类),小于0.5则标记为背景(负类)。
【注】 IOU衡量两个区域相交的程度,区域A与B的IOU计算公式是: ∣ A ∩ B ∣ ∣ A ∪ B ∣ \frac{|A \cap B|}{|A \cup B|} ∣A∪B∣∣A∩B∣。
注意,这里选择的阈值0.5与后面SVM选择的阈值不同。
众所周知,这种给图像中所有物品标框是非常耗费人力的事情,因此标好框的数据集是很稀缺的,相对来说图像分类的数据集就比较多了。所以论文使用的方法是:用预训练好的CNN网络,再使用我们有的目标检测数据集进行fine-tuning(微调)。
对于CNN网络的选取,论文对比了AlexNet和VGG net,发现VGG效果更好,但计算量太大,最后还是选择了AlaxNet。
论文还比较了一下如果不使用微调,直接用pool5 / fc6 / fc7 的向量来分类结果如何。
如果不使用fine-tuning,pool5与fc6, fc7的表现相差无几,甚至fc6比fc7效果还好,说明不微调的话后面两个卷积层几乎没起到什么作用,主要靠pool5前面的层来提取特征。
如果使用了fine-tuning,发现fc6 和 fc7的效果提高非常快,这也说明了fc6和fc7应该是用于专门的特征抽取,且微调也是必要的。
注意刚才在CNN训练时论文设定当与真实边界框的IOU大于0.5设为正类,而在SVM分类时是将IOU小于0.3的设为背景(这个0.3是调参调出来的),要求更加严格了。
这是因为:若在训练时对CNN要求过于严格,容易导致过拟合,并且要求宽松可以获得更多的正类帮助训练。但是分类时要求太宽松又会导致区域定位不准确,所以我们不能直接接一层softmax进行分类(区域定位会不准确),而SVM适合小样本,可以重新用一个SVM,设置更加严格的IOU阈值来对区域进行分类。
这个训练技巧有点像反复做错题来提升自己。
所谓"hard",就是难以分辨是正类还是负类。因为负类(背景)远多于正类,所以很容易将负类预测为正类。这些容易被预测为正类的负类就属于hard negative。
在训练过程中,不断向负类训练集中加入这些hard negative,相当于把做错的题反复做。
参考资料:
rcnn中的Hard negative mining方法是如何实现的?
假设有N+1个类(1是背景),就训练N个SVM分类器,得到的置信值超过阈值的为正类,否则为负类(背景)。
这个的过程简单讲就是:先选出预测置信值最大的框,再剔除掉与这个框的IOU超过阈值的框,反复进行。
这个过程的目的就是选出最准确的预测框,剔除掉不那么准确的框。
Q:为什么要进行这个步骤呢?这个步骤在那里进行的?
A:我们预测的边框可能与真实边框还是有一定差距,这也会影响分类的结果,所以我们希望在训练过程中能帮助我们调节一下预测边框的位置。但是注意这个regressor的输入并不是我们在一开始用selective search得到的边框坐标,而是pool5层提取出的特征。
参考资料:
边框回归(Bounding Box Regression)详解
整个算法的流程是:
参考资料:
RCNN学习笔记(2)
RCNN 论文阅读记录