论文阅读-RCNN

《Regions with CNN features》-2014

代码和论文地址:https://github.com/rbgirshick/rcnn

一、解决什么问题?

1.属于目标检测领域。

2.

二、怎么解决问题?

1、基本的思想

大样本下有监督训练+小样本微调的方式解决小样本难以训练甚至过拟合问题。

2、大概的流程

(一)训练阶段:

概述:

比较详细的介绍:

1. 使用SS提取proposal。

      对训练集中所有的图片,用selective search从每张图片中提取相应的2000个proposal,并保存。(图片路径+bounding box信息)所以一共有N×2000个proposal,N是样本集合的数量。

2. 根据真实bbox给proposal打标签。

      对每张图片,根据图片中bounding box的ground truth信息,给该图片的2000个proposal赋类标签,并保存。

(这2000个proposal做如下的处理:对于一个propsoal,如果它和ground truth的IoU值超过了阈值,则把ground truth中的proposal对应的类标签赋给原始产生的这个proposal,阈值没有达到的proposal都标为background,因此一个样本可能对应多个proposal)

3. 缩放(warp)+获得CNN特征。

-1 将每个Region Proposal缩放(warp)成227×227大小

-2 将prposal进行warp之后,每次迭代都会从proposal的集合(第二步得到的结果)中随机取batch(本文为128个)个proposal来训练一个在ImageNet上训好的模型。

-3 将每一个proposal以及对应的类标签输入CNN,来训练这个分类网络(classification网络)。训练好后对所有的proposal,forward一遍,得到fc7 feature,保存最终的fc7特征及对应的proposal信息到文件中。

4. 训练SVM分类器。

       使用CNN提取到Region Proposal的特征后,将这些CNN特征输入到SVM进行分类。对某一个特定的类,把跟属于这个类的ground truth的bounding box的IoU大于阈值的原始提取的proposal标为正样本,其余标为负样本,得到新的一个文件(加上之前得到的fc7特征信息)。用这个文件去训练这一个类的SVM。同样的方法,循环训好其他类别的分类器。

5. 位置精修。

     用CNN得到的pool5的特征和bounding box的ground truth来训练bounding box regression,只对那些跟ground truth的IoU超过某个阈值的proposal进行训练,其余的不参与。

(二)测试阶段

1.输入一张多目标图像,采用Selective search算法提取2000个object proposal。

2.在每个object proposal周围加上一个边框。增加的边框的像素个数为16,每个像素的像素值为object proposal中像素的平均值。

3.将第2步得到的proposal进行wrap为227*227大小的proposal(图片)。

4.将3中所有的object proposal中的像素减去该proposal像素的平均值。

5.依次将每个227×227的proposal输入到CNN网络中,获得4096维的特征矩阵。因此,2000个object proposal的CNN特征就可以组合成一个2000×4096维的矩阵。

6.将2000×4096维的特征与20个SVM组成的权值矩阵4096×20相乘,获得一个2000×20维矩阵,矩阵的每一行表示每个object proposal是某个物体类别的得分。

7.对第6步得到的2000×20维的矩阵的每一列(即每一类)进行非极大值抑制,剔除重叠建议框,得到该列(即该类中)中得分最高的一些object proposal。

8.分别使用20个回归器对上述20个类别中剩余的object proposal进行回归操作,最终得到每个类别修正后的得分最高的bounding box。

三、技术的创新点?

1.最伟大的地方是:将检测问题转换成region proposal的分类问题。

采用CNN网络提取图像特征,从经验驱动的人造特征HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表达能力。

2.

3.

四、有哪些需要展开讲的技术?

1.RCNN模型的整体的框架?

我们按照训练过程和测试过程来分别叙述RCNN的框架。

