目标检测:RCNN、SppNet、Fast RCNN、Faster RCNN是如何过渡的?

news2024/11/29 4:26:41

目标检测:RCNN、SppNet、Fast RCNN、Faster RCNN、思想总结

  • R-CNN
    • 候选框生成
    • Training
      • 迁移学习
      • 分类与回归候选框
    • R-CNN存在的问题
  • SppNet
    • 面临的问题
    • 空间金字塔池化
    • 特征图映射
    • SppNet存在的问题
  • Fast R-CNN
    • R-CNN与SppNet存在的问题
    • 核心思想
      • 模型流程
      • ROI Pooling
      • 多任务损失的单阶段训练
      • 端到端训练
        • 采样策略
    • Fast R-CNN存在的问题
  • Faster R-CNN
    • 面临的问题
    • RPN网络
      • 网络细节
      • RPN Trianing Method
        • 打标签
        • 损失函数
    • 四步交替训练
    • Q&A

R-CNN

在这里插入图片描述

候选框生成

在这里插入图片描述

本文采用Selective Search方法来提取候选框,每一张图片提取2000-3000个候选框,提取流程如下:

  1. 根据图像像素聚类,产生初始分割区域。
  2. 根据纹理、纹理大小、形状、相似度进行加权合并。
  3. 重复上述操作,产生2000-3000个候选框。

上述方法产生的候选框宽高不一,但是后续提取特征用到的CNN需要固定宽高,作者对图像resize到227*227。
因为直接resize这种做法会让图像失真,作者采用各向异性缩放+16padding的方式

Training

迁移学习

由于当时的目标检测数据集规模有限,于是先用了ILSVRC2012这个训练数据库(这是一个图片分类训练数据库),先进行网络图片分类训练。这个数据库有大量的标注数据,共包含了1000种类别物体,因此预训练阶段CNN模型的输出是1000个神经元,这样就可以通过图像分类数据集获得一定先验知识,然后把全连接层1000个神经元换成21个神经元(20个类别+背景),随机初始化新的Linear权重,固定卷积层的权重,调小学习率在目标检测数据集上拟合新的全连接层的权重。

分类与回归候选框

在这里把候选框与真实框计算IOU,如果IOU>0.5则被认为是正类,反之认为是负类(背景类),用来训练全连接层权重,收敛后,把4096维的特征拿出来,放入SVM模型进行分类。
用SVM的原因是,利用CNN训练需要大量的数据,否则会过拟合,而SVM则不需要大量的数据,在训练SVM的时候把IOU>0.7才标注为正类,这样会增大map。
回归

R-CNN存在的问题

  1. 训练时间长:主要原因是分阶段多次训练,而且对于每个region proposal都要单独计算一次feature map,导致整体的时间变长。
  2. 占用空间大:每个region proposal的feature map都要写入硬盘中保存,以供后续的步骤使用。
  3. multi-stage:文章中提出的模型包括多个模块,每个模块都是相互独立的,训练也是分开的。这会导致精度不高,因为整体没有一个训练联动性,都是不共享分割训练的,自然最重要的CNN特征提取也不会做的太好。
  4. 测试时间长,由于不共享计算,所以对于test image,也要为每个proposal单独计算一次feature map,因此测试时间也很长。

SppNet

在这里插入图片描述

面临的问题

  1. 速度:由于RCNN需要对一张图片产生2000个候选区域分别采用cnn提取特征,大大增加了速度。
  2. 性能:由于全连接网络的限制,Selective Search 产生的候选框需要固定尺寸(227 * 227),会给图像造成不规则变形,这也会造成性能的损失。

空间金字塔池化

在这里插入图片描述

为了解决性能问题,作者的想法是让图片经过卷积层后,在卷积层与全连接层的中间加上一层可以特殊的网络结构,无论卷积层输出多大的feature map,都可以输出固定的向量,这样就可以解决全连接层的限制,也就结解决了需要对候选框resize造成图像失真的问题。

上面的特殊的网络层就叫做空间金字塔池化,是指把卷积层输出的featuremap的HW分别平均分成 16份、4份、1份,然后每一份做maxpooling,假设channel是3,那么无论输入多大,输出都是(16+4+1)*3。
假设 hw为 13 * 13 ,把它分成四份,那么kernel_size 与 stride 就是动态变化的,计算方式如下:
在这里插入图片描述

