计算机视觉之目标检测——R-CNN、Fast R-CNN和Faster R-CNN详解

2023-11-19

计算机视觉之目标检测——R-CNN、Fast R-CNN和Faster R-CNN详解

目标检测的任务

目标检测是计算机视觉领域最经典最重要的任务之一,经过十几年的发展,目标检测已经日趋成熟。在2005年,有人将基于方向梯度直方图(HOG)的特征提取和基于支持向量机(SVM)的分类方法结合起来,创建了一种目标检测的方法,在行人识别上获得了很大的成功。后来,由于AlexNet(2012)的出现,学术界开始出现构建大型卷积神经网络的潮流,目标检测任务也在这个时间段蓬勃发展了起来,在速度、检测准确率等方面都得到了很大的进步。

关于目标检测,它的主要任务是在图片中检测出物体。一般我们看到的形式,大多是在一张图片上,用一个矩形框框出图片中的物体,并标注这个物体属于哪个类别。实际上,目标检测任务共有四个不同的方案,如下图所示。

1. 第一种是给定含有单个物体的图片,对于整张图片给出一个分类结果:图片中的物体属于哪种类别。这属于比较简单的工作,在实际应用中,往往是收集只含有一个对象并几乎占满整张图片的图片作为训练集,训练模型,并且把模型用作目标检测的一部分。 2. 第二种和第三种都是在给定图片中,**对于每一个物体都要框出物体所属的区域,并且给出每个框中识别到的物体的类别**。这种在实际应用中最为常用,本文介绍的目标检测就是要实现这样的效果。 3. 第四种是对图片中的对象进行实例边缘分割,要求将图像精确的轮廓描绘出来。在实际应用中,往往只有特别精细的检测才需要完成这种任务,本文不讨论这种情况。

目标检测的方法

接下来介绍依次改进的三种目标检测方法:R-CNN,Fast R-CNN,Faster R-CNN.

R-CNN

对于目标检测问题,首先我们来分析一下简单的实现方案。

以人脸识别为例,假设我们有很多很多类似证件照的人脸图片,每张图片的大小都相同。我们现在需要实现一种算法,使得在一张普通的图片中也能检测出人脸。

我们有了许多的人脸数据,那么就很容易训练出一个检测人脸的模型,去判断一张固定大小的图与人脸的相似度如何,判断它属不属于人脸。然后对于一张一般的图,我们使用一个滑动窗口去遍历图像的每一部分,输入检测模型去判断这个方框内是否存在人脸。然后对于检测出人脸的边框,利用一些算法将它们相近的几个整合成一个边框,从而达到识别出物体(人脸)的效果。

HOG+SVM的行人识别和基于区域的卷积神经网络(R-CNN)用的都是这种思想。这种目标检测的思想主要分为三个步骤:

  1. 生成候选区域:采用一些方法来给出图片可能含有目标物体的区域。遍历图像是一种生成候选区域的方法,但是显然效率很低,对于生成候选区域有非常多的方法,在R-CNN原论文中采用了选择性搜索(selective search)的方法来生成候选区域,然后将不同大小的候选区域resize成相同的尺寸。
  2. 特征提取:在HOG+SVM行人特征识别中,使用了HOG描述符来提取特征;而在R-CNN中,作者使用了去掉输出层的AlexNet或VGGnet-16来提取特征。
  3. 进行分类:HOG行人识别和R-CNN都使用了线性SVM来进行分类。
