3、三次IOU  2、2次model run  1,一次深度神经网络

rcnn主要作用就是用于物体检测,就是首先通过selective search 选择2000个候选区域,这些区域中有我们需要的所对应的物体的bounding-box,然后对于每一个region proposal 都wrap到固定的大小的scale,227*227(AlexNet Input),对于每一个处理之后的图片,把他都放到CNN上去进行特征提取,得到每个region proposal的feature map,这些特征用固定长度的特征集合feature vector来表示。

最后对于每一个类别,我们都会得到很多的feature vector,然后把这些特征向量直接放到svm现行分类器去判断,当前region所对应的实物是background还是所对应的物体类别,每个region 都会给出所对应的score,因为有些时候并不是说这些region中所包含的实物就一点都不存在,有些包含的多有些包含的少,包含的多少还需要合适的bounding-box,所以我们才会对于每一region给出包含实物类别多少的分数,选出前几个对大数值,然后再用非极大值抑制canny来进行边缘检测,最后就会得到所对应的bounding-box啦.

整个架构如下图所示:

这篇paper中作者指出两个在inference的时候的关键点:第一:全部的参数在每种class类别都是共享的。第二点:和其他的方法相比较,我们最后的feature vector的维度都是相对较低的。

还有一个注意的地方:CNN中每层的参数都是如何训练出来的呢?首先:我们在ILSVRC 2012的数据集上进行分类训练,主要模拟的CNN模型是利用AlexNet进行分类,虽然最后的结果精度会有所降低,只是因为有些小小的改变而已,无伤大雅。这个过程是"pre-training"

如下图所示:

然后需要做的就是"fine-runing",主要就是对上面得到的model进行稍微的改动。首先改变了数据集的大小,前面用的数据集是比较大的,主要适用于进行分类,这里我们主要使用的是相对较小的,并且是通过selective search之后的region proposal 作为网络的输入。如果当前region  proposal的IOU大于0.5,把他标记为positive,其余的是作为negtive,去训练detection网络。并且对SGD的参数进行的适当的修改。

这个时候,上面的model中训练好了,之后,就需要对每一个region proposal进行特征集合feature vector训练好了,得到了特征就可以对每一个得到的特征输入到SVM进行分类看看这个feature vector所对应的region proposal是需要的物体呢?还是无关的实物(background),排序,canny边界检测之后就得到了我们需要的bounding-box啦.

如下所示:

conclusion:

整个系统分为三个部分:

1.产生不依赖与特定类别的region proposals,这些region proposals定义了一个整个检测器可以获得的候选目标

2.一个大的卷积神经网络,对每个region产生一个固定长度的特征向量

3.一系列特定类别的线性SVM分类器。

2.1模块设计

  1. region proposals 作者指出近几年有很多的产生region proposals的方法,而RCNN中使用的是【J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selectivesearch for object recognition. IJCV, 2013.】和【X. Wang, M. Yang, S. Zhu, and Y. Lin. Regionlets for generic objectdetection. In ICCV, 2013.】中的方法。
  2. Feature extraction 对于region proposals的特征提取,作者使用的是caffe框架,所使用的模型是在Imagenet数据集上的Alexnet模型。因为卷积神经网络要求输入的图片都是一样尺寸的,所以在计算每个region proposals的特征前会对每个region都归到一样大

2.2测试阶段的检测

测试阶段,使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227,然后再CNN中正向传播,将最后一层得到的特征提取出来。

然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值抑制去除相交的多余的框。

非极大值抑制(NMS)先计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box。然后重复上面的过程,直至候选bounding box为空,然后再将score小于一定阈值的选定框删除得到一类的结果。作者提到花费在region propasals和提取特征的时间是13s/张-GPU和53s/张-CPU,可以看出时间还是很长的,不能够达到及时性。

首先计算出所有窗口的面积,对所有窗口的分数进行从小到大排序取出最高分数的序号。循环计算1到次高分数窗口与最高分数窗口的交叉面积与两者间最小面积的比例,若超过overlap那么把这一窗口(1~~last中的窗口)抑制了。

2.3训练阶段

  1. 有监督预训练 作者使用caffe框架利用ILSVRC 2012的数据集(应该就是imagenet吧)对网络模型进行了训练,使网络模型中的参数都是经过训练过的参数,而不是刚开始那样随机初始化的参数
  2. 特定领域的fine-tuning 为了适应不同场合的识别需要,如VOC,对网络继续使用从VOC图片集上对region proposals归一化后的图片进行训练。网络只需要将最后的1000类的分类层换成21类的分类层(20个VOC中的类别和1个背景类),其他都不需要变。为了保证训练只是对网络的微调而不是大幅度的变化,网络的学习率只设置成了0.001。
  3. **计算每个region proposal与人工标注的框的IoU,IoU重叠阈值设为0.5,大于这个阈值的作为正样本,其他的作为负样本,然后在训练的每一次迭代中都使用32个正样本(包括所有类别)和96个背景样本组成的128张图片的batch进行训练(这么做的主要原因还是正样本图片太少了)
  4. 特定类别的分类器  对每个类都训练一个线性的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)来训练分类器。
  5. 作者表示在补充材料中讨论了为什么fine-tuning和训练SVM时所用的正负样本标准不一样(0.5和0.3),以及为什么不直接用卷积神经网络的输出来分类而要单独训练SVM来分类(see the folowing bolg, and it will make it done) 。

总之感觉:r-cnn有点麻烦,他要先过一次classification得到分类的model,继而在得到的model上进行适当的改变又得到了detection的model,最后才开始在detection model cnn上进行边界检测。

