R-CNN模型是怎样的
R-CNN模型是怎样的
这篇文章主要讲解了“R-CNN模型是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R-CNN模型是怎样的”吧!
摘要
目标识别与检测数据库:PASCAL VOC在12年以前一直进展缓慢,一些新提出的优化方法只是把之前的方法线性地结合在一起。Ross Girshick提出的R-CNN直接将识别准确率提高了30%。作者主要利用两个因素:一个是CNN可以应用于区域候选,以便定位和分割物体;另一个是当标记的训练数据很少时,辅助任务的预训练加以fine-tuning,可以显著提高性能。(when labeled training data is scarce, supervised pre-training for an auxiliary task, followed by domain-specific fine-tuning, yields a significant performance boost.)
1. 介绍
R-CNN提出以前,各式各样的目标检测算法大都基于SIFT和HOG算子,二者都是 blockwise orientation histograms,我们可以大致地将它们与哺乳动物视觉联系起来。但大脑的识别过程应该是多层传递的,因此识别程序也应该有一个多层结构。基于此,Fukushima提出了“neocognitron”方法,Lecun也提出了“missing algorithm”。
鉴于13年CNN的火爆,作者认为:CNN在图像分类上的结果也可以扩展应用到PASCAL VOC的挑战上。为了达成目标,需要解决两个问题:
用深度网络定位目标。目标检测首先需要定位物体(localization)。定位的实现方式一般为滑动窗检测(用窗口截取图像的一部分,每次都做一个定位回归),但对于较大感受野和步长的CNN是一个不小的挑战。
用小容量的标记数据训练大容量的网络。解决方式上面其实已经说了,就是在ILSVRC这个大的辅助训练集上进行监督训练,接着在PASCAL上domain-specific fine-tuning。
另外,作者的系统也十分有效:The only class-specific computations are a reasonably small matrix-vector product and greedy non-maximum suppression。
作者还发现,即使去除94%的参数,CNN模型检测的准确率只会有略微的下降。通过一个检测分析工具,发现只需要通过简单的边界框回归就可以显著地降低定位错误率。
2. R-CNN模型介绍
2.1 模型设计
整个检测系统分为三个部分:
生成独立分类的候选区域。作者的方法是use selective search to enable a controlled comparison with prior
用CNN,对每个候选区域提出固定长度的特征向量。输入的图片固定为227*227,且提前进行mean-subtracted处理。之后用一个5卷积层,2全连接层的CNN来提取4096维特征向量。
用SVM对特征向量进行分类。
2.2 Test-time detection
一开始,系统先用selective search提取2000个候选区域,并将其warp到277*277大小,进入CNN提取特征,并用SVM分类。最后,再用 greedy non-maximum suppression 把那些高度重叠的框剔除。
R-CNN运行时间很短,这归功于两点:1.CNN对于每个分类的参数都是共享的;2.与其他方法相比,4096维的特征向量算是很小的了。
运行结果是,即使有100k个分类,一张图在多核CPU上也只要10秒;生成的低维特征图只占1.5GB。
2.3 Training
Supervised pre-training:先将CNN在ILSVRC 2012上进行预训练(with image-level annotations (i.e., no bounding box labels)),框架采用的是Caffe。由于训练过程的简单化,作者不小心就达到了ILSVRC最低错误率;
Domain-specific fine-tuning:微调过程,以0.001的学习速率进行SGD训练。对某个分类只要IOU>0.5就视该边框为正值。每次SGD迭代都采样38个正边框和96个背景。
Object category classifiers:对某个分类,高IOU和IOU都很好区分,但IOU处于中值时则很难定义生成的候选框是否包含了该物体。作者设定了一个阈值0.3,低于它的一律视为背景(负数)。另外,每个分类都优化一个SVM。由于负样本很多,因此还采用了hard negative mining方法
2.4 Results on PASCAL VOC 2010-12
作者提交了两个版本,一个没有bounding box regression(RCNN),一个有(RCNN BB),结果如下:
简而言之,就是MAP显著提高了不少(从35.1%到53.7%),而且运行时间也短。
感谢各位的阅读,以上就是“R-CNN模型是怎样的”的内容了,经过本文的学习后,相信大家对R-CNN模型是怎样的这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是恰卡编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
推荐阅读
-
在Python中,将K添加到列元组列表中的最小元素
处理数据集涉及识别特定列中的最小值并通过添加常量值(K)来更新它。通过实施优化的解决方案,我们可以有效地执行此操作,这对于数据...
-
使用switch case语句编写的C程序,用于计算几何图形的面积
#includevoidmain(){intfig_code;floatside,base,length,...
-
如何使 C# 代码可重用?
要在C#中使代码可重用,请使用接口。接口定义属性、方法和事件,这些成员是接口的成员。接口只包含成员的声明。派生类负责定义成员。这通...
-
C# 中的覆盖和隐藏有什么区别?
方法隐藏在C#中也称为隐藏。父类的方法可供子类使用,无需在遮蔽中使用override关键字。子类有其自己版本的相同函数。在...
-
在Java中使用示例双倍longValue()函数
Java是一种强大的面向对象语言,可以对各种数据类型进行高度的控制和精确度。其中一种功能是doublelongValue(),...
-
如何在Java中定义JSON字段名称的命名约定?
TheFieldNamingPolicycanbeusedtodefineafewstandardnaming...
-
Servlet中的HttpSession接口
在JavaWeb开发领域,了解HttpSession接口是创建动态和响应式Web应用程序的关键。在本文中,我们将探讨...
-
使用while循环查找自然数之和的Java程序
自然数之和可以使用编程语言中的不同迭代语句来计算。迭代语句是执行一组特定代码行直到循环语句中的条件失败的语句。在本文中,我们将讨论...
-
我们可以将Java数组转换为列表吗?
我们可以使用Arrays.asList()方法轻松地将Java数组转换为List。语法publicstaticLi...
-
Java中如何在不使用任何外部库的情况下读取网页内容?
TheURLclassofthejava.netpackagerepresentsaUniformResour...