【目标检测】RCNN算法详解

2023-05-16

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. ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【目标检测】RCNN算法详解 的相关文章

  • Chroma向量数据库

    嵌入向量 xff08 vector embedding xff09 是表示任何类型数据的 A I 原生方式 xff0c 使它们非常适合与各种 A I 驱动的工具和算法一起使用 它们可以表示文本 图像 xff0c 很快还可以表示音频和视频 有
  • 几何深度学习 - 利用几何先验知识的深度学习

    深度学习很难 虽然通用逼近定理表明足够复杂的神经网络原则上可以逼近 任何东西 xff0c 但不能保证我们可以找到好的模型 尽管如此 xff0c 通过明智地选择模型架构 xff0c 深度学习取得了巨大进步 这些模型架构对归纳偏差进行编码 xf
  • 胶囊网络(Capsule Network)的TensorFlow实现

    现在我们都知道Geoffrey Hinton的胶囊网络 xff08 Capsule Network xff09 震动了整个人工智能领域 xff0c 它将卷积神经网络 xff08 CNN xff09 的极限推到一个新的水平 网上已经有很多的帖
  • 【laravel5.1】Blade模板继承简要使用

    模板继承什么用 xff1f 自然是增强基础页面的复用 xff0c 有利于页面文档的条理 xff0c 也便于更改多处使用的内容 xff0c 如页头 页脚 1 用法概要 64 include 39 common header 39 包含子视图
  • PLC梯形图编程入门

    梯形图 xff08 LAD xff09 是PLC编程的最佳可视化语言 xff0c 它看起来非常类似于继电器电路图 xff0c 因此如果 你对继电器控制和电子电路有所了解的话 xff0c 那么学起来会非常容易 xff01 在这个教程中 xff
  • 软件开发入门自学指南

    每天都看到很多对编程感兴趣的人在问是不是可以自学软件开发 xff0c 或者应该怎么自学编程才能入门 在这篇文章里 xff0c 我将尝试重现一个初学者在学习计算机编程时可能会碰到的问题 xff0c 并尽量提供相应的解决思路 xff0c 希望对
  • 回望2014

    时光荏苒 xff0c 流光飞逝 xff0c 一转眼的时间又是一年 回望一下2014年 xff0c 这一年应该是成长的一年 xff0c 是温暖的一年 xff0c 也是丰收的一年 在这过去的一年里 xff0c 大概可以从工作和生活两方面说说吧
  • 2011,我的IT我的梦

    代码不过十万行 xff0c 别娶媳妇别买房 xff0c 这句诙谐的语言 xff0c 形象的描述了IT行业对程序员的最基本IT素质的要求 xff0c 很荣幸的是 xff0c 我在大学时代就完成了这个基本的任务 xff0c 因此我人生的第一份I
  • LitePal编译出错Error:Unsupport type 'dbname'解决方法

    使用LitePal前 xff0c 需要先配置一下第三方库 xff0c 我们可以通过两种方式来配置 xff1a 1 通过官网下载链接 在官方下载地址上下载需要的版本库 xff0c 然后放到工程目录下的libs文件夹中 xff0c 并右键jar
  • select 建立了索引但是不走索引

    create index indexName on A abc 此时select abc from A 不走索引 可用如下方法让搜索走索引 select distinct abc from A a where exists select 1
  • 关于conda install命令出现CondaHTTPError问题

    在安装过程中 xff0c 安装包时报错 xff1a 打开C Users 用户名 condarc文件 xff0c 没有则创建 xff0c 复制如下内容保存 xff08 一行不能多 xff0c 一行不能少 xff09 xff1a channel
  • 【MySQL技术内幕】15-InnoDB存储引擎文件

    之前介绍的文件都是 MySQL数据库本身的文件 和存储引擎无关 除了这些文件外 每个表存储引擎还有其自己独有的文件 本节将具体介绍与 InnoDB存储引擎密切相关的文件 这些文件包括重做日志文件 表空间文件 1 表空间文件 InnoDB采用
  • Linux进程的睡眠和唤醒

    在Linux中 xff0c 仅等待CPU时间 的进程称为就绪进程 xff0c 它们被放置在一个运行队列中 xff0c 一个就绪进程的状态标志位为TASK RUNNING 一旦一个运行中的进程时间片用完 xff0c Linux内核的调度器会剥
  • mkdir命令详解

    mkdir命令来自于英文词组 make directories 的缩写 xff0c 其功能是用来创建目录文件 使用简单 xff0c 但需要注意若要创建的目标目录已经存在 xff0c 则会提示已存在而不继续创建 xff0c 不覆盖已有文件 而
  • 如何在 MySQL 中创建超级用户

    如何在 MySQL 中创建超级用户 xff1f 本指南将引导您完成在 MySQL 中创建新用户并使其成为具有类似于 root 的数据库访问权限的超级用户的步骤 1 首先 xff0c 你必须使用具有CREATE USER权限的root用户登录
  • 统计员工年度,月度的加班和调休统计

    根据需求 xff0c 写了一个统计部门员工年度的加班与调休统计报表 实现结果如下 xff1a 页面代码如下所示 xff1a 64 model IEnumerable lt lvElecCenter Areas HR Models Leave
  • 我的2014-前进在梦想的道路上

    离2014的结束还有2天 xff0c 一年终去 xff0c 感触颇多 xff1a 或是振奋 xff0c 或是感动 xff0c 或是美好 停下手头繁忙的工作 xff0c 静下心来 xff0c 我们一起 来 盘点这一年的工作和生活 这一年你是否
  • 云计算知识3:弹性计算云EC2的基本架构

    弹性计算云EC2主要特性 灵活性 xff1a EC2允许用户对运行实例类型 数量自行配置 xff0c 还可以选择实例运行的地理位置 xff0c 根据用户的需求随时改变实例的使用数量 低成本 xff1a EC2使得企业不必为暂时的业务增长而购
  • 如何将一个网络分为两个子网、如何通过已知IP和子网掩码计算其同一网段的主机IP

    IPV4的IP地址格式通常表示为xxx xxx xxx xxx xff0c 其中xxx为十进制数 xff0c 取值范围是 0 xff0c 255 xff0c 若用16进制表示则为xx xx xx xx xff0c 其中xx的取值范围是 0
  • Unity3D 人称设置(第一人称视角、第三人称视角)

    设置第一人称视角 1 把物体的坐标和摄像机的坐标设置成一样的 xff0c 这样摄像机就在物体内部 xff0c 就是第一人称的视角 2 把摄像机拖拽进物体对象内 xff0c 摄像机变成物体的子对象 xff0c 这样摄像机就能跟着物体一起移动

