经典目标检测R-CNN系列(1)开山之作R-CNN

news2024/11/27 20:30:04

经典目标检测R-CNN系列(1)开山之作R-CNN

2014年,大神RBG(Ross Girshick)等人将卷积神经网络(Convolutional Neural Network,CNN)应用于目标检测任务中,在PASCAL VOC 2012数据集上,能够将目标检测的平均精度均值(Mean Average Precision, MAP)指标提升到53.3%,这相对之前最好的结果(由DPM++保持的40.4%)提升了超过30%。

R-CNN,中文直译为具有CNN特征的区域(Regions with CNN features),无疑是深度学习目标检测应用的开山之作。

1 R-CNN前向过程

RCNN算法流程可分为4个步骤

- 一张图像生成1K~2K个候选区域(使用Selective Search方法)

- 对每个候选区域,使用深度网络提取特征

- 特征送入每一类的SVM 分类器,判别是否属于该类

- 使用回归器精细修正候选框位置

在这里插入图片描述

1.1 获取候选区域

  • 针对一幅图像,R-CNN在该环节生成大约2000个区域建议。

  • R-CNN强调其支持现在任意一种区域建议的生成方式作为前端,但是考虑到需要与其他算法进行比较,采用选择性搜索(Selective Search)算法实现区域建议生成。

  • 选择性搜索为一种自下而上(bottom-up)的区域生成算法,首先通过分割(over-segmentation)将图像分为很多小的区域(“自下”),然后按照区域的纹理、形状等特征的一致性,将临近区域进行合并、再合并(“而上”),形成具有层次关系(hierarchical)的多尺度分割结果。在不同尺度上,用区域的包围框作为对应的区域建议范围,在这里,“不同尺度”表达了对图像细节的分辨程度,如同是在不同的“远近”对图像内容进行不同程度的抽象。

  • 下图示意了针对一辆轿车图像进行选择性搜索获取区域建议的自下而上过程。

在这里插入图片描述

1.2 利用CNN(AlexNet)提取特征

  • 在R-CNN中,CNN网络被用作特征提取器(Feature Extractor)。

  • 用AlexNet结构作为基础并进行小幅改造,网络输入图像尺寸为227×227,输出为4096维的特征向量。

  • AlexNet网络结构如下图所示。输入图像的尺寸为227×227,可训练的层包括5个卷积层以及3个全连接层。

在这里插入图片描述

  • 在R-CNN中,CNN的作用是提取特征,所以不用考虑IMAGENET的类别因素,因此R-CNN直接以fc7层的4096维特征作为最终的特征提取结果。
  • 将2000候选区域缩放到227x227 pixel,接着将候选区域输入事先训练好的AlexNet CNN网络,最后获取4096维的特征得到2000×4096维矩阵。

注:

R-CNN的原文中讨论了2种统一输入图像尺寸的方法:

  • 最紧方形裁剪(tightest square)缩放:按照区域建议不同的长宽比,选择使其居中的最紧正方形进行裁剪,在裁剪得到正方形中、区域建议之外的区域进行数据填充(以零值填充或是以图像均值填充),然后将填充后的方形区域以均匀的方式缩放至227×227的尺寸;
  • 裁剪-非均匀扭曲(warp):直接按照区域建议进行裁剪,然后以非均匀的方式将裁剪得到的子图像至227×227的尺寸。

如下图,R-CNN采用非均匀扭曲方法进行输入统一尺寸,而且在裁剪前对区域建议进行16像素的外扩,然后再进行非均匀缩放。

在这里插入图片描述

1.3 利用SVM进行分类

  • R-CNN按照PASCAL VOC 2012目标检测任务的21类(20个目标类别再加上背景)进行分类。
  • 在R-CNN中,分类任务使用支持向量机(Support Vector Machine, SVM)分类器来实现。R-CNN为每个类别训练一个针对该类别的二值线性分类器,实现对该类别“是/否”的判断。针对PASCAL VOC 2012目标检测任务的20种目标设定,R-CNN采用20个线性SVM分类器实现分类。
  • 将2000×4096的特征矩阵与20个SVM组成的权值矩阵4096×20相乘,获得2000×20的概率矩阵,每一行代表一个建议框归于每个目标类别的概率。

在这里插入图片描述

  • 分别对上述2000×20维矩阵中每一列,即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

在这里插入图片描述