特征图映射

在这里插入图片描述

为了解决速度问题,由于rcnn需要对每一张图片产生的所有候选框分别提取特征,但这实质其实是对同一张图片的不同部分做提取,如果我们可以直接对cnn提取整张图像的feature map,然后根据候选框的在原图中的相对位置找到对应的整张feature map中候选框的feature map的相对位置,这样每张图像就只需要提取一次cnn的操作,然后根据映射找到候选框feature对于整张图像的feature 相对位置,也就找到了候选框的feature。

映射细节

SppNet存在的问题

和RCNN一样,SPP也需要训练CNN提取特征,然后训练SVM分类这些特征。需要巨大的存储空间,并且分开训练也很复杂。而且selective search的方法提取特征是在CPU上进行的,相对于GPU来说还是比较慢的。针对这些问题的改进,我们将在Fast RCNN以及Faster RCNN中介绍。

Fast R-CNN

在这里插入图片描述

R-CNN与SppNet存在的问题

  1. 训练过程是多级pipeline。R-CNN首先使用目标候选框对卷积神经网络使用log损失进行fine-tunes。然后,它将卷积神经网络得到的特征送入SVM。这些SVM作为目标检测器,替代通过fine-tunes学习的softmax分类器。在第三个训练阶段,学习bounding-box回归器。

  2. 训练在时间和空间上是的开销很大。对于SVM和bounding-box回归训练,从每个图像中的每个目标候选框提取特征,并写入磁盘。对于VOC07 trainval上的5k个图像,使用如VGG16非常深的网络时,这个过程在单个GPU上需要2.5天。这些特征需要数百GB的存储空间。

  3. 目标检测速度很慢。在测试时,从每个测试图像中的每个目标候选框提取特征。用VGG16网络检测目标时,每个图像需要47秒(在GPU上)。

核心思想

模型流程

在这里插入图片描述

输入一张图片,通过 selective search方法提取 roi区域,通过cnn提取这样图像的特征,根据原图候选框的相对位置映射到feature map,通过roi pooling 固定输出,通过全连接层,并行的执行分类与回归。

ROI Pooling

ROI Pooling可以看作 SppNet 的 spatial pyramid pooling 的特殊情况,sppnet对feature map 分成多个尺度,roi pooling只分成一个尺度。
roi的好处:有一种解释是空间金字塔池化不可导,不能进行反向传播,roi pooing则可以。
在这里插入图片描述

多任务损失的单阶段训练

损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中 p u 为标签的类别与预测的类别,采用交叉熵损失, lambda 为常数,为了平衡损失,防止某个损失过大,当u =1 时,说明不是背景类,可以回归精修候选框,反之则不计算回归损失,这样就可以共同

端到端训练

采样策略

在sppnet中,一个batch有很多张图像,一张图像又采集了很多张候选框,由于当时的显存也不大,这导致很难进行反向传播,在 fast rcnn中每次只拿出两个图片,每张图像生成64个候选区域,也就是大概一个batch 128,IOU正负样本策略与RCNN基本一致。

Fast R-CNN存在的问题

Fast RCNN的主要缺点在于region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),这也是后续Faster RCNN的改进方向之一。

Faster R-CNN

在这里插入图片描述

面临的问题

在当时,Fast RCNN已经获得了较大的突破,但是仍然存在一些问题,fast rcnn的提取候选框的方法 selective search 不能GPU并行计算,速度还是有很大的提升空间,作者的想法是能不能提取一次图像的特征后,即利用了GPU的并行资源,还实现了提取特征与提取候选框这两个功能。

RPN网络

在这里插入图片描述

网络细节

当卷积层提取到feature map后 ,在卷积层后利用一个3 * 3 的卷积核提取每个feature map点的特征(这个卷积核与之前的不太一样),根据 卷积核扫描图像对应区域的中点,按照1 :1 1:2 2:1 三个 hw比和三个尺寸生成9个 anchors,一共会生成 h * w * 9个候选框,3 * 3的卷积过后接一个全连接层,然后输出 9个值,代表是否为正类的概率(是否包含物体),同时 ,输出 4 * 9的值用来回归精修anchor。
假设我的 原图经过卷积层提取特征后输出 5 * 5 * 256 的feature map, 然后 输入到 3 * 3 特殊的卷积,这个卷积核每划动一下,他在这个feature 的作用区域 就是 3 * 3 256 ,对每个channel执行卷积操作后得到 1 1 *256的feature map,然后不进行相加操作,直接对这个 feature map后接全连接层 分类+回归,然后每划动一次都执行上述操作,生成候选框。