在训练模型时,首先要在训练集上训练一个完整的AlexNet,然后再去掉最后一层,接上SVM分类器,再用经过AlexNet特征提取后的特征图,训练基于OVR策略的SVM。有关SVM和AlexNet的详细内容,可以查看我之前的博客。[AlexNet](https://blog.csdn.net/qq_43371810/article/details/104077151),[SVM](https://blog.csdn.net/qq_43371810/article/details/103419187)

R-CNN的解决方案实际上效果也很不错,但是也存在着许多缺点:

  1. 速度慢。对于一张图片而言,需要大量选取候选区域并逐个进行特征提取,速度非常慢,每秒钟只能处理0.07张图片,与“实时”的最终要求差距甚远。
  2. 空间利用率低:在提取特征时,一张图片可以生成足足2000个候选区域,对于每一个候选区域进行卷积操作后,都要保存它们的特征图,这就会导致存储所需空间的成倍扩大。

于是,从改进这两点的角度出发,Fast-R-CNN出现了。

Fast R-CNN

Fast R-CNN,顾名思义,就是在R-CNN基础上发展起来的检测速度更快的解决方案。由于R-CNN产生的候选区域之间可能有很多重叠的部分,在使用卷积神经网络进行特征提取时,有重叠的候选部分区域的特征图之间也会有很大部分重叠,这就会导致对于一张图片的某一部分进行多次特征提取,浪费时间和空间资源。

从这个角度出发,我们是否可以先对图像进行特征提取,再选出候选区域呢?这显然是可行的。但也存在这一个问题:对于卷积神经网络中的层次来说,我们都必须要保证所有图片到达每个层次的尺寸是一样的,例如AlexNet的输入必须都是(224,224,3),而选择性搜索产生的候选区域可能是大小不一的,经过卷积神经网络提取特征后的映射部分也同样是大小不一的,这样,普通的卷积神经网络就无法再进行下一步的操作了。在R-CNN中,这个问题的解决方案是对于选出的候选区域进行resize,但卷积操作后的特征图已经没有了图像原本的特征,不能进行resize。针对这个问题,Fast R-CNN使用了一种称为感兴趣区域RoI池化层的神经网络层次,解决了这个问题。

RoI池化层是将一张任意大小的图像,均匀分成 X × Y X\times Y X×Y个部分,然后在每个部分中使用最大或平均池化,这样就可以将不同大小的特征图在充分保留其特征的前提下,达到输入特征图尺寸相同的目的。

另外,Fast R-CNN还使用了一种微调候选框的一种方法:边界框回归。我们首先要在图片中精准地标出物体的真实位置,然后用回归的思想,利用提取出的特征图去拟合这个真实位置,达到微调候选框的效果。当然,也不能少了分类模块。因此进行RoI池化后的特征图,先经过几层共用的全连接层进一步提取特征后,一部分送给全连接层+softmax进行分类工作,另一部分送入边界框回归模块执行定位操作。如下图所示。

比起R-CNN,Fast R-CNN有如下优点:
  1. 训练速度和检测速度更快。使用VGGnet-16的Fast R-CNN比R-CNN的训练速度快9倍,检测时的速度快了7倍。
  2. 识别精度更高。Fast R-CNN的mAP为66%,而R-CNN只有62%.

Fast R-CNN较之R-CNN在速度和精度方面已经有了很大提升,但生成区域建议的算法需要在CPU上运行,限制了速度的提高。从这个角度出发,将生成区域建议的算法进行改进,就产生了Faster R-CNN.

Faster R-CNN

Faster R-CNN最大的创新点在于引入了区域建议网络(RPN),将生成区域建议的步骤也放入了神经网络中,在端到端学习方式中实现了一种几乎无成本的区域建议算法。Faster R-CNN的网络架构如下图所示:

从图中可以看出,Faster R-CNN其实就是在Fast R-CNN基础上加入了RPN。细分下来,Faster R-CNN可以认为由五个模块组成:
  1. 深度卷积网络:Faster R-CNN仍然使用卷积神经网络来提取图像特征。图中使用了VGGnet-16来提取特征。训练时,利用预训练的VGGnet-16,将最后一层池化层的输出作为特征图提取出来。
  2. 区域建议网络(RPN):深度卷积网络生成特征图后,对于特征图中的每一个点,使用 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122三种不同尺度和1:2,1:1,2:1三种不同纵横比产生9个不同的边框盒区域,称为“”(anchor)。RPN的作用就是对这些锚进行筛选和分类。首先去除一些方框跨出边界的锚,剩下的锚用于训练一个softmax二分类器,这个二分类器只需要判断:锚中的图像是属于前景(含有对象)还是背景,一般认为与真实边框标注重叠最大或者重叠IoU大于0.7的认为是前景。训练完成后RPN就可以给出更加精确的区域建议。
  1. RoI池化层:对于生成的区域建议共有9种不同大小,因此也需要经过RoI池化层将它们转化为相同的大小。
  2. 目标分类模块和边界框回归模块:这两部分的内容与Fast R-CNN基本相同,都使用了边界框回归的方法来微调边界框,提升检测效果。

训练时,利用预训练的VGGnet-16模型初始化网络,随机初始化RPN,利用标注数据训练RPN;接下来使用训练好的区域建议网络训练单独的一个快速R-CNN网络,这两步中的卷积层不共享;再保持共享卷积层固定,微调RPN的特定层;最后再调整后续的全连接层参数。

对于各种目标检测算法的速度,可以详见下图。

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

计算机视觉之目标检测——R-CNN、Fast R-CNN和Faster R-CNN详解 的相关文章

  • AI芯片,是噱头还是趋势?

    随着AlphaGo的诞生 深度学习 日益普及 人工智能开始从智能化工具向智能机器进军 原有的MCU已无法满足深度学习的高速海量数据运算要求 AI芯片便应运而生 如今嵌入式芯片领域正面临AI芯片的新一轮机遇 那么在AI成为风口的当下 AI芯片
  • 2022年高级性能测试岗面试题【面试必看】

    昨天一个前同事找我 问有没有性能测试岗位的面试题 正好之前帮业务团队加面过几次性能测试岗位的候选人 我将面试时候会问的一些问题以及要考察的点列了出来 供大家参考 一 介绍下最近做过的项目 背景 预期指标 系统架构 场景设计及遇到的性能问题

随机推荐

  • oobabooga-text-generation-webui可能是最好的语言模型启动器(包含手把手安装教程)

    原文 oobabooga text generation webui可能是最好的语言模型启动器 包含手把手安装教程 哔哩哔哩 引言 问 oobabooga是什么 oobabooga text generation webui是一个用于运行类
  • HeadFirst 设计模式学习笔记10——MVC分析

    1 M V C Model View Controller 模式 视图 控制器 这是一种范型 模型对象正是应用系统存在的理由 你设计的对象 包含了数据 逻辑和其他在你的应用领域创建定制的类 视图通常是控件 用来显示和编辑 控制器位于二者中间
  • 3.3 C++多继承与虚基类

    书接上回 继承存在二义性 上图中 A是虚基类 virtual的继承方式就是虚继承 参考下文章 C 虚继承和虚基类详解 知乎 zhihu com
  • apache和iis文件解析漏洞原理及修复

    Apache文件解析漏洞是指攻击者可以利用Apache服务器的文件解析功能 通过构造特殊的URL 访问服务器上的敏感文件 从而获取服务器上的敏感信息 IIS文件解析漏洞是指攻击者可以利用IIS服务器的文件解析功能 通过构造特殊的URL 访问
  • 面试官:如何用a标签实现文件下载?(一文带你手撕知识点)

    前言 大家好 今天给大家带来前端小知识 前端利用a标签实现文件 图片 下载 也就是教大家利用a标签或者是 window open 来实现下载功能 文章目录 前言 常用方式 方法分析 代码实现 常用方式 a href url 下载 a a标签
  • Weex简介及环境搭建(mac版)

    1 Weex简介及特点 weex 是一个使用 Web 开发体验来开发高性能原生应用的框架 在Ios和Android上都实现了一个渲染引擎 并提供了一套基础的内置组件 渲染出来的都是原生组件 提供了一套基础的内置模块 可以通过这些模块来调用一
  • 校园网服务器系统需求分析,校园网建设需求分析.doc

    校园网建设需求分析校园网建设需求分析 文档日期2012 5 9编号002项目名称北京市信息职业技术学院东校区校园网建设项目部门网建部开始时间2012 5 9结束时间2012 5 文档名称北京市信息职业技术学院东校区校园网建设项目需求分析文
  • 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结

    51CTO com原创稿件 Spring Cloud 在国内中小型公司能用起来吗 从 2016 年初一直到现在 我们在这条路上已经走了一年多 在使用 Spring Cloud 之前 我们对微服务实践是没有太多的体会和经验的 从最初的开源软件
  • uniapp git忽略unpackage文件

    最近在写整理一个app框架 遇到git提交时unpackage文件无法忽略的问题 1 第一反应是创建 gitignore文件 并写入unpackage目录 本以为大功告成 奈何还是不行 思考 可能是由于该文件已经被提交过 处于被跟踪状态 所
  • opencv安装教程python3.8_Python3.8 安装 OpenCV 库

    我是 Python 小新 本文演示如何在 Windows 10 下为 Python 安装 OpenCV 库 事实上 借助于强大的包管理工具 pip 只需要一条安装命令就可搞定 打开命令提示符 输入如下命令 pip install openc
  • Openframework在VS2010中的配置

    Openframework在VS2010中的配置 首先去官网下载Openframework 下载后最好解压到C盘根目录下 不然会出现各种问题 我也不知道怎么解决 随便打开其中的例程 然后右击该工程 选择属性 如下图 接着在C C 常规选项里
  • 基于MATLAB的WSN网络时间同步仿真

    目录 1 算法概述 2 仿真效果 3 matlab仿真源码 1 算法概述 WSN时间同步 时钟偏移与同步问题 主讲教师 马小林 1 时钟偏移与同步问题 1 时钟偏移与同步问题 时钟偏移 时钟之间的时间差 Clock Offset WSN系统
  • 【王道·计算机网络】第一章 计算机网络基本体系

    一 计算机网络概述 1 概念 计算机网络是一个将分散的 具有独立功能的计算机系统 通过通信设备与线路连接起来 由功能完善的软件实现资源共享和信息传递的系统 简而言之 计算机网络就是一些互联的 通过通信链路互联互通 自治的计算机系统的集合 2
  • pycharm:Updating Indices 解决办法

    pycharm Updating Indices 解决办法 右下角一直在update 然后我的文件夹里面文件很多 都是图片流 pycharm相当于预加载这些 然后在左侧可以查看 但是这个过程比较慢 解决的方法是让pycharm直接无视某些文
  • Window下用caffe实现MNIST训练

    本博包含MNIST原始数据的格式转化 以及分类训练 1 数据转化 Caffe源码中src caffe caffe examples mnist convert mnist data cpp提供的实现代码并不能直接在Windows下运行 这里
  • Filebeat监控 日志监控

    介绍 filebeat提供了两种监控 一种直接推送到ES集群 第二种就是Metricbeat 这里介绍第一种 也就四部 第1步 创建认证 账号密码 这一步基本可以略过了 如果你的filebeat在运行 你肯定已经有账号密码了 第2步 配置f
  • 设计模式学习笔记-工厂模式

    设计模式学习笔记 工厂模式 作用 实现了创建者和调用者的分离 详细分类 简单工厂模式 用来生产同一等级结构中的任意产品 对于增加新的产品 必须要扩展已有的代码 工厂方法模式 用来生产同一等级结构中的固定产品 支持增加任意产品 抽象工厂模式
  • 基于Zinx框架实现轻量级TCP服务器

    一 框架部分 包括一个sever 两个读 写模块 一个API管理 一个消息队列管理 一个读写池 建目录一个抽样层 一个实体层 二 基于zinx服务器的应用 对于一个框架 越简单来说越好 V0 1 简单的服务器客户端 1 对于开始 完成简单的
  • 使用CMake构建复杂工程

    转 https www cnblogs com autophyte p 6147751 html 0 什么是CMake CMake是一个跨平台的编译 安装 测试以及打包工具 CMake不直接编译软件 而是结合原生构建系统来构建软件 CMak
  • 计算机视觉之目标检测——R-CNN、Fast R-CNN和Faster R-CNN详解

    计算机视觉之目标检测 R CNN Fast R CNN和Faster R CNN详解 文章目录 计算机视觉之目标检测 R CNN Fast R CNN和Faster R CNN详解 目标检测的任务 目标检测的方法 R CNN Fast R