1.4 回归器精细修正候选框位置

  • 一个理想的包围框表现为目标物体的外接矩形,即要求其紧紧包裹在目标轮廓的外侧。在某一检测任务中,如果包围框的预测位置偏差过大,那么即使类别预测的再准确,也相当于没有正确的检测出目标。

  • 在R-CNN中,目标包围框由选择性搜索得到,在上文中我们已经知道这些框是由多尺度的图像分割生成。然而,针对很多复杂场景应用,图像分割往往难以用一个区域精确表达一个完整目标,这就导致选择性搜索得到的包围框在很大程度上存在位置偏差。在这种情况下,如果能够构造一个变换,实现对存在偏差的包围框进行微调,使其尽可能贴近理想包围框的位置,这样岂不是定位会更准确?

  • BBR就是通过学习构造这样的变换,从而可以将该变换作用到选择性搜索得到的初始包围框上,对其位置进行微调,得到最终更加准确的包围框。

在这里插入图片描述

BBR变换公式

在这里插入图片描述

BBR的平移变换和尺度缩放

在这里插入图片描述

在这里插入图片描述

2 R-CNN的训练

2.1 R-CNN训练的五个步骤

R-CNN的训练过程还是相当繁琐的,大致分为相对独立的5个步骤,简单说一下:

  • 训练第1步——预训练(pre-training)
    • 在IMAGENET分类任务数据集上训练一个基于AlexNet网络的1000类分类模型。
  • 训练第2步——参数微调(fine-tuning)
    • 以PASCAL VOC 2012目标检测任务数据集作为训练数据。微调环节首先将AlexNet的1000维全连接层(fc8)替换为21维,对应训练数据集的20个目标类别和1个背景类别。然后将选择性搜索得到的区域建议包围框与训练数据所给的真实(Ground Truth, GT)目标包围框进行IoU计算,若计算得到最大的IoU小于0.5,则给该区域建议赋予背景类,否则赋予其GT包围框对应的类别。
    • 对每个区域建议进行裁剪和扭曲,统一尺寸至227×227。具有统一尺寸的图像作为AlexNet网络(21路输出)的输入,以微调的方式,训练一个21类的分类器。
  • 训练第3步——特征提取
    • 经过参数微调训练之后,CNN即可用作特征提取器使用。在R-CNN中,截取全连接层fc7的4096维输出作为最终的特征。
    • 为了方便进行后续的SVM分类器训练,需要将提取得到的特征及对应的类别标签进行磁盘保存。
    • 除此之外,为了满足后续BBR的需要,区域建议包围框位置信息以及对应的pool5层特征也需要进行保存。
    • 整个PASCAL VOC 2012数据集得到的特征数据大约需要200G的存储空间。
  • 训练第4步——SVM分类器训练
    • 以第3步保存的特征和类别标签为输入,为每个类别训练一个二分类的线性SVM分类器。
  • 训练第5步——包围框回归(BBR)

2.2 R-CNN的优缺点

优点:

  • R-CNN是将CNN技术应用于目标检测领域的开山之作,具有里程碑式的意义。

  • 与传统非深度学习目标检测方法相比,在检测精度方面有着大幅度提高。

  • R-CNN也验证了CNN作为特征提取工具的有效性。

缺点:

  • 固定尺寸输入:R-CNN强制将每个区域建议的子图像拉伸/缩放至227×227这一固定尺寸。这一简单的操作将给某些对象、尤其是长宽差异极大的对象带来严重的扭曲,从而影响后续的检测精度;
  • 速度慢:R-CNN的目标检测速度过慢成为制约其应用、尤其是实时目标检测应用的瓶颈。速度慢的主要原因在于大约2000个尺寸为227×227区域建议均要通过CNN进行提取特征;
  • 操作繁琐
    • R-CNN中的生成区域建议、预训练、参数微调、分类器训练和包围框回归等环节都是相对独立的,操作流程繁琐,更谈不上端到端(end-to-end,即模型的输入输出分别为原始数据和最终结果)。
    • 同时,R-CNN的预训练依赖IMAGENET数据集,参数微调依赖PASCAL VOC数据集,对共享数据集的依赖过重。当需要使用自己的数据集完成全流程训练时,整套操作将变得异常繁琐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 如何发布并部署到服务器

一般情况npm run build即可 从而生成vue代码直接放到服务器即可 这里的具体情况要看package.json里面的配置从而使用命令 会生成dist就是该项目的发布包

软件测试项目经验重要吗?

目前从行业薪资排名看,IT行业是我们普通人能够接触到的高薪行业,像金融、银行和投行等高薪职位,张雪峰老师在他的视频中分析过,不是一般人可以拿捏的。IT行业的大部分岗位需要专业的技能,留给我们这些非计算机专业科班…

实现微信机器人开发,个微api