RPN Trianing Method

打标签

上面说了如何前想计算,接下来说如何打标签,利用生成的anchor 对每张图像标记好的真实标签计算IOU,如果一个anchor与这张图像的任意一个anchor最近,那么直接标注为正类,如果与标签的IOU大于0.7也标记为正类,如果小于0.3就标记为负类,其余的直接忽略不计。

损失函数

它的损失函数与 fast rcnn基本一致,只是分类阶段换成了两类(是否为正类)。
在这里插入图片描述

四步交替训练

  1. 先训练 RPN网络。
  2. 把训练好的RPN网络生成的anchor给fast rcnn,训练fast rcnn。
  3. 把fast rcnn 训练好的 cnn权重同步给 RPN,锁定这个权重,fine-tune其它层。
  4. 把训练好的RPN网络生成的anchor送到fast rcnn,其中也是锁定conv权重,fine-tune,训练好后合并两个模型形成faster rcnn。

Q&A

如果 3 *3的卷积核在图像边界,那么生成的anchor可能会超过原图边界,这种anchor直接丢弃。
通过rpn网络生成的候选框,由于重合部分较大,最后也会执行一次nms去重,或者按照分类得分进行排序筛选。

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

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

相关文章

力扣刷题记录——326.3的幂、338. 比特位计数、342. 4的幂、350. 两个数组的交集 II

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《326.3的幂、338. 比特位计数、342. 4的幂、350. 两个数组…

如何搭建邮箱服务器

目录 部署 DNS 黑名单 Mailcow:dockerized 部署 Mailcow:dockerized 为 Mailcow:dockerized 配置 TLS Mailu.io 生成配置文件 部署 Mailu 安全 S/MIME OpenPGP 推荐阅读 搭建邮局服务器的想法之前一直都有,不过一直没有尝试,国庆的时候从阿里…

62. 目标检测 / 物体检测 以及边缘框代码实现

1. 图片分类和目标检测的区别 2. 边缘框 3. 目标检测数据集 目标检测数据集常用的格式:假设是用文本文件来存的话,每一行表示一个物体,分别有文件名、物体类别、边缘框。因为一个图片文件里面可能有多个物体,同一个文件名可能会出…

STC32G 三电感电磁循迹小车

文章目录前言准备工作增量式以及位置式PID电机闭环电磁采样舵机闭环合并效果前言 准备18届的负压电磁,趁现在考试延期赶紧把车子给调了。 现在速度就只能提到1.5m,再往上调就有点打滑了,只能等后面逐飞把负压电机的做出来了之后看能不能让车…

靶机Os-Hax测试笔记

靶机Os-Hax测试笔记 靶机描述 Difficulty : Intermediate Flag : boot-root Learing : exploit | web application Security | Privilege Escalation Contact … https://www.linkedin.com/in/rahulgehlaut/ This works better with VirtualBox rather than VMware 下载…

elasticsearch 7.9.3知识归纳整理(六)之kibana图形化操作es指南

kibana图形化操作es指南 一、创建用户,角色和权限指引 1.创建角色 1.1 在kibana首页点击Manage and Administer the Elastic Stack下的securitys settings 1.2 点击左侧Security 下的roles 1.3 点击右上角的create role 1.4 输入角色名字 完成后点击下面的create…

C++不知算法系列之迷宫问题中的“见山不是山”

1. 前言 迷宫问题是一类常见的问题。 初识此类问题,应该是“见山是山”,理解问题的原始要求,便是查找从起点到终点的可行之路。 有了广泛的知识体系之后,应该是"见山不是山"。会发现迷宫就是邻接矩阵,树和…

CDH6.3.2整合DolphinScheduler3.0.0

注意事项zookeeper版本兼容要查看dolphinscheduler的libs目录下zookeeper的jar包CDH6.3.2DolphinScheduler3.0.0前置条件默认CDH以正确安装并启动至少官方要求的基础环境以正确安装并配置,点击跳转使用mysql需要驱动包 mysql-connector-java-8.0.16.jar,同时所有服务的libs里面…

