前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【计算机视觉——RCNN目标检测系列】四、R-CNN论文详解

【计算机视觉——RCNN目标检测系列】四、R-CNN论文详解

作者头像
AI那点小事
发布2020-04-15 17:14:49
2.5K0
发布2020-04-15 17:14:49
举报
文章被收录于专栏:AI那点小事AI那点小事

微信公众号:AI那点小事 知乎专栏:AI那点小事 CSDN博客:https://daipuweiai.blog.csdn.net/ 作者:戴璞微 原文链接:https://zhuanlan.zhihu.com/p/76619825 https://daipuweiai.blog.csdn.net/article/details/98463403


写在前面

在上一篇博客:【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制主要讲解了IoU与非极大抑制相关概念与python实现,接下来在这篇博客中主要讲解了R-CNN论文中模型结构及其相关技术细节。


一、R-CNN总体概括

R-CNN在2014年横空出世,作者是目标检测领域的大神Ross Girshick,Ross Girshick也是其后序迭代版本Fast RCNN和Faster RCNN联名作者。RCNN属于是目标检测中two-stage(两阶段)算法中的鼻祖,其最终迭代版本——Faster RCNN更是成为了two-stage算法的标杆。

R-CNN在这篇论文里,Ross Girshick提出了一种简单并且可扩展的检测算法,在权威数据集PASCAL VOC2012上,RCNN将mAP提高了30%以上,达到了—53.3%。这也使得RCNN成为了第一个工业级的目标检测算法。之所以R-CNN能得到如此优秀的效果,主要得益于如下两个方面:

  1. 在候选区域(Region proposal)上自下而上使用大型卷积神经网络(CNNs)进行提取图像特征,之后用于定位和分割物体
  2. 当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的调优,即微调(fine-tuning),就可以产生明显的性能提升;

在这篇论文中,作者将Region proposal和CNNs结合起来,所以该方法被称为R-CNN:Regions with CNN features。我们也把R-CNN效果跟OverFeat比较了下(OverFeat是R-CNN之前目标检测性能最好算法),结果发现R-CNN在200类ILSVRC2013检测数据集上的性能明显优于OverFeat。


二、论文相关工作

在目标检测中,提取出图像中有效特征是最关键的一步工作。在R-CNN提出之前近十年时间里,SHIFT和HOG特征是各种视觉任务的基础。但是SIFT和HOG是块方向直方图(blockwise orientation histograms),一种类似大脑初级皮层V1层复杂细胞的表示方法。但我们知道识别发生在多个下游阶段,即我们是先看到了一些特征,然后才意识到这是什么东西。也就是说对于视觉识别来说,更有价值的信息,是层次化的多阶段特征

这也就导致了在2010-2012年目标检测进展缓慢,取得的微小进步都是通过构建一些集成系统和采用一些成功方法的变种才达到的。因此,传统的人工特征并不能适应于当前海量数据的目标检测问题,必须采用由浅入深、多层次自动提取深层特征的CNN来作为目标检测中核心特征提取器。

目标检测的第二个挑战是标签数据太少,可获得的数据远远不够用来训练一个大型卷积神经网络。传统方法多是采用无监督与训练,再进行有监督调优。但是在R-CNN提出之前,ImageNet数据集因AlexNet高出第二名15%的分类精度而变得受人关注。因此在R-CNN中,大型卷积神经网络是在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优。即首先R-CNN网络的初始参数是已经在ILSVRC数据集上已经训练好的网络参数,之后利用小样本的PASCAL VOC数据集对参数进行调优(微调,fine-tuning),使得R-CNN能够充分实现分类与定位两项任务。

首先进行有监督预训练,之后在特定数据集下进行微调的训练方式被称作为迁移学习。迁移学习是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。在R-CNN论文的实验中,针对目标检测的调优将mAP提高了8%。调优后,R-CNN在VOC2010数据集上达到了54%的mAP,远远超过高度优化的基于HOG的可变性部件模型(deformable part model,DPM)。

