目标检测:R-CNN学习笔记

引言

R-CNN (Region-based Convolution Networks)-将CNN引入目标检测的开山之作

论文链接:Rich feature hierarchies for accurate object detection and semantic segmentation

【Abstract】 过去几年,在权威数据集PASCAL上,物体检测的效果已经达到一个稳定水平。效果最好的方法是融合了多种图像低维特征和高维上下文环境的复杂结合系统。在这篇论文里,我们提出了一种简单并且可扩展的检测算法,可以将mAP在VOC2012最好结果的基础上提高30%以上——达到了53.3%。我们的方法结合了两个关键的因素:
(1)将大型卷积神经网络(CNNs)应用于自下而上的候选区域以定位和分割物体。
(2)当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的调优,就可以产生明显的性能提升。
因为我们结合了CNNs和候选区域,该方法被称为R-CNN:Regions with CNN features。我们也把R-CNN效果跟OverFeat比较了下(OverFeat是最近提出的在与我们相似的CNN特征下采用滑动窗口进行目标检测的一种方法),结果发现RCNN在200类ILSVRC2013检测数据集上的性能明显优于OVerFeat。本文整个系统源码在:http://www.cs.berkeley.edu/˜rbg/rcnn。
(译者注:已失效,新地址:https://github.com/rbgirshick/rcnn)

创新点

  • 采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力;
  • 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。

背景介绍

  1. 近10年以来,以人工经验特征为主导的物体检测任务mAP【物体类别和位置的平均精度】提升缓慢;
  2. 随着ReLu激励函数、dropout正则化手段和大规模图像样本集ILSVRC的出现,在2012年ImageNet大规模视觉识别挑战赛中,Hinton及他的学生采用CNN特征获得了最高的图像识别精确度;
  3. 上述比赛后,引发了一股“是否可以采用CNN特征来提高当前一直停滞不前的物体检测准确率“的热潮。

1. Region Proposal

候选区域(Region Proposal):可以解决滑动窗口的问题。是预先找出图中目标可能出现的位置。它利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千甚至几百)的情况下保持较高的召回率(Recall)。

常用的Region Proposal有(详见"What makes for effective detection proposals?"):

  • Selective Search
  • Edge Boxes

在这里讲下Selective Search主要思想

  1. 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
  2. 查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
  3. 输出所有曾经存在过的区域,所谓候选区域

其中合并规则如下: 优先合并以下四种区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的: 保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域

例:设有区域a-b-c-d-e-f-g-h。
较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。
不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh

  • 合并后,总面积在其BBOX中所占比例大的: 保证合并后形状规则。

上述四条规则只涉及区域的颜色直方图、梯度直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。

2. R-CNN算法

0.jpeg-37.6kB

2.1 算法流程:

(1) 输入测试图像
(2) 候选区域生成:利用selective search算法在图像中从下到上提取2000个左右的Region Proposal
(3) 特征提取:将每个Region Proposal缩放(warp)成227x227的大小并输入到CNN(AlexNet)网络,将CNN的fc7层的输出作为特征
(4) 类别判断:将每个Region Proposal提取到的CNN特征输入到SVM进行分类判断
(5) 位置精修:使用回归器精细修正候选框位置

【注意】

  • 上面的框架图是测试的流程图,要进行测试我们首先要训练好提取特征的CNN模型,以及用于分类的SVM:使用在ImageNet上预训练的模型(AlexNet/VGG16)进行微调得到用于特征提取的CNN模型,然后利用CNN模型对训练集(PASCAL VOC 2007)提特征训练SVM。
  • 对每个Region Proposal缩放到同一尺度是因为CNN全连接层输入需要保证维度固定。
  • 上图少画了一个过程——对于SVM分好类的Region Proposal做边框回归(bounding-box regression),边框回归是对region proposal进行纠正的线性回归算法,为了让region proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。

2.2 算法特点