电力系统电价与温度模型(Matlab代码实现)

目录 1 数学模型 2 运行结果 3 Matlab代码实现 1 数学模型 用于模拟电价的模型是一个简化形式的混合模型,如下图1所示。其根本驱动因素是天然气价格和气温。该模型在内部捕获了驱动因素与电价的关系之间的关系,以及与一天中的时间、一周中的哪一天和…

日常生产用项目一整套DevOps流水线搭建-笔记一(镜像仓库的设置)

写在前边 很多项目新手在接手开发项目的时候,由于缺乏经验,只能通过比较笨的方法去进行项目的部署和开发.这样就会非常非常的麻烦,重复的工作很多很多.我借着一个项目开发的时机,第一次实现了我原先只在想象中的流水线部署.但是由于跟正规公司的项目规模还有差距,我们的流水线…

十六、状态管理——Vuex(3)

本章概要 action 分发 action在组件中分发 action组合 action 16.7 action 在定义mutation 时,一条重要的原则就是 mutation 必须是同步函数。换句话说,在 mutation() 处理器函数中,不能存在异步调用。例如: mutations:{some…

关于前端的学习

最近在网上想模拟一个ai的围棋,然后在gitee上找了一个算法,想要启动一下。https://gitee.com/changjiuxiong/myGoChess?_fromgitee_search使用说明是这样的:使用说明npm installnpm run dev打开index.html可自定义棋盘大小: new Game(19), n…

Polynomial Round 2022 (Div. 1 + Div. 2, Rated, Prizes!)(A~E)

A. Add Plus Minus Sign给出01字符串,在两两之间加入或者-,使得最后得到的结果绝对值最小。思路:统计1的个数,若是奇数个,那最后绝对值一定是1,否则为0,按照最后结果添加或1即可。AC Code&#…

GD32F103-初次接触

前期资料 外形 原理图 参考手册 1.芯片数据手册 2.用户手册 3.固件库使用指南 固件库解析 外设缩写 一些不常见的外设缩写。 BKP 备份寄存器 DBG 调式模块 ENET 以太网控制模块Ethernet EXMC 外部存储器控制 EXTI 外部中断事件控制器 FMC 闪存控制器 GPIO/AFIO 通用…

量化股票池数据怎么分析出来的?

量化股票池数据是怎么分析出来的呢?说到这个需要先来了解股票量化的基本原理,在正常的基础上,不是所有的股票数据都经过一一筛选,而是使用一些分析工具来执行,就像a股自动交易接口系统需要编写相符合条件的策略来执行&…

【MySQL】MySQL存储引擎,索引,锁以及调优

文章目录存储引擎MySQL中的索引MySQL 索引优缺点MySQL 索引类型MySQL索引的实现MySQL中的锁MySQL8.0 新特性MySQL中调优存储引擎 MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV等等存储引擎。 通过show engines; 命令查看,如下图 图中…

【目标检测】Mask R-CNN论文解读

目录:Mask R-CNN论文解读一、Mask-RCNN流程二、Mask-RCNN结构2.1 ROI Pooling的问题2.2 ROI Align三、ROI处理架构四、损失函数一、Mask-RCNN流程 Mask R-CNN是一个实例分割(Instance segmentation)算法,通过增加不同的分支&…

PTA_1_基础编程题目集

文章目录PTA--基础编程题目集1、简单输出整数函数接口定义:裁判测试程序样例:输入样例:输出样例:题解:2、多项式求和函数接口定义:裁判测试程序样例:输入样例:输出样例:题…

车载以太网 - 路由激活处理机制 - 04

在前面我们已经介绍过DoIP的路由激活,不过主要是介绍路由激活的相关的概念;今天我们主要来介绍下路由激活的处理逻辑,进一步的了解软件对路由激活的处理机制,让我们更深入的了解DoIP这块的处理逻辑,更加有助于我们的工作中开发和测试工作的进行。 首先我们简单看下…

Python中的三目(元)运算符

Python中的三目(元)运算符 官方说明 https://docs.python.org/zh-cn/3/faq/programming.html#is-there-an-equivalent-of-c-s-ternary-operator 是否提供等价于 C 语言 "?:" 三目运算符的东西?有的。 语法形式如下: [on_true] if [expre…