R-CNN模型的架构如下图所示。从图中可以看出,R-CNN首先在输入图像中提取接近2000个目标框(区域),之后将这些区域送入CNN中进行提取深度特征,最后利用这些深度特征进行目标的分类与定位两大任务。由于该模型结合了推荐区域(Region proposals)和CNN,所以起名为R-CNN:Regions with CNN features

在这里插入图片描述


三、R-CNN模型详解

接下来我们也将围绕目标框的提取、深度特征的提取和分类定位几个方面全面解读R-CNN。

3.1 推荐区域提取

首先来看下目标框即推荐区域的提取。在2014年R-CNN被提出之前,目标框的提取主要分为三种。

第一种就是滑动窗口。滑动窗口本质上就是穷举法,利用不同的尺度和长宽比把所有可能的大大小小的块都穷举出来,然后送去识别,识别出来概率大的就留下来。很明显,这样的方法复杂度太高,产生了很多的冗余候选区域,在现实当中不可行。

第二种是规则块。在穷举法的基础上进行了一些剪枝,只选用固定的大小和长宽比。但是对于普通的目标检测来说,规则块算法依然需要访问很多的位置,复杂度高。

第三种是选择性搜索(selective search,ss)。从机器学习的角度来说,前面的方法召回是不错了,但是精度差强人意,所以问题的核心在于如何有效地去除冗余候选区域。其实冗余候选区域大多是发生了重叠,选择性搜索利用这一点,自底向上合并相邻的重叠区域,从而减少冗余。

因此在R-CNN中选取了选择性搜索算法来生成后序后续送入CNN的推荐区域(Region Proposal)。

3.2 特征提取

在利用选择性搜索算法获取到原始图像中的推荐区域之后,R-CNN将这些推荐区域送入到CNN中来提取深度特。在2014年R-CNN提出之前,AlexNet夺得了ImageNet竞赛的冠军,展现出了强大的图像特征提取能力。因此,R-CNN采用了AlexNet作为提取图像特征的主干网络。不同的是,我们将AlexNet最后的ImageNet专用的1000-way分类层舍弃,采用了一个21维的分类层(20个目标分类+1个背景)。

同时由于AlexNet对于输入图像必须要求是227*227的RGB彩色图像,因此在R-CNN中,作者是将选择性搜索得到的推荐区域的图像尺寸首先进行了区域的转化成227 x 227

3.3 训练阶段

由于分类与定位两大任务在训练和测试阶段有所区别,因此这两部分我们将分别在训练和测试两个任务中进行描述。首先我们来看下训练阶段。训练阶段AlexNet的模型训练采用的有监督预训练和特定领域内参数微调的训练方式。梯度下降算法采用的SGD,学习率为0.001,小批量样本规模是128,其中正例32个(包括所有类别的推荐区域以及真实框),反例96个(即背景)。区分正例与反例的标准为目标框与真实框(Ground Truth)之间的IoU>=0.5,即IoU>=0.5则记作正例,反之记作反例(即背景)。

在提取特征完成之后,我们要做的还有就是训练每个类别SVM分类器将提取得到的特征向量用于优化每个类别的SVM二分类器。这个时候每个目标框标签的就要从物体分类的多变量one-hot标签转化成二分类的0/1标签。标签制定标准为目标框与真实框之间IoU是否大于0.3。若IoU<0.3则记作负样本即标签为0,真实框作为正例,其余的全部舍弃。

R-CNN不仅要完成AlexNet、SVM的训练,而且还要完成定位任务。在这里我们将AlexNet获得特征向量按类别送入x,y,w,h这四个分量回归器,利用梯度下度算进行训练每个分量回归器的权重,在这里特征向量的选择必须是与真实框(Ground Truth)之间IoU大于0.6的对应推荐区域提取出来的特征向量。R-CNN的训练流程图如下图所示。

在这里插入图片描述

3.4 测试阶段