(1) 使用Selective Search提取Proposes,然后利用CNN等识别技术进行分类。
(2) 使用识别库进行预训练,而后用检测库调优参数。
(3) 使用SVM代替了CNN网络中最后的Softmax,同时用CNN输出的4096维向量进行Bounding Box回归。
(4) 流程前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用;同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。

2.3 各阶段详解

首先对每一个输入的图片产生近2000个不分种类的候选区域(region proposals),然后使用CNNs从每个候选框中提取一个固定长度的特征向量(4096维度),接着对每个取出的特征向量使用特定种类的线性SVM进行分类。也就是总个过程分为三个程序:a、找出候选框;b、利用CNN提取特征向量;c、利用SVM进行特征向量分类。

2.3.1 候选框搜索阶段

当我们输入一张图片时,我们要搜索出所有可能是物体的区域,这里采用的就是前面提到的Selective Search方法,通过这个算法我们搜索出2000个候选框。然后从上面的总流程图中可以看到,搜出的候选框是矩形的,而且是大小各不相同。然而CNN对输入图片的大小是有固定的,如果把搜索到的矩形选框不做处理,就扔进CNN中,肯定不行。因此对于每个输入的候选框都需要缩放到固定的大小。下面我们讲解要怎么进行缩放处理,因为AlexNet输入大小为227x227,因此下一阶段CNN所需要的输入图片大小是个正方形图片227*227。因为我们经过selective search 得到的是矩形框,paper试验了两种不同的处理方法:

45.png-310.9kB

(1)各向异性缩放

这种方法很简单粗暴,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227,如图(D)所示。

(2)各向同性缩放

因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是作者也测试了“各向同性缩放”方案。有以下办法
A、先扩充后裁剪: 考虑context【图像中context指RoI周边像素】的各向同性变形。直接在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;如上图(B)所示;
B、先裁剪后扩充:不考虑context的各向同性变形。先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值),如上图©所示;
C、对于上面的异性、同性缩放,文献还有个padding处理,上面的示意图中第1、3行就是结合了padding=0,第2、4行结果图采用padding=16的结果。经过最后的试验,作者发现先padding=16扩充后,然后再采用“各向异性缩放”到固定大小,能使mAP提升3-5%。
(备注:候选框的搜索策略作者也考虑过使用一个滑动窗口的方法,然而由于更深的网络,更大的输入图片和滑动步长,使得使用滑动窗口来定位的方法充满了挑战。)

2.3.2 CNN特征提取阶段

算法实现

a、网络结构设计阶段

网络架构两个可选方案:第一选择经典的Alexnet;第二选择VGG16。经过测试Alexnet精度为58.5%,VGG16精度为66%。VGG这个模型的特点是选择比较小的卷积核、选择较小的跨步,这个网络的精度高,不过计算量是Alexnet的7倍。后面为了简单起见,我们就直接选用Alexnet,并进行讲解;Alexnet特征提取部分包含了5个卷积层、2个全连接层,在Alexnet中p5层神经元个数为9216、 f6、f7的神经元个数都是4096,通过这个网络训练完毕后,最后提取特征每个输入候选框图片都能得到一个4096维的特征向量。

46.png-16kB

47.png-173.8kB

b、网络有监督预训练阶段 (图片数据库:ImageNet ILSVC )

参数初始化部分:物体检测的一个难点在于,物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。这种情况下,最好的是采用某些方法,把参数初始化了,然后在进行有监督的参数微调,这里文献采用的是有监督的预训练(pre-traning)。所以paper在设计网络结构的时候,是直接用Alexnet的网络,然后连参数也是直接采用它的参数,作为初始的参数值,然后再fine-tuning训练。网络优化求解时采用随机梯度下降法,学习率大小为0.001;

48.png-48.4kB

C、fine-tuning阶段 (图片数据库: PASCAL VOC)

