R-CNN论文阅读笔记

文章目录

  • 前言
  • 摘要
  • region proposals
    • selective search
    • Object proposal transformations
    • 给bounding boxes标标签
  • CNN特征提取和SVM
    • 网络选取
    • fine-tuning
    • 正负样本划分,以及softmax v.s. SVM
    • hard negative mining
    • SVM分类
    • 非极大值抑制
    • bounding box regressor
  • 总结

前言

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的每个部分。



region proposals

找框最直接的想法就是用滑动窗口穷举,但这样子我们既无法确定窗口应该多大,穷举计算量又巨大,显然不是个好办法。

selective search

论文采用的是selective search的方法来得到每张图上的约2000个bounding boxes。简单描述一下这个算法的步骤:
先用某个算法得到图像的初始regions,接着使用贪心算法对这些regions进行分组:

  1. 计算所有相邻regions的相似性。(相似性的衡量具体看参考资料)
  2. 将两个最相似的regions组合在一起。
  3. 再计算这个合成的region与其相邻regions的相似度。
  4. 重复2、3,直到全部合成一个region。
    这样只要保存了运算过程中得到的regions,我们就可以得到我们想要的regions。

参考资料:
理解Selective Search
选择性搜索算法(Selective Search)超详解

Object proposal transformations

因为前面一步得到的区域大小是不同的,而CNN的输入要求大小相同(227x227),这时就要求我们对图像做一定的变换。
论文提供三种变换思路:
1.方法B: 直接用原图像对区域进行扩充,若图像还不够扩充,就用图像像素值均值来填充。(各向同性)
2. 方法C:直接使用图像像素值均值对区域进行扩充。(各向同性)
3. 方法D:直接将区域拉伸到需要的大小。(图像比例改变,各向异性)

具体见下图:

R-CNN论文阅读笔记_第1张图片
上下两行的差别是:第一行在区域四周没有使用原图像的像素值进行填充,第二行有。

实验表明,方法D(各向异性)再加上padding=16(即第二行第三列的图像)最好。

给bounding boxes标标签

在训练阶段,当bounding box与真实边界框的IOU大于0.5时,则标记为真实边界框对应的物体类别(也是正类),小于0.5则标记为背景(负类)。
【注】 IOU衡量两个区域相交的程度,区域A与B的IOU计算公式是: ∣ A ∩ B ∣ ∣ A ∪ B ∣ \frac{|A \cap B|}{|A \cup B|} ABAB

注意,这里选择的阈值0.5与后面SVM选择的阈值不同。



CNN特征提取和SVM

众所周知,这种给图像中所有物品标框是非常耗费人力的事情,因此标好框的数据集是很稀缺的,相对来说图像分类的数据集就比较多了。所以论文使用的方法是:用预训练好的CNN网络,再使用我们有的目标检测数据集进行fine-tuning(微调)。

网络选取

对于CNN网络的选取,论文对比了AlexNet和VGG net,发现VGG效果更好,但计算量太大,最后还是选择了AlaxNet。

fine-tuning

论文还比较了一下如果不使用微调,直接用pool5 / fc6 / fc7 的向量来分类结果如何。
如果不使用fine-tuning,pool5与fc6, fc7的表现相差无几,甚至fc6比fc7效果还好,说明不微调的话后面两个卷积层几乎没起到什么作用,主要靠pool5前面的层来提取特征。
如果使用了fine-tuning,发现fc6 和 fc7的效果提高非常快,这也说明了fc6和fc7应该是用于专门的特征抽取,且微调也是必要的。

正负样本划分,以及softmax v.s. SVM

注意刚才在CNN训练时论文设定当与真实边界框的IOU大于0.5设为正类,而在SVM分类时是将IOU小于0.3的设为背景(这个0.3是调参调出来的),要求更加严格了。
这是因为:若在训练时对CNN要求过于严格,容易导致过拟合,并且要求宽松可以获得更多的正类帮助训练。但是分类时要求太宽松又会导致区域定位不准确,所以我们不能直接接一层softmax进行分类(区域定位会不准确),而SVM适合小样本,可以重新用一个SVM,设置更加严格的IOU阈值来对区域进行分类。

hard negative mining

这个训练技巧有点像反复做错题来提升自己。
所谓"hard",就是难以分辨是正类还是负类。因为负类(背景)远多于正类,所以很容易将负类预测为正类。这些容易被预测为正类的负类就属于hard negative。
在训练过程中,不断向负类训练集中加入这些hard negative,相当于把做错的题反复做。

参考资料:
rcnn中的Hard negative mining方法是如何实现的?

SVM分类

假设有N+1个类(1是背景),就训练N个SVM分类器,得到的置信值超过阈值的为正类,否则为负类(背景)。

非极大值抑制

这个的过程简单讲就是:先选出预测置信值最大的框,再剔除掉与这个框的IOU超过阈值的框,反复进行。
这个过程的目的就是选出最准确的预测框,剔除掉不那么准确的框。

bounding box regressor

Q:为什么要进行这个步骤呢?这个步骤在那里进行的?
A:我们预测的边框可能与真实边框还是有一定差距,这也会影响分类的结果,所以我们希望在训练过程中能帮助我们调节一下预测边框的位置。但是注意这个regressor的输入并不是我们在一开始用selective search得到的边框坐标,而是pool5层提取出的特征。

参考资料:
边框回归(Bounding Box Regression)详解



总结

整个算法的流程是:

  1. 三阶段:得到regions,CNN提取特征,SVM分类。
  2. 利用非极大值抑制得到较为准确的预测框。
  3. 用pool5层的值做bounding box regressor。

参考资料:
RCNN学习笔记(2)
RCNN 论文阅读记录

你可能感兴趣的:(深度学习论文阅读,论文阅读,计算机视觉,cnn)