首先微信聊天机器人,是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上,如PC平台或者移动终端设备平台。 有兴趣的可以去进行测试(E云管家),功能十分全面 文档测试过程中实现多项功能进行管理 …

数据结构--线性表的链式存储结构

这里写目录标题 链式存储结构链表简介格式分类头结点位置示意图与不带头结点的区别 链表的特点 单链表定义链表的代码实现简介实操 基本操作的实现初始化单链表销毁单链表清空单链表求单链表表长 二级目录二级目录二级目录二级目录二级目录二级目录 链式存储结构 链表 简介 格…

QML学习day1

QML学习day1 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.5Window {width: 640height: 480visible: truecolor:"blue"title: qsTr("Hello World")Button {//按钮id: btn1width: 50height: 50focus: true //聚焦…

P106-100组A卡(R5 240)指南

P106-100组A卡(R5 240)指南 不建议小白尝试 不建议小白尝试 不建议小白尝试文章目录 P106-100组A卡(R5 240)指南资料合集硬件软件基础卸载所有原驱动安装驱动修改注册表自动调用——只改一个注册表手动调用——改两个注册表 劝退…

软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放,对修改关闭。在程序…

Leecode402:移掉 K 位数字

这道题一看想的是可能用回溯或者什么别的方法,但是那样的话时间复杂度非常高,而且也不适用于动态规划,所以观察的话,可以知道从前往后判断的话肯定是前面越小越好,所以只需要前面最小,整体就最小。因此从前…

子网掩码详解

1 子网掩码 IP地址是以网络号和主机号来标示网络上的主机的,我们把网络号相同的主机称之为本地网络,网络号不相同的主机称之为远程网络主机,本地网络中的主机可以直接相互通信;远程网络中的主机要相互通信必须通过本地网关&#…

酸蚀刻对钛医药材料纳米形态表面特性及活化能的影响

引言 由于商业纯钛(CP Ti)具有抗腐蚀性,并且具有哦合适的机械性能以及生物相容性,因此,目前一直被用作牙科植入材料。为了在临床手术中获得高水平的成功,CP Ti的表面质量和形貌是影响植入手术结果的最关键因素之一,近…

GPT使用技巧

五大原则 想要让ChatGPT产出有效的回答,需要遵循以下五个原则: 提问清晰: 请尽可能清晰地描述您的问题 简明扼要: 请尽量使用简单的语言和简洁的句子来表达您的问题 确认问题: 请确认您的问题是清晰、明确和完整…

python接口自动化--token登录(详解)

简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里,本质上是跟 cookie 是一样的&…

攻不下dfs不参加比赛(十一)

标题 为什么练dfs题目为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有的东…

手把手教会你使用Markdown

目录 一、Markdown是什么 二、Markdown优点 三、Markdown的基本语法 一、Markdown是什么 Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 Markdown 允许人们使用易读易写的纯文本格式编写文档,然后转换成…

四川大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 四川大学(B)考研难度(☆☆☆☆) 四川大学计算机考研招生学院是计算机学院、网络空间安全学院和视觉合成图形图像技术国防重点学科实验室。目前均已出拟录取名单。 四川…

【Linux】多线程(三)

文章目录 线程池线程安全的单例模式什么是单例模式什么是设计模式单例模式的特点饿汉实现方式和懒汉实现方式饿汉方式实现单例模式懒汉方式实现单例模式懒汉方式实现单例模式(线程安全版本) STL,智能指针和线程安全STL中的容器是否是线程安全的?智能指针是否是线程安全的? 其…

一维数组、二维数组与指针的关系以及理解

一维数组、二维数组与指针的关系以及理解 C语言中,关于数组与指针,我们一般理解为:数组名即为该数组首元素地址,也是数组的首地址,但是关于数组名与指针的联系远不止于此。 文章目录 一维数组、二维数组与指针的关系以…

指针作为输入参数和输出参数

指针作为输入参数 指针作为输出参数 可以知道,改变的是地址里面的值。

Jmeter性能测试 —— 性能测试的流程和术语

性能测试的流程 一、准备工作 1、系统基础功能验证 一般情况下,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。2、测试团队组建 根据该项目的具体情况,组建一个几人的性能测试…

3DE重客户端安装

3DE重客户端安装 一、百度网盘下载路径二、详细安装步骤 一、百度网盘下载路径 https://pan.baidu.com/s/16TltMRbrWuSe7p-Vn1x4Dw?pwdfku7 提取码:fku7 二、详细安装步骤 1、将\3deinstall\2022x_install_GA目录下的所有.tar文件全选解压 2.点击\3deinstall\…