我们接着采用 selective search 搜索出来的候选框 (PASCAL VOC 数据库中的图片) 继续对上面预训练的CNN模型进行fine-tuning训练。假设要检测的物体类别有N类,那么我们就需要把上面预训练阶段的CNN模型的最后一层给替换掉,替换成N+1个输出的神经元(加1,表示还有一个背景) (即将ImageNet中的1000类换成VOC中的20类 + 1background = 21),然后这一层直接采用参数随机初始化的方法,其它网络层的参数不变;接着就可以开始继续SGD训练了。开始的时候,SGD学习率选择0.001(为了保证训练只是对网络的微调而不是大幅度的变化),在每次训练的时候,我们batch size大小选择128,其中32个是正样本、96个是负样本(这么做的主要原因还是正样本图片太少了)。

49.png-50.6kB

关于正负样本问题:
一张照片我们得到了2000个候选框。然而人工标注的数据一张图片中就只标注了正确的bounding box,我们搜索出来的2000个矩形框也不可能会出现一个与人工标注完全匹配的候选框。因此在CNN阶段我们需要用IOU为2000个bounding box打标签。如果用selective search挑选出来的候选框与物体的人工标注矩形框(PASCAL VOC的图片都有人工标注)的重叠区域IoU大于0.5,那么我们就把这个候选框标注成物体类别(正样本),否则我们就把它当做背景类别(负样本)。

Question 1:CNN特征如何可视化?

Answer:文中采用了巧妙的方式将AlexNet CNN网络中Pool5层特征进行了可视化。该层的size是6×6×256,即有256种表示不同的特征,这相当于原始227×227图片中有256种195×195的感受视野【相当于对227×227的输入图像,卷积核大小为195×195,padding=4,step=8,输出大小(227-195+2×4)/8+1=6×6】;
文中将这些特征视为”物体检测器”,输入10million的Region Proposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制,最后展示出每种6×6特征即“物体检测器”前几个得分最高的Region Proposal,从而给出了这种6×6的特征图表示了什么纹理、结构,很有意思。

Question 2:反正CNN都是用于提取特征,那么我直接用Alexnet做特征提取,省去fine-tuning阶段可以吗?

Answer:这个是可以的,你可以不需重新训练CNN,直接采用Alexnet模型,提取出p5、或者f6、f7的特征,作为特征向量,然后进行训练svm,只不过这样精度会比较低。

Question 3:没有fine-tuning的时候,要选择哪一层的特征作为cnn提取到的特征呢?我们有可以选择p5、f6、f7,这三层的神经元个数分别是9216、4096、4096。从p5到p6这层的参数个数是:40969216 ,从f6到f7的参数是40964096。那么具体是选择p5、还是f6,又或者是f7呢?

Answer:文献paper给我们证明了一个理论,如果你不进行fine-tuning,也就是你直接把Alexnet模型当做万金油使用,类似于HOG、SIFT一样做特征提取,不针对特定的任务。然后把提取的特征用于分类,结果发现p5的精度竟然跟f6、f7差不多,而且f6提取到的特征还比f7的精度略高;如果你进行fine-tuning了,那么f7、f6的提取到的特征最后训练的svm分类器的精度就会飙涨。

因此,**如果不针对特定任务进行fine-tuning,而是把CNN当做特征提取器,卷积层所学到的特征其实就是基础的共享特征提取层,就类似于SIFT算法一样,可以用于提取各种图片的特征,而f6、f7所学习到的特征是用于针对特定任务的特征。**打个比方:对于人脸性别识别来说,一个CNN模型前面的卷积层所学习到的特征就类似于学习人脸共性特征,然后全连接层所学习的特征就是针对性别分类的特征了。

Question 4: CNN训练的时候,本来就是对bounding box的物体进行识别分类训练,是一个端到端的任务,在训练的时候最后一层softmax就是分类层。那么为什么作者闲着没事干要先用CNN做特征提取(提取fc7层数据),然后再把提取的特征用于训练svm分类器

