热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[ObjectDetection]R-cnn目标检测的开山之作详解

原文地址:RichfeaturehierarchiesforaccurateobjectdetectionandsemanticsegmentationIntrodcut

原文地址:Rich feature hierarchies for accurate object detection and semantic segmentation

Introdcution

这里写图片描述

  从图片中可以看出Rcnn过程主要经历4个阶段

  1. 输入图片
  2. 选取预选区域(Region proposal)

值得注意的是,这里预选区域时用 Selective Search方法
方法原文如下:Selective Search
解析如下:SS解析
Selective Search遵循如下的原则:
1 图片中目标的尺寸不一,边缘清晰程度也不一样,选择性搜索应该能够将所有的情况都考虑进去,如下图,最好的办法就是使用分层算法来实现
2 区域合并的算法应该多元化。初始的小的图像区域(Graph-Based ImageSegmentation得到)可能是根据颜色、纹理、部分封闭等原因得到的,一个单一的策略很难能适应所有的情况将小区域合并在一起,因此需要有一个多元化的策略集,能够在不同场合都有效。
3 能够快速计算。

 3.将预选区域Resize成一致规模的图片后通过CNN网络得到特征(文中使用227,为了与当时的Alexnet相对应)
 4.将得到的特征训练为二分SVM分类器,一次只能判断一类。同时产生Bounding-box Regression 得到BBox

以下是文章所使用方法与可选择方法对比:
![这里写图片描述](https://img-blog.csdn.net/20180609222104847?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIyNzQ5Njk5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/

在文章Introduction中,可以看到作者也想到利用sliding windows方法,这一方法正是one-stage常用的方法,但是最终因为经历的conv与pooling操作过多,导致感受野过大,放弃使用这一方法,在one-stage方法中使用multi-scale解决

详细过程(训练与识别)

1 预处理阶段

1.1 region proposal

文章指出选择预选区域的方法有很多,Rcnn主要使用以下两篇文章中提到的方法:
Selective Search for Object Recognition
Regionlets for Generic Object Detection

1.2 feature extraction

 文章直接将经过Region proposal的2000个左右的候选区域进行padding=16的扩充(即将预选区域周围的16像素都加入进预选区域),然后将图片直接缩放至227×227" role="presentation" > 227 × 227 规格的图片输入CNN结构中得到4096维特征,也就是说每个预选区域都会有4096维的特征输出。

文章使用的网络结构如下图所示:

这里写图片描述

2 测试阶段检测

 测试阶段,使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227,然后再CNN中正向传播,将最后一层得到的特征提取出来。然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值抑制去除相交的多余的框。另外还会对经过CNN的pool5之后的特征进行Bbox回归预测,使得预测到的Bbox更加准确(下文会提到Bbox回归)。

非极大值抑制(NMS):先计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding
box。然后重复上面的过程,直至候选bounding box为空,然后再将score小于一定阈值的选定框删除得到一类的结果。

 作者提到花费在region propasals和提取特征的时间是13s/张-GPU和53s/张-CPU,可以看出时间还是很长的,不能够达到及时性。

3 训练阶段

3.1 有监督预训练

 作者使用caffe框架利用ILSVRC 2012的数据集(应该就是imagenet吧)对网络模型进行了训练,使网络模型中的参数都是经过训练过的参数,而不是刚开始那样随机初始化的参数

3.2 特定领域的fine-tuning

 为了适应不同场合的识别需要,如VOC,对网络继续使用从VOC图片集上对region proposals归一化后的图片进行训练。网络只需要将最后的1000类的分类层换成21类的分类层(20个VOC中的类别和1个背景类),其他都不需要变。为了保证训练只是对网络的微调而不是大幅度的变化,网络的学习率只设置成了0.001。计算每个region proposal与人工标注的框的IoU,IoU重叠阈值设为0.5,大于这个阈值的作为正样本,其他的作为负样本(负样本指的就是被判断为背景),然后在训练的每一次迭代中都使用32个正样本(包括所有类别)和96个背景样本组成的128张图片的batch进行训练(这么做的主要原因还是正样本图片太少了)

值得注意的是,这样训练之后特岛的是网络特征还需要进行下一步的训练

3.3 特定类别的分类器

 对每个类都训练一个线性的SVM分类器,训练SVM需要正负样本文件,可以想象得到,刚好包含某一类物体的region proposal应该是正样本,完全不包含的region proposal应该是负样本,但是对于部分包含某一类物体的region proposal该如何训练呢,作者同样是使用IoU阈值的方法,这次的阈值为0.3,计算每一个region proposal与标准框的IoU,大于这个阈值的作为正样本,小于的作为负样本。由于训练样本比较大,作者使用了standard hard negative mining method(具体reference to hard negative mining of my blog)来训练分类器。作者表示在补充材料中讨论了为什么fine-tuning和训练SVM时所用的正负样本标准不一样(0.5和0.3),以及为什么不直接用卷积神经网络的输出来分类而要单独训练SVM来分类。rbg大神主页,补充材料

单独训练SVM的原因
1).cnn在训练的时候,对训练数据做了比较宽松的标注,比如一个 bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练cnn;
2).采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据,所以在CNN训练阶段我们是对Boundingbox的位置限制条件限制的比较松(IOU只要大于0.5都被标注为正样本了);
3).然而svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当boundingbox把整个物体都包含进去了,我们才把它标注为物体类别,然后训练svm分类器
SVM的训练
这是一个二分类问题,我么假设我们要检测车辆。我们知道只有当bounding box把整量车都包含在内,那才叫正样本;如果bounding box 没有包含到车辆,那么我们就可以把它当做负样本。但问题是当我们的检测窗口只有部分包好物体,那该怎么定义正负样本呢?作者测试了IOU阈值各种方案数值0,0.1,0.2,0.3,0.4,0.5。最后我们通过训练发现,如果选择IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,我们就把它标注为负样本。
一旦CNN f7层特征被提取出来,那么我们将为每个物体类训练一个svm分类器。当我们用CNN提取2000个候选框,可以得到2000*4096这样的特征向量矩阵,然后我们只需要把这样的一个矩阵与svm权值矩阵4096*N点(Therefore,the pool5 need to be set as)乘(N为分类类别数目,因为我们训练的N个svm,每个svm包含4096个W),就可以得到结果了。
因此也可以得知,RCNN方法只能预测出一个BoundingBox,所以不能预测多目标,这个问题在后续论文中也会有所改进