(1)在训练过程, RCNN算法经过了三个阶段:

      =>第一阶段是使用ILSVRC2012数据集训练一个1000类的分类器模型,并将这个模型保存下来。

      =>第二阶段是模型的初始化以及训练模型。加载第一部分训练好的模型的参数来初始化物体检测时要使用的RCNN的参数,并使用经过处理的区域(proposal)来训练模型。在每一次的随机梯度下降法的迭代过程中,论文使用的批量的大小是128,其中有32个样本是前景,有96个样本是背景。

       => 第三阶段是训练二分类的分类器。就不算CNN模型的部分了。

(2)在测试过程,我们分为四个阶段。

            =>(1)提取目标区域。

            =>(2)对图片进行转换。

            =>(3)使用CNN提出特征向量。

            =>(4)使用SVM进行分类。

       我们首先使用SS算法在每一张图像上提取2000个区域。然后对每一个目标区域进行图像的转换(swarp).接着将转换后的图片作为CNN的输入,使用CNN提取特征向量。然后对于每一个类,我们使用训练好的SVM对每一个区域目标打分。对于一张图片中所有的打分的区域目标,我们使用一种非极大值抑制算法(NMS)来去掉IOU大于阈值的但是得分较低的那个区域。

2.SVM的训练过程是怎么样的?



3.使用SVM(这里我觉得是使用回归器做边框回归而不是使用SVM做边框回归)对分好类的Region Proposal做边框回归?(也就是位置精修)

回归器的简介


(1)什么是bbox?

就是框出目标的一个矩形框,数学上使用一个四维向量(x,y,w,h)表示,分别表示窗口的中心点坐标(x,y)以及矩形框的宽和高。

(2)为什要做边框回归?(问题在哪里)

     -1、首先,目标检测任务不仅要对目标进行识别,还要完成定位任务,所以在判断目标检测的效果的时候,也需要考虑目标检测的精度,也就是bbox的位置的精度。

      -2、 因为SS算法得到的region proposal 的bbx没有人工标记的那么准确,如果region proposal跟真实的位置偏移的比较大,即使我们得到了正确的分类(给物体打上了正确的标签),但是由于IOU的值小于阈值,可能被判定为没找到目标。所以在SVM对Region prosal分好类之后,增加一个边框回归的线性回归算法,将region proposal的bbox进行纠正。使得调整后的bbox和真实的bbox更接近。不仅能够保留该RP,同时得到了更准确的bbox.

(3)在什么时候使用边框回归?

- 1. 在SVM对特征分类、给出RP的分数之后,就会使用一个边框回归器给出该区域的坐标。

(4)边框回归任务数学上的目标?

    因为边框回归的目的是找到一种关系使得输入初始的bbox(第一次得到的bbox),经过线性回归(映射)之后能够得到一个更接近真实窗口的bbox(预测值)。



(5)怎么做边框回归/边框回归?使用什么阶段的数据?采用什么模型?基本的思路?如何处理/即流程是什么样的?(平移+尺度缩放)

=>采用的模型


  =>边框回归的思路:

        

  =>边框回归的流程?

边框回归算法的输入:训练阶段是RCNN中的Pool5中的特征+真实的bbox也就是下边提到的t=(tx,ty,tw,th))

边框回归算法的输出:

        我们输入真实的平移量(tx,ty) 和尺度缩放(tw,th),以及从CNN第五层的特征层中得到的pp特征向量。那么我们的目标函数就是D=WX.其中X就是我们的cnn特征向量,D就是我们需要学习的预测值,是一个向量,也就是(tx,ty) 和(tw,th)的预测值。我们需要学习的就是使预测值D和真实值T=(tx,ty,tw,th)差距最小,所以训练时使用的损失函数就是:

                                                           (这是个二次方的损失函数)

这里括号里的第一项就是我们我们说的输入的真实值,第二项表示的是WX,就是我们的预测值。  

那么求解W的最优解的方法就如下所示:

              

1.我们把RP记为P,

2.线性回归就是给定输入的特征向量x,学习参数W,有WX近似等于真实值Y.

