R-CNN阅读笔记

1 篇文章 0 订阅

写CS231n中关于Localization, detection等应用的笔记时,总感觉理解不够深刻,逻辑也不够清晰,所以刷了几篇相关论文。
这篇论文应该算是RBG大神的成名之作,是当年把深度网络应用到detection领域的成功尝试,主要贡献在于证明了CNN特征的优越性以及提供了预训练+微调的模式用于对CNN等深度学习的应用领域进行拓展。博主主要阅读了原论文tech report,论文的开源代码见https://github.com/rbgirshick/rcnn


1. 问题描述 & 背景介绍

detection的目标是在给定的图片中找出任意多个(主要)物体,并用矩形框圈起来,如下图所示。
Detection
R-CNN之前(before 2012)的detection大多都是使用SIFT,HOG等特征进行。这些特征都是小区域内部特征,大致等效于V1视觉神经元,而已知人是在之后的高层神经元进行物体识别的,所以从模拟人脑的角度,需要高层次的复杂特征。
CNN在2012年已经在分类比赛上取得了巨大成果,R-CNN尝试利用CNN的特征提取能力在detection领域取得突破。
将CNN用于识别的两个问题是:1. 如何确定物体位置(建模) 2. 如何训练一个复杂模型。

2. R-CNN简述

2.1. 确定物体位置–>模型设置

确定物体位置的模型有两个:1. regression 2. sliding windows。实验证明sliding window优于regression,所以R-CNN选取了sliding window的模式。区别之前sliding window+CNN的组合,R-CNN中CNN的模型更复杂(5层 VS 2层)
最初的R-CNN采用了和传统detection几乎相同的框架,只是更改了特征的部分,采用了CNN提取到的特征。流程是1. 提取proposal –> 2. CNN特征 –> 3. SVM分类器。具体地,首先通过传统的无监督的与类别无关的方法提取proposal,提取的这部分proposal都是最后圈中待识别物体的矩形框;然后对于这些矩形框进行特征提取,传统的就是使用SIFT/HOG等人工设定的特征,这里将其替换为CNN提取到的特征;对于提取到的特征进行分类,即可得到其是否为输出矩形框的判别。(这个流程会随着其遇到的各种问题而逐渐改进)
R-CNN
因为这个模型是Region proposal + CNN,所以是R-CNN。

2.2. 在小数据集上训练复杂模型–>预训练

传统的预训练方法是无监督的,每层自己训练训练一个权重出来(例如通过AutoEncoder)之后,再加上label信息进行整体微调。这个方法没有任何先验,需要大量数据进行训练。而R-CNN则采用了CNN在分类问题上已经训好的权重作为初始权重,再针对detection问题进行微调。这就使得小数据集可以使用大数据集上的先验知识,在分类问题上的研究成果可以轻松迁移到detection问题上了。而且这种模式也为CNN在其他图像领域的应用提供了样板。

3. R-CNN详述

3.1. Region Proposal

这部分用于在图像中寻找有可能是待识别物体的矩形框。Region Proposal的方法有很多(如下图),各有优缺点,论文中是为了和传统方法进行比较,所以采用了控制变量法,即与传统方法相同,采用了Selective Search。
Region Proposal Methods

3.2. 特征提取

3.2.1. 图像变形

因为当时CNN的输入必须是固定大小的(为了得到固定大小的特征长度,而且全连接层也限制了输入的大小),所以对于不同大小的proposal,就需要把他们都变到相同大小再输入进CNN网络。(这部分在fast/faster R-CNN进行了改进)
图像变形的方法有很多,论文中采用了最简单的warp。但是对变形的区域进行了限制,即不单单对proposal选中的矩形框进行变形,还将其扩大(引入背景信息),使得变形后原proposal矩形框外围还有p个像素点(p=16)。
具体地,论文中测试了两种变形方法:1. tightest square 2. warp。这两种方法的区别在于第一种方法的变形是具有各向同性的,即直观上物体的横纵比例没有明显变化;而第二种是不具有各向同性的。第一种方法是寻找一个最小的正方形框圈中待变形区域,然后把这个正方形框变形到指定大小,对于矩形框和正方形框之间的部分填充默认值。而第二种方法就是直接对待变形区域变形到指定大小。
而对于待变形区域,论文中也测试了两种:1. with context 2. without context。两者的区别就在于是否包括背景信息。而含背景信息的待变形区域的拓展大小也不是固定的,而是使得变形后的图像中在proposal外面多出p(p=16)个pixel。这样的好处是自动对于不同大小和比例的proposal进行适应性的拓展。论文中提及背景信息对于detection问题很重要,采用方法1(with context),对比与方法2(without context),(无论是采用哪种变形方法)都会提升3-5 mAP points。
部分变形样例如下:
Warp

