【目标检测】RCNN算法详解[通俗易懂]

【目标检测】RCNN算法详解[通俗易懂]深度学习用于目标检测的RCNN算法

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.

Region CNN(RCNN)可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更带领团队获得终身成就奖,如今供职于Facebook旗下的FAIR。
这篇文章思路简洁,在DPM方法多年平台期后,效果提高显著。包括本文在内的一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码

思想

本文解决了目标检测中的两个关键问题。

问题一:速度

经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断。

问题二:训练集

经典的目标检测算法在区域中提取人工设定的特征(Haar,HOG)。本文则需要训练深度网络进行特征提取。可供使用的有两个数据库:
一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。
一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。
本文使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测。

流程

RCNN算法分为4个步骤

  • 一张图像生成1K~2K个候选区域
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM 分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置
    这里写图片描述

候选区域生成

使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下:

  • 使用一种过分割手段,将图像分割成小区域
  • 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
  • 输出所有曾经存在过的区域,所谓候选区域

候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

合并规则

优先合并以下四种区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的
  • 合并后,总面积在其BBOX中所占比例大的

第三条,保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。

例:设有区域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。

第四条,保证合并后形状规则。

例:左图适于合并,右图不适于合并。
这里写图片描述

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

多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

作者提供了Selective Search的源码,内含较多.p文件和.mex文件,难以细查具体实现。

特征提取

预处理

使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。
此处有一些细节可做变化:外扩的尺寸大小,形变时是否保持原比例,对框外区域直接截取还是补灰。会轻微影响性能。

预训练

网络结构
基本借鉴Hinton 2012年在Image Net上的分类网络2,略作简化3
这里写图片描述
此网络提取的特征为4096维,之后送入一个4096->1000的全连接(fc)层进行分类。
学习率0.01。

训练数据
使用ILVCR 2012的全部数据进行训练,输入一张图片,输出1000维的类别标号。

调优训练

网络结构
同样使用上述网络,最后一层换成4096->21的全连接网络。
学习率0.001,每一个batch包含32个正样本(属于20类)和96个背景。

训练数据
使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。
考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。

类别判断

分类器
对每一类目标,使用一个线性SVM二类分类器进行判别。输入为深度网络输出的4096维特征,输出是否属于此类。
由于负样本很多,使用hard negative mining方法。
正样本
本类的真值标定框。
负样本
考察每一个候选框,如果和本类所有标定框的重叠都小于0.3,认定其为负样本

位置精修

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

结果

论文发表的2014年,DPM已经进入瓶颈期,即使使用复杂的特征和结构得到的提升也十分有限。本文将深度学习引入检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%
本文的前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用。这两步在GPU上约需13秒。
同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。这两步对于100K类别只需10秒。

以本论文为基础,后续的fast RCNN4(参看这篇博客)和faster RCNN5(参看这篇博客)在速度上有突飞猛进的发展,基本解决了PASCAL VOC上的目标检测问题。


  1. J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013. ↩︎

  2. A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012 ↩︎

  3. 所有层都是串行的。relu层为in-place操作,偏左绘制。 ↩︎

  4. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015. ↩︎

  5. Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015. ↩︎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182533.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Spring batch教程 之 配置Step「建议收藏」

    Spring batch教程 之 配置Step「建议收藏」正如在BatchDomainLanguage中叙述的,Step是一个独立封装域对象,包含了所有定义和控制实际处理信息批任务的序列。这是一个比较抽象的描述,因为任意一个Step的内容都是开发者自己编写的Job。一个Step的简单或复杂取决于开发者的意愿。一个简单的Step也许是从本地文件读取数据存入数据库,写很少或基本无需写代码。一个复杂的Step也许有复杂的业务规则(取决于所实现的方式),并作

  • php实现简单工厂模式「建议收藏」

    php实现简单工厂模式「建议收藏」通过简单工厂模式的开发,能够较大程度的降低代码间的耦合度,提高代码的可扩展性。下面是做了一个四则运算计算器的简单工厂模式。先写一个工厂类,加、减、乘、除。。。。这些运算均可在工厂类里去生产。<?php require’./Calculate.class.php’; classOperationFactory { publicstaticfunctioncreat…

  • 中国工商银行基金定投[通俗易懂]

    中国工商银行基金定投[通俗易懂]http://www.icbc.com.cn/personal/detail_financing.jsp?column=%B8%F6%C8%CB%BD%F0%C8%DA%3E%CD%B6%D7%CA%

  • 烽火hg6543c1光猫超级密码_电信光猫hs8145c5超级密码

    烽火hg6543c1光猫超级密码_电信光猫hs8145c5超级密码坐标杭州,宽带移机。师傅给我换了个战未来的,支持万兆的光猫…以前我是依据型号网上搜索搞到超级管理员用户就行桥接的,给我换了这个新光猫后,自己死活折腾不出来…以前大家都习惯用超级管理员进入光猫,改桥接模式利用光猫的安全漏洞花式获取超级管理员密码,什么查看网络报文、telnet啊等等手段博主要告诉大家的是,这些歪门邪道未来都是不可取的,光猫更新总归是要修复这些漏洞的。而且光猫超级管理员这玩意,电信的客服、维修师傅都不用,他们都不知道有这玩意,我们折腾有啥意义呢。大家要知道:电信是允许大家改用桥接模式的。直接打1

  • tomcat启动startup.bat一闪而过

    遇到很多次运行startup.bat后,一个窗口一闪而过的问题,但是从来没去纠正怎样修改配置才是正确的,现在从网上查阅的资料整理如下:tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME与JAVA_HOME的信息,CATALINA_HOME即tomcat的主目录,JAVA_HOME即java安装的主目录,jdk的主目录。首先,要在环境变量处,配置JAVA_HOM

  • Anaconda与Pycharm的辨析[通俗易懂]

    Anaconda与Pycharm的辨析[通俗易懂]Anaconda与Pycharm的辨析Anaconda是python文件的一个包管理器,可以用它下载python文件的相关库和包,制作成python编程所需要的环境(模块、包、库)Pycharm是python文件的集成开发环境,在Pycharm上可以进行python文件的开发与调试,像VisualStudio之于C++,Eclipse之于Java。Pycharm里面也有下载python文件的相关库和包的功能,但很多库和包Pycharm可能因为网络及版本问题不能下载安装故Pycharm和Anacon

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号