好麻烦,因为rcnn首先需要在AlexNet上进行分类的训练model,得到AlexNet之后才能进行分类(Pretrained procedure->SoftMax2SVM)。分类之后在改一下AxlexNet model (fc: 1000->21)得到detection model(training)->(testing)

然后在上面利用SVM进行二分类判断当前的region有没有包含我们需要的物体(对结果进行排序,取前面的IOU最大的那几个(nms)),在对这些进行canny边缘检测,才可以得到bounding-box(then B-BoxRegression)。

简单地说:就是r-cnn需要两次进行跑cnn model,第一次得到classification的结果,第二次才能得到(nms+b-box regression)bounding-box。

但是r-cnn也不是一事无成,人家还是有自己的特点嘛,就提在原来的架构上提出为啥不用CNN来进行特征提取,而是用那些老套的sift,hog呢?当然科研界的大牛还是很厉害的啦,在r-cnn的基础上就提出了fast-rcnn,它解决了rcnn中跑了两次cnn才分别得到classification和bounding-box,牛掰之处在于ROI层的提出.

RCNN,Fast RCNN,Faster RCNN 的前生今世:(2) R- CNN (3,2,1)的更多相关文章

  1. Java NIO 的前生今世 之四 NIO Selector 详解

    Selector Selector 允许一个单一的线程来操作多个 Channel. 如果我们的应用程序中使用了多个 Channel, 那么使用 Selector 很方便的实现这样的目的, 但是因为在一 ...

  2. 揭秘 BPF map 前生今世

    揭秘 BPF map 前生今世 本文地址:https://www.ebpf.top/post/map_internal 1. 前言 众所周知,map 可用于内核 BPF 程序和用户应用程序之间实现双向 ...

  3. RCNN,Fast RCNN,Faster RCNN 的前生今世:(2)R-CNN

    Region CNN(RCNN)可以说是利用深度学习进行目标检测的开山之作.作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更带领团队获得终身成就奖,如今供职于 ...

  4. RCNN,Fast RCNN,Faster RCNN 的前生今世:(4) Fast RCNN 算法详解

    继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度.在Github上提供了源码. 同样使用最大规模的网络,Fast ...

  5. RCNN,Fast RCNN,Faster RCNN 的前生今世:(3) SPP - Net

    SPP-Net是出自2015年发表在IEEE上的论文-<Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Reco ...

  6. 月光宝盒之时间魔法--java时间的前生今世

    月光宝盒花絮 “曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜,等到了失去的时候才后悔莫及,尘世间最痛苦的事莫过于此.如果可以给我一个机会再来一次的话,我会跟那个女孩子说我爱她,如果非要把这份爱加上 ...

  7. RCNN,Fast RCNN,Faster RCNN 的前生今世:(1) Selective Search

    Selective Search for Object Recoginition 这篇论文是J.R.R. Uijlings发表在2012 IJCV上的一篇文章,主要介绍了选择性搜索(Selective ...

  8. RPC 原理的前生今世

    (如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力.本博客会逐步推出一系列的关于大型网站架构.分布式应用.设计模式.架构模式等方面的系列文章) 在校期间大家都写过不少程序, ...

  9. 主动降噪技术(ANC)的前生今世--原理仿真

    一 原理: 主动降噪就是通过反相检测麦克风的声音或噪声来减弱周围环境的噪声让扬声器出来的声音听起来更清晰.主动降噪技术的目标就是通过一个自适应滤波器把不想要的噪声反相从而把噪声约束到固定的范围内.该系 ...

随机推荐

  1. Maven专题

    Maven 教程之 settings.xml 详解

  2. 数据分析-numpy的用法

    一.jupyter notebook 两种安装和启动的方式: 第一种方式: 命令行安装:pip install jupyter 启动:cmd 中输入 jupyter notebook 缺点:必须手动去 ...

  3. [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)

    题目大意:给定$n$个正整数,求$[l,r]$中第$k$小的”好数“.$l,r\leqslant10^{18},n\leqslant62$,出现的其他数均$\leqslant10^{50}$ 好数定义 ...

  4. 深度学习Tensorflow相关书籍推荐和PDF下载

    深度学习Tensorflow相关书籍推荐和PDF下载 baihualinxin关注 32018.03.28 10:46:16字数 481阅读 22,673 1.机器学习入门经典<统计学习方法&g ...

  5. .NET/C# 检测电脑上安装的 .NET Framework 的版本

    原文:.NET/C# 检测电脑上安装的 .NET Framework 的版本 如果你希望知道某台计算机上安装了哪些版本的 .NET Framework,那么正好本文可以帮助你解决问题. 本文内容 如何 ...

  6. 2.6_Database Interface JDBC及驱动类型

    JAVA语言参考ODBC,设计专用的数据库连接规范JDBC(JAVA Database Connectivity).目标是让Java开发人员在编写数据库应用程序时,可以有统一的接口,不依赖特定数据库A ...

  7. (转)项目迁移_.NET项目迁移到.NET Core操作指南

    原文地址:https://www.cnblogs.com/heyuquan/p/dotnet-migration-to-dotnetcore.html 这篇文章,汇集了大量优秀作者写的关于" ...

  8. python调用jenkinsAPI构建jenkins,并传递参数

    安装jenkins 安装jenkins很简单,可以用多种方式安装,这里知道的有: 在官网下载rpm包,手动安装,最费事 centos系统通过yum安装,ubuntu通过apt-get安装(不推荐,因为 ...

  9. 使用CertUtil.exe下载远程文件

    使用CertUtil.exe下载远程文件 证书 https://www.cnblogs.com/17bdw/p/8728656.html 1.前言 经过国外文章信息,CertUtil.exe下载恶意软 ...

  10. Mycat分布式数据库架构解决方案--rule.xml详解

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...