Answer:这个是因为svm训练和cnn训练过程的正负样本定义方式各有不同,导致最后采用CNN softmax输出比采用svm精度还低。事情是这样的:

  1. cnn在训练的时候,对训练数据做了比较宽松的标注,比如一个bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练cnn;
  2. 采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据,所以在CNN训练阶段我们是对Bounding box的位置限制条件限制的比较松(IOU只要大于0.5都被标注为正样本了);
  3. 然而svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当bounding box把整个物体都包含进去了,我们才把它标注为物体类别,然后训练svm,具体请看下文。

2.3.3 SVM训练、测试阶段

1、训练阶段:

对每个类都训练一个线性的SVM分类器,训练SVM需要正负样本文件,这是一个二分类问题,我么假设我们要检测车辆。我们知道只有当bounding box把整量车都包含在内,那才叫正样本;如果bounding box 没有包含到车辆,那么我们就可以把它当做负样本。但问题是当我们的检测窗口只有部分包含物体,那该怎么定义正负样本呢?作者同样是使用IoU阈值的方法,计算每一个region proposal与标准框的IoU,作者测试了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个候选框,可以得到20004096这样的特征向量矩阵,然后我们只需要把这样的一个矩阵与svm权值矩阵4096N点乘(N为分类类别数目,因为我们训练的N个svm,每个svm包含了4096个权值w),就可以得到结果了。

50.jpg-18.6kB

得到的特征输入到SVM进行分类看看这个feature vector所对应的region proposal是需要的物体还是无关的实物(background) 。 排序,canny边界检测之后就得到了我们需要的bounding-box。

位置精修:目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。 回归器:对每一类目标,使用一个线性脊回归器进行精修。正则项λ=10000。 输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本:判定为本类的候选框中和真值重叠面积大于0.6的候选框。

51.png-68.8kB

Question 5:为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?

Answer:微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;
SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

2、测试阶段:

  • 输入一张多目标图像,使用selective search的方法在测试图片上提取2000个region propasals 。
  • 将每个region proposals周围加上16个像素值为region proposals像素平均值的边框,然后缩放到227x227
  • 将所有region proposals像素减去该region proposals像素平均值后【预处理操作】,再依次将每个227×227的region proposals输入到CNN中正向传播,将最后一层得到的特征提取出来得到4096维的feature vector【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵。
  • 然后将2000×4096维特征与21个SVM组成的权值矩阵4096×21相乘【21种分类,SVM是二分类器,则有21个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分。即对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行判断,当前region所对应的实物是background还是所对应的物体类别,得到测试图片中对于所有region proposals的对于这一类的分数(score)
  • 对上述2000×20维矩阵中每一列即每一类进行贪心的非极大值抑制(NMS)抑制剔除重叠框(因为有些时候并不是说这些region中所包含的实物就一点都不存在,有些包含的多有些包含的少,包含的多少还需要合适的bounding-box),得到该列即该类中得分最高的一些。
  • 进行回归操作,对这些框进行canny边缘检测,最终得到每个类别的修正后的得分最高的bounding box。

这里讲解一下非极大值抑制(NMS)

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

举个例子来加以说明:定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。非极大值抑制:先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。
(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;
(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
就这样一直重复,找到所有被保留下来的矩形框。

  1. 非极大值抑制顾名思义就是抑制不是极大值的元素,搜索局部的极大值。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。
    这里不讨论通用的NMS算法,而是用于在目标检测中用于提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。

  2. canny detection(canny NMS):
    对梯度幅值进行非极大值抑制:图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不能说明该点就是边缘(这仅仅是属于图像增强的过程)。在Canny算法中,非极大值抑制是进行边缘检测的重要步骤,通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点。

52.png-496.9kB

由上图可知,要进行非极大值抑制,就首先要确定像素点C的灰度值在其8值邻域内是否为最大。图中蓝色的线条方向为C点的梯度方向,这样就可以确定其局部的最大值肯定分布在这条线上,也即除了C点外,梯度方向的交点dTmp1和dTmp2这两个点的值也可能会是局部最大值。因此,判断C点灰度与这两个点灰度大小即可判断C点是否为其邻域内的局部最大灰度点。如果经过判断,C点灰度值小于这两个点中的任一个,那就说明C点不是局部极大值,那么则可以排除C点为边缘。这就是非极大值抑制的工作原理。

作者认为,在理解的过程中需要注意以下两点:
1)非最大抑制是回答这样一个问题:“当前的梯度值在梯度方向上是一个局部最大值吗?” 所以,要把当前位置的梯度值与梯度方向上两侧的梯度值进行比较;
2)梯度方向垂直于边缘方向。