3.使用BBox边框回归算法的前提:当初始的pp和真实的pp的IOU的值大于阈值(也就是初始的bbox和真实的bbox相差不大),我们就认为从初始的bbox变换到预测的bbox的变换是一种线性变化,从而可以使用线性回归模型来对窗口进行微调。如果不满足这个条件的化,我们的回归模型就不能很好的工作。因为此时变换问题变成了一个非线性的问题。那么可以使用G-CNN:an iterative Grid Based Object Detector多次迭代实现目标准确定位的关键。

参考文献:https://blog.csdn.net/zijin0802034/article/details/77685438

(6)补充讲解的关于位置精修/回归器的知识?

-1.什么叫做定位精度?

定位精度可以使用算法得出的物体检测框与真实的bbox的IOU的值来近似表示。

五、这个技术的优势在哪里?

1.在当时大幅度的提高了目标检测(物体检测)需要的时间,同时也将目标检测的准确率从35%左右提高到了60%左右。

2.

六、这种方法存在什么问题?

(1)训练分为三个阶段,步骤比较多。微调网络+训练svm+训练边框回归器。

(2)训练耗时,占用的磁盘空间大:5000张图片将会使用几百G的特征文件。

(3)速度慢:使用GPU,VGG-16模型处理一张图片需要47S。

(4)测试速度慢:每个候选区域需要运行 整个前向CNN算法。

(5)SVM和回归是特征提取之后的操作。在SVM和回归过程中CNN特征没有被学习更新。——因此有了SPP-NET。


七、技术细节

1.正负样本是怎么区分的?

不同阶段:正负样本的区分的阈值不同,但是选取的思想相同。

(1)样本的状态:比如在检测车辆的时候,对于沿着车边缘分割出的区域,我们可以确定它是一个正样本,对于没有包含任何车的信息的区域,我们也能判断他们是一个负样本,但是对于包含了车辆部分面积的区域,我们没有办法给出明确的界限来判断样本的正负。

(2)正负样本选取的思路。根据SS算法分割出的区域和真实值标注的区域的IOU的大小来判断。如果大于0.7,判断为正样本。如果小于0.3则判断为负样本。

(3)正负样本的阈值选择:RCNN论文通过实验,给出了判定正负样本IOU 的具体阈值。当把SS算法分割出的区域和我们真实的bbx的IOU大于0.3判断为负样本时,MAP有一个最大的值。对于IOU大于0.7时,认为是一个正样本。对于0.3~0.7之间的样本,则丢掉,不用来训练。

(4)正负样本的数量的分布:通常前景和背景的比例是1:3.正样本即包含要训练的目标的图像,我们认为它是一个前景。负样本即不包含训练对象的图像,我们认为它是一个背景。

2.关于RCNN的输入图像转换(warp)的解释?

       在经过SS算法之后,我们不是直接的将图像作为RCNN的输入,而是进行进一步的处理。这个处理称为图像的转换(warp)

        常见的转化的方式有:

        方式一:在原始图像的周围补充一些元素(一般是像素值为0的元素或是propsoal的像素均值),使得图片能够保持等比例的缩放,直到缩放到论文中RCNN的输入的指定大小(224×224)。这种做法没有考虑到图片上下文的各向同性变形。

        方式二:在找到的框的基础上,对这个框圈起来的区域所构成的图像,填充像素值为0的像素,使得图片能够保持等比例的缩放到224×224。

        方式三:直接不成比例的把图片的长和宽拉到224。所以很多情况下,图片经过这种处理方式之后,形状发生了改变,也就是我们所说的变形。也有说法为:各向异性变形,简单粗暴对图像进行缩放至227×227.



3.为什么要进行转换(warp)?=为什么要将object proposal变形为227×227的?

 因为论文中采用的AlexNet CNN网络的全连接层的输入的维度是固定的。为了适应AlexNet网络的输入图像大小,所以将op变形为227×227.

4.微调的网络的结构是怎么样的?怎样进行微调的?



6.什么是非极大值抑制?

