比特趋势

标题: 深度学习目标检测(object detection)系列(一) R-CNN [打印本页]

作者: admin    时间: 2019-1-20 13:09
标题: 深度学习目标检测(object detection)系列(一) R-CNN
R-CNN简介

R-CNN提出于2014年,应当算是卷积神经网络在目标检测任务中的开山之作了,当然同年间还有一个overfeat算法,在这里暂不讨论。 
在之后的几年中,目标检测任务的CNN模型也越来越多,实时性与准确率也越来越好,但是最为经典的模型还是很值得学习的。

 

那么下面就正式开始吧: 
对于R-CNN模型,个人是这样理解,它其实是将4个应用于不同任务的已有的算法很好的结合了起来,最终在目标检测任务中取得了不错的效果,这种结合更像是偏向于工程的方法,而不是在算法上的一种突破,当然在后续的Fast-RCNN与Faster-RCNN中模型逐步完善并整合成为一个模型,但是在R-CNN中是没有的。 
所以R-CNN由4个部分构成,它们分别是: 
1.区域建议算法(ss) 
2.特征提取算法(AlexNet) 
3.线性分类器(线性SVM) 
4.边界框修正回归模型(Bounding box)

 

区域建议算法:

首先是区域建议(Region Proposal)算法,这个东西在CNN之前就已经有了,而且算法不止一种,ss(selective search)算法是比较著名的一个,此外还有EdgeBox,MSER,MCG等等算法。

那么ss算法在R-CNN中有什么用呢?这要从目标检测任务开始谈起,在一副图像中要实现目标检测任务,一种最简单的思路是如果建立滑动窗,对每次滑动窗提取出来的图像做分类,如果分类结果恰好是目标的话,就实现了检测啦,目标的属性由分类器给,目标的位置由滑动窗给。但是考虑到一次滑动遍历产生的子图像数量就不小了,同时还有不同步长和窗口尺寸的情况,此时产生的待分类图像是非常多的,这种方式显然没什么实用价值,于是就有了ss算法,一种根据图像自身信息产生推荐区域的算法,它大概会产生1000-2000个潜在目标区域,照比滑动遍历的方式,这个数量已经减少了很多了。

 

特征提取算法:

这里的特征提取算法其实就是卷积神经网络,R-CNN中使用的是AlexNet,但是作者(Ross)并没有把AlexNet当做分类器来使用,而是只用了网络的特征层做ss算法输出的图像的特征提取工作,然后第7层特征给了SVM分类器,第五次特征给了Bounding Box回归模型。

 

线性分类器:

R-CNN使用了线性SVM分类器,这个没啥好说的,机器学习中很牛的算法了,需要说明的是,目标检测任务是有分类的功能的,比如一个任务是检测猫和狗,那么除了要框出猫和狗的位置之外,也需要判断是猫还是狗,这也是SVM在R-CNN中的作用。所以待检测物体有几类,那么就应该有几个二分类的SVM分类器,在上面的例子中,就需要两个二分类分类器了,分别是“猫-非猫”模型和“狗-非狗”模型,在R-CNN中,分类器有20个,它的输入特征是AlexNet提取到的fc7层特征。

 

边界框修正回归模型: 
Bounding box也是个古老的话题了,计算机视觉常见任务中,在分类与检测之间还有一个定位任务,在一副图像中只有一个目标,然后把这个目标框出来,用到的就是Bounding box回归模型。 
(, 下载次数: 0)