在测试阶段我们,我们首先使用选择性搜索进行获取目标检测框,并将目标框填充至正方形然后转换尺寸到227*277,之后通过AlexNet进行提取特征,然后利用每个类别训练好的SVM二分类器对AlexNet提取得到的特征向量的每个类别进行打分。接下来分别将每个类别的特征向量送入已经训练好的每个类别的边界框回归器进行定位预测。得到分类打分和定位信息之后,可能会出现多个目标框之间IoU较高,即产生了目标框重叠,因此我们需要利用非极大抑制(NMS)算法进行去除IoU大于阈值的重复目标框。测试阶段的流程图如下图所示。

在这里插入图片描述

3.5 重要问题

上述4小节主要讲述了R-CNN模型主体框架及其训练和测试阶段的流程。接下来我们相关重点问题进行解释。

第一个问题就是为什么必须选用各向异性缩放与填充的图像尺度变换?

作者在附录中指出:

  1. 各向同性缩放1:直接在原始图片中,把推荐区域的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用推荐区域中的颜色均值填充;结果如下图第二列;
  2. 各向同性缩放2:先把推荐区域图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用推荐区域的像素颜色均值),结果如下图第三列;
  3. 各向异性缩放:简单粗暴对图像就行缩放至227×227的结果如下图第四列;
  4. 变形前先进行边界像素填充(padding)处理,即向外扩展建议框边界,以上三种方法中分别采用padding=0,如下图第一行,padding=16如下图第二行;

在这里插入图片描述

经过作者一系列实验表明采用padding=16的各向异性缩放即下图第二行第四列效果最好,能使mAP提升3-5%。

第二个问题是为什么微调时和训练SVM时所采用的正负样本阈值不一致?

微调阶段是由于CNN对小样本容易过拟合,那么需要大量训练数据,故对IoU限制宽松。在微调时,Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本。SVM则是适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。换句话说,微调阶段属于宽粒度训练,需要大量训练样本,IoU阈值设置宽松,但是SVM则属于强分类器,适合小样本训练,因此对IoU阈值设置严格。

第三个问题是为什么不直接在微调结束后,在AlexNet后直接加上21维的Softmax分类层而是采用SVM进行分类?

作者在附录中指出,因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。 第四个问题是为什么必须利用特定领域的数据集进行微调?直接使用AlexNet预训练的网络参数进行特征提取进而训练SVM不可以吗?

作者设计了没有进行微调的对比实验,分别就AlexNet的pool5、fc6、fc7层进行特征提取,将提取的特征输入SVM进行训练,这相当于把AlexNet CNN网络当做类似于HOG、SIFT一样的特征提取器,不针对特定提取任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多;在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显。

由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础(共性)特征,从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征。

因此在有监督预训练(迁移学习)之后利用特定任务特定样本对网络参数进行微调时非常有必要的。


四、R-CNN缺点

显然R-CNN存在以下几个缺点:

  1. 很明显,最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由选择性搜索算法得出的约2000个推荐区域都需要经过变形处理后再由AlexNet提取深度特征,这约2000个推荐区域可能出现大量重复区域,产生了大量重复计算。
  2. R-CNN的训练过程不是连续的,分成了两个部分。一个是AlexNet模型参数的微调,另一个是SVM的训练和边界框回归的训练。这样就导致无法共享权重,训练过程不连续。同时训练过程的不连续必然导致特征存储和磁盘空间浪费的情况。
  3. 每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢。
  4. 整个测试过程很复杂,要先提取推荐区域,之后提取每个推荐区域CNN特征,再用SVM分类,做非极大值抑制,最后做边界框回归才能得到图片中物体的分类以及定位信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI那点小事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 一、R-CNN总体概括
  • 二、论文相关工作
  • 三、R-CNN模型详解
  • 3.1 推荐区域提取
  • 3.2 特征提取
  • 3.3 训练阶段
  • 3.4 测试阶段
  • 3.5 重要问题
    • 四、R-CNN缺点
    相关产品与服务
    图像识别
    腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档