1、非极大抑制的初步认识:


作用:在获得2000×20维的矩阵中,每一行(oject prospoal)对应的第j列(类别)表示的是这个object proposal属于第j类的得分情况。有可能会出现这么一种情况,就是一个车辆目标被多个建议框包围,这个时候就需要非极大值抑制操作去除得分较低的候选框来减少重叠框。

我的理解:就是2000×20的矩阵中有两行或者多行表示的是同一个对象,这个时候就不需要这么多的框进行下一步处理,只需要挑选出最具有代表性的框就可以了。但是有一个疑惑:既然使用非极大抑制剔除了一些框,那么这个对网络的结构有没有影响?比如:矩阵的行是不能变的,但是样本数量变少了,那该怎么办?

2.本文中是如何使用非极大抑制的?

(1)对2000×20未矩阵中每列按照从大到小进行排序。

(2)从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IOU计算,如果IOU大于阈值,则剔除得分较低的建议框,否则认为图像中存在多个同一物体。

(3)从每列次大的得分(得分排在第二的)建议框开始,重复步骤(2)。

(4)重复步骤(3)直到遍历完该列所有的建议框。

(5)遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大抑制。

(6)最后提出各个类别中剩余建议框得分少于该类别阈值的建议框。(--?)

3.什么是IOU交并比?


7.CNN特征如何可视化?

论文对AlexNet CNN 网络中的pool5层的特征进行了可视化。这一层的特征图大小是6×6×256,表明有256种特征,这相当于原始的227×227的图片中有256种195×195的感受视野。这些特征就像是“物体检测器”一样,输入region proposal集合,计算每种特征的激活值,然后进行非极大值抑制,然后展示出每种特征中得分按照从高到低排列的前几个Region Proposal,从而给出了每个特征图表示什么纹理、结构。


8.Detection中,mAP是怎么计算的?

    类别+得分是否大于阈值

- 1.设定阈值。对于每一个类,设置一个阈值,与ground truth相比score大于此值的为正,否则为负。

- 2.确定TP、FP、TN、FN。

与ground truth相比,得到四种类型的proposal:

(1)得到属于次此类别且score大于阈值的proposal。(TP)

(2)得到不属于此类别但score大于阈值的proposal。(FP)

(3)属于此类别但score不大于阈值的proposal。(FN)

(4)不属于此类别但score不大于阈值的proposal。(TN)

- 3.由此计算,precision, recall。

recall = 属于此类别且score大于阈值的proposal/(属于此类别且score大于阈值的proposal+属于此类别但score不大于阈值的proposal=TP/(TP+FN)

precision = 属于此类别且score大于阈值的proposal/(属于此类别且score大于阈值的proposal+不属于此类别但score大于阈值的proposal=TP/(TP+NP)

- 4.通过改变阈值,得到不同组对应的recall和precision。画曲线即可得到AP。

- 5.得到每一个类别对应的AP后,取平均值得到mAP。

其他的相关背景:

1、传统的目标检测算法和深度学习的算法:


传统目标检测算法的流程:

   (1)区域选择。通常使用穷举策略:采用滑动窗口,设置不同大小、不同长宽比例的的窗口对图像进行遍历,时间复杂度高。

   (2)特征提取。(使用的是SIFT特征、HOG特征等。主要要面临形态多样性、光照变化多样性、背景多样性的影响,使得特征鲁棒性差)

    (3)分类器。主要是用的SVM和Adaboost等。

2.计算机视觉领域的目标检测、目标分类、实例分割、目标定位的区别。


整篇文章的参考文献:

https://wenku.baidu.com/view/cb977f29f68a6529647d27284b73f242336c31df.html

http://nbviewer.jupyter.org/github/ouxinyu/ouxinyu.github.io/blob/master/MyCodes/caffe-master/detection.ipynb

https://blog.csdn.net/shenxiaolu1984/article/details/51066975

http://www.360doc.com/content/16/1230/13/25664332_618876745.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值