但实际上,我们只能得到C点邻域的8个点的值,而dTmp1和dTmp2并不在其中,要得到这两个值就需要对该两个点两端的已知灰度进行线性插值,也即根据图中的g1和g2对dTmp1进行插值,根据g3和g4对dTmp2进行插值,这要用到其梯度方向,这是上文Canny算法中要求解梯度方向矩阵Thita的原因。

完成非极大值抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的局部灰度极大值点可设置其灰度为128。根据文中的具体测试图像可以看出,这样一个检测结果还是包含了很多由噪声及其他原因造成的假边缘。因此还需要进一步的处理。

Question 6:为什么要采用回归器?回归器是什么有什么用?

Answer:首先要明确目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。这里先解释一下什么叫定位精度:定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。采用回归器是为了对建议框进行校正,使得校正后的Region Proposal与selective search更接近, 以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。

3. Conclusion

  1. PASCAL VOC 2010测试集上实现了53.7%的mAP;

  2. PASCAL VOC 2012测试集上实现了53.3%的mAP;

  3. 计算Region Proposals和features平均所花时间:13s/image on a GPU;53s/image on a CPU。

最近几年,物体检测陷入停滞,表现最好的检测系统是复杂的将多低层级的图像特征与高层级的物体检测器环境与场景识别相结合。本文提出了一种简单并且可扩展的物体检测方法,达到了VOC2012数据集相对之前最好性能的30%的提升。
  我们取得这个性能主要通过两个理解:第一是应用了自底向上的候选框训练的高容量的卷积神经网络进行定位和分割物体。另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。我们展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后采用稀少数据(检测)去调优定位任务的网络。我们猜测“有监督的预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。
  最后,我们注意到通过使用经典的组合从计算机视觉和深度学习的工具实现这些结果(自底向上的区域候选框和卷积神经网络)是重要的。而不是违背科学探索的主线,这两个部分是自然而且必然的结合。

4. 存在的问题

  1. 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器。

  2. 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件。

  3. 速度慢: 使用GPU, VGG16模型处理一张图像需要47s

  4. 测试速度慢:每个候选区域需要运行整个前向CNN计算

  5. SVM和回归是事后操作:在SVM和回归过程中CNN特征没有被学习更新针对速度慢的这个问题,SPP-NET给出了很好的解决方案。

R-CNN有些麻烦:要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做bounding-box回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。

有一个来自知乎上的观点:因为rcnn首先需要在AlexNet上进行classification的训练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前向计算,第一次得到建议框特征给SVM分类识别,第二次对非极大值抑制后的建议框再次进行CNN前向计算获得Pool5特征,以便对建议框进行回归得到更精确的bounding-box,这里文中并没有说是怎么做的,也可能在计算2k个建议框的CNN特征时,在硬盘上保留了2k个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费大量磁盘空间。


References:

  1. 机器视觉目标检测补习贴之R-CNN系列 — R-CNN, Fast R-CNN, Faster R-CNN
  2. https://blog.csdn.net/u011534057/article/details/51218250
  3. https://blog.csdn.net/hjimce/article/details/50187029
  4. R-CNN论文详解
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值