3.2.2 CNN网络

3.2.2.1. 测试部分

做一次CNN网络的前向过程,对于给定的proposal变形之后的图像输入,输入出一个固定维度的特征向量。注意这部分特征提取是与类别无关的,这就对比与传统detection方法,对于不同的物体(例如人和狗)需要人为的设计不同的特征。
具体地,CNN模型使得detection的效率大大提高。
1. CNN与类别无关(和proposal一样),所以此部分消耗被所有类别均摊。(对比于传统需要对每个类别计算其特殊特征的方法)。
2. CNN的输出维度低(4096 VS 360k),这样分类器的消耗也减少(内存,计算资源等)

3.2.2.2. 训练部分
3.2.2.2.1. 预训练

论文中用了supervised pre-training与传统的unsupervised的方法进行区别。这里的网络结构和权重可以想象为从分类问题中复制过来的。

3.2.2.2.2. 微调

这里面使用的是和分类问题中CNN模型几乎相同的模型,只是对于最后一层全连接进行了替换。具体地,将最后一层的输出节点个数根据需要进行更改,对于除最后一层之前的所有隐层节点个数以及连接方式都直接复制分类问题中的CNN模型。对于最后一层全连接进行随机初始化,而之前所有的权重都使用分类问题中CNN模型训练好的权重。
模型建立好后,就是对其进行训练。初始参数按照上诉方法设置;优化算法采用learning rate=0.001的SGD(这个小学习率可以使得模型既可以有明显的学习,又不至于过分的更改前几层连接的权重);每个mini-batch由32个正样本(可以是任意类别的)和96个负样本(背景)组成(这样强制要求,对比于随机抽样,的原因是proposal中属于背景的占大多数)。这里面留有一个正样本和负样本的定义问题,和SVM分类器中的定义一起讨论。

3.3. 物体类别分类器

当对所有proposal提取对应的特征向量之后,就是为每个向量设置label(此部分之后与微调一起讨论)。得到数据集后直接训练一个SVM分类器模型出来。论文中采用了对于每个类别训练一个线性SVM分类器的方法,由于数据量过大,采用了standard hard negative mining method。

3.4. label的标定(用于CNN微调以及SVM训练)

首先给出CNN微调和SVM的具体策略:
1. CNN微调中对于每个proposal计算其与ground truth的IoU(Intersection over Union),如果大于0.5,则为该类别的正样本,否则为负样本。
2. SVM的策略是对于所有IoU < 0.3的proposal视为负样本,而只对ground truth视为正样本。
第一个问题就是为什么两者不同。论文在tech report中的附录里说明,R-CNN在最开始是不包括微调的步骤的,直接使用预训练模型提取的特征向量训练分类器。此时试验了多种方法(包括微调的方法)之后,采用了最优的现有策略。而后来引入微调之后,如果是使用SVM策略的话得到的结果远弱于现有策略。
那接下就是要如何解释这个现象。论文中给出的假设是使用SVM策略的话会使得训练样本大大减少,从而不足以训练softmax分类器(使用微调策略可以使得正样本增加大概30倍)。然而这个策略使得正样本中包括了suboptimal的部分,所以可能会使得最终结果不准确。(对比SVM,其需要的训练样本较少)
第三个问题就是,为什么有了softmax,还要训练SVM。最重要的理由可能就是实验结果证明softmax的准确率比SVM低4个mAP。那可能的原因就是因为softmax的训练数据中正样本包含了很多suboptimal的,而负样本也不是那么严格(IoU<0.3 VS IoU<0.5)。
论文中进一步推断,softmax其实是可以得到近似于SVM的结果的,这样会使得R-CNN流程更加简洁。
论文中还提到对于SVM正负样本定义中的IoU的threshold,对于最终结果影响很大。其交叉验证试验了{0,0.1,…,0.5},发现差值可以达到5个mAP points。特别的,设其为0.5将会使得mAP掉5个点,而设为0则会掉4个点。


未完待续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值