随机推荐

  • Unity3D 射击游戏练习实例

    知识点 xff1a 刚体组件 xff08 rigidbody xff09 xff0c 受力和碰撞的组件触发器 xff08 Trigger xff09 xff0c 开启后物体碰撞效果取消 xff0c 但仍会返回碰撞消息复制物体对象 xff1a
  • Cocos2dx 环境搭建

    Cocos2dx 环境搭建 准备软件和工具包 xff0c 参考 xff1a Cocos2dx 入门学习准备安装visual studio 安装Python2 7 xff08 直接默认下一步就可以 xff0c 要注意Python安装的路径 x
  • 缺失MSVCR相关文件怎么办

    根据系统的提示 xff0c 看缺失的是哪个文件 xff0c 正常是msvcr100 120 dll在百度上搜索对应文件下载把下载好的msvcr文件 xff0c 放到 C Windows SysWOW64 目录下正常msvcr文件会缺失好几个
  • Cocos2dx 源码解释

    程序入口 AppDelegate AppDelegate在AppDelegate h中定义的 AppDelegate h中的AppDelegate类 xff1a AppDelegate类下的applicationDidFinishLaunc
  • Visual Studio 2019(VS2019) 基本操作

    卸载 加载项目 1 卸载项目 xff1a 不删除项目代码 xff0c 但是停止对该项目的一切使用和调用 xff08 好处是保留代码 xff09 2 加载项目 xff1a 重新加载已停用的项目 xff0c 可以继续使用和调用 修改VS主题风格
  • Elasticsearch 中文分词&多词搜索&权重

    目录 中文分词器 一 安装中文分词器ik 二 使用中文分词器 多词搜索 权重 中文分词器 一 安装中文分词器ik 源码地址 xff1a https github com medcl elasticsearch analysis ik 根据提
  • C# do while循环结构

    注意 循环结构一共有三种 xff1a while循环 https blog csdn net shenqiankk article details 96299600do while循环for循环 https blog csdn net sh
  • C# for循环结构

    注意 循环结构一共有三种 xff1a while循环 https blog csdn net shenqiankk article details 96299600do while循环 https blog csdn net shenqia
  • C# 构造方法(函数)

    构造方法的作用 构造方法用来创建对象 xff0c 并且在构造方法中对对象进行初始化 构造方法的特殊性 没有返回值 xff0c 不需要写类型 xff0c 连void都不要写 构造方法的方法名 xff0c 与类名要相同 构造方法结构 publi
  • GDI+ 绘图方法

    GDI绘直线步骤 创建GDI对象 xff1a Graphics g 61 this CreateGraphics 创建画笔对象 xff1a Pen pen 61 new Pen Brushes Red 创建两个点 xff1a Point p
  • C# 连接MySQL数据库

    C 引用MySQL步骤 xff1a 下载mysql data dll xff1a http soft onlinedown net soft 618668 htm将文件放在项目目录下在VS2019项目内 xff0c 引用mysql data
  • Navicat of MySQL连接和使用

    请先安装MySQL服务 MySQL数据库安装 xff1a https blog csdn net shenqiankk article details 99756531 新建连接 如果出现Can t connect to MySQL ser
  • Mysql创建数据库字符集的选择

    转载 xff1a https blog csdn net JingChC article details 82908686 字符集选择 xff1a 在国内正常都是用 UTF 8 排序选择 xff1a 排序一般分为两种 xff1a utf b
  • Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)

    linux是一个多用户 xff0c 多任务的系统 xff0c 可以同时运行多个用户的多个程序 xff0c 就必然会产生很多的进程 xff0c 而每个进程会有不同的状态 Linux进程状态 xff1a R TASK RUNNING xff0c
  • python装饰器(详解)

    1 什么是装饰器 器指的是工具 xff0c 可以定义成成函数 装饰指的是为其他事物添加额外的东西点缀 合到一起的解释 xff1a 装饰器指的定义一个函数 xff0c 该函数是用来为其他函数添加额外的功能 就是拓展原来函数功能的一种函数 2
  • linux基础---常用命令学习

    1 显示日期的指令 xff1a date Linux时钟分为系统时钟 xff08 System Clock xff09 和硬件 xff08 Real Time Clock xff0c 简称RTC xff09 时钟 系统时钟是指当前Linux
  • JdbcTemplate queryForObject Incorrect result size: expected 1, actual 0

    使用Spring中的jdbcTemplate 时 xff0c 通过id查询不到结果时返回Incorrect result size expected 1 actual 0 64 Override public lt T gt T query
  • Ubuntu usb wifi驱动安装(MT7601u芯片)

    软件环境 Ubuntu 14 04 硬件环境 芯片 xff1a MT7601u 确定芯片 xff0c 在电脑插上usb wifi xff0c 在ubuntu命令行 xff0c 输入lsusb命令 xff0c 在所列的列表中有MT7601u即
  • 【目标检测】Fast RCNN算法详解

    Girshick Ross Fast r cnn Proceedings of the IEEE International Conference on Computer Vision 2015 继2014年的RCNN之后 xff0c Ro
  • 【目标检测】RCNN算法详解

    Girshick Ross et al Rich feature hierarchies for accurate object detection and semantic segmentation Proceedings of the