总结:首先进行fine-tune,这时IoU设置为0.5,得到网络权重。其次将fc7得到的4096维特征当做输入训练N个(N为数据集类别数)二分类SVM得到最终的分类器。然后在上面利用SVM进行二分类判断当前的region有没有包含我们需要的物体(对结果进行排序,取前面的IOU最大的那几个(nms)),在对这些进行canny边缘检测,才可以得到bounding-box(then B-BoxRegression)。

Bounding Box regression

 但是还有一个问题,此时得到的Bounding-box是不合格的,所以还要对每个类别的B-box做一个回归才能得到最后的预测,对于Bbox回归的解释如下图所示:
这里写图片描述

 那么具体怎么才能做好这个转换呢?
这里写图片描述
值得注意的是:这里既然被看做是一个回归问题则必须RP与GT相离比较接近,具体而言当输入的 Proposal 与 Ground Truth 相差较小时(RCNN
设置的是 IoU>0.6),可以认为这种变换是一种线性变换,那么我们就可以用线性回归来建模对窗口进行微调。 但是通过后续的研究可以通过end to end的训练方式训练回归而不必非要线性回归。

 那么这个回归的输入与输出分别是什么呢?

  • 输入
    这里写图片描述

  • 输出:可以看到所要得到的输出实际是需要的位移量以及放缩的尺度
    这里写图片描述
     因此目标函数可以表示为
    这里写图片描述
      直到进行框体预测时:
    这里写图片描述

总结

 文章的一些实验结果以及可视化过程还有训练参数可以在文中查看。Rcnn实际过程可以用下图来展示:
这里写图片描述

 该方法实际是比较麻烦的,需要RP两次输入进CNN模型,第一次得到classification的结果,第二次才能得到(NMS+regression)bounding-box。这篇文章主要贡献还是在于第一次直接使用CNN模型直接提取

 另外基于这篇文章后面提出ROI pooling也是开启two-stage目标检测方法的大门。


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Window10+anaconda+python3.5.4+ tensorflow1.5+ keras(GPU版本)安装教程 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
zj5415
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有