Faster RCNN详解

2023-11-16

paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Tensorflow-faster r-cnn github:Tensorflow Faster RCNN for Object Detection

前言

faster rcnn是何凯明等大神在2015年提出目标检测算法,该算法在2015年的ILSVRV和COCO竞赛中获得多项第一。该算法在fast rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。

R CNN系列算法比较

R-CNN:

(1)image input;
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
(3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
(4)将每个Region Proposal提取的CNN特征输入到SVM进行分类;
(5)对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.
缺陷:
(1) 训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
(2) 训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
(3) 速度慢:使用GPU,VGG16模型处理一张图像需要47s;
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算;
(5) SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.

FAST-RCNN:

(1)image input;
(2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
(3)将整张图片输入CNN,进行特征提取;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

相比R-CNN,主要两处不同:
(1)最后一层卷积层后加了一个ROI pooling layer;
(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练
改进:
(1) 测试时速度慢:R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.
(2) 训练时速度慢:R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.
(3) 训练所需空间大:R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.
(4) 由于ROI pooling的提出,不需要再input进行Corp和wrap操作,避免像素的损失,巧妙解决了尺度缩放的问题.

FASTER -RCNN:

(1)输入测试图像;
(2)将整张图片输入CNN,进行特征提取;
(3)用RPN先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

相比FASTER-RCNN,主要两处不同:
(1)使用RPN(Region Proposal Network)代替原来的Selective Search方法产生建议窗口;
(2)产生建议窗口的CNN和目标检测的CNN共享

改进:
(1) 如何高效快速产生建议框?
FASTER-RCNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.

Faster R CNN结构详解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面的三张图可以看出,Faster R CNN由下面几部分组成:
1.数据集,image input
2.卷积层CNN等基础网络,提取特征得到feature map
3-1.RPN层,再在经过卷积层提取到的feature map上用一个3x3的slide window,去遍历整个feature map,在遍历过程中每个window中心按rate,scale(1:2,1:1,2:1)生成9个anchors,然后再利用全连接对每个anchors做二分类(是前景还是背景)和初步bbox regression,最后输出比较精确的300个ROIs。
3-2.把经过卷积层feature map用ROI pooling固定全连接层的输入维度。
4.然后把经过RPN输出的rois映射到ROIpooling的feature map上进行bbox回归和分类。

概念详解

SPP-NET

SPP-Net是出自论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
由于一般的网络结构中都伴随全连接层,全连接层的参数就和输入图像大小有关,因为它要把输入的所有像素点连接起来,需要指定输入层神经元个数和输出层神经元个数,所以需要规定输入的feature的大小。而SPP-NET正好解决了这个问题。
在这里插入图片描述
如果原图输入是224x224,对于conv5出来后的输出,是13x13x256的,可以理解成有256个这样的filter,每个filter对应一张13x13的activation map.如果像上图那样将activation map pooling成4x4 2x2 1x1三张子图,做max pooling后,出来的特征就是固定长度的(16+4+1)x256那么多的维度了.如果原图的输入不是224x224,出来的特征依然是(16+4+1)x256;直觉地说,可以理解成将原来固定大小为(3x3)窗口的pool5改成了自适应窗口大小,窗口的大小和activation map成比例,保证了经过pooling后出来的feature的长度是一致的.

总结而言,当网络输入的是一张任意大小的图片,这个时候我们可以一直进行卷积、池化,直到网络的倒数几层的时候,也就是我们即将与全连接层连接的时候,就要使用金字塔池化,使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量)。

ROI pooling

ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图.对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个77512维度的特征向量作为全连接层的输入.

为什么要pooling成7×7的尺度?是为了能够共享权重。Faster RCNN除了用到VGG前几层的卷积之外,最后的全连接层也可以继续利用。当所有的RoIs都被pooling成(512×7×7)的feature map后,将它reshape 成一个一维的向量,就可以利用VGG16预训练的权重,初始化前两层全连接.

Bbox 回归

在这里插入图片描述
那么经过何种变换才能从图11中的窗口P变为窗口呢?比较简单的思路就是:
在这里插入图片描述
在这里插入图片描述
注意:只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟GT离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理).这个也是G-CNN: an Iterative Grid Based Object Detector多次迭代实现目标准确定位的关键. 线性回归就是给定输入的特征向量X,学习一组参数W,使得经过线性回归后的值跟真实值Y(Ground Truth)非常接近.即.那么Bounding-box中我们的输入以及输出分别是什么呢?
在这里插入图片描述
在这里插入图片描述

RPN

在这里插入图片描述
Feature Map进入RPN后,先经过一次33的卷积,同样,特征图大小依然是6040,数量512,这样做的目的应该是进一步集中特征信息,接着看到两个全卷积,即kernel_size=11,p=0,stride=1;
在这里插入图片描述
如上图中标识:
① rpn_cls:60
40512-d ⊕ 1151218 > 604092 逐像素对其9个Anchor box进行二分类
② rpn_bbox:60
40512-d ⊕ 1151236
>60409*4 逐像素得到其9个Anchor box四个坐标信息

逐像素对Anchors分类标记
① 去除掉超过1000*600这原图的边界的anchor box
② 如果anchor box与ground truth的IoU值最大,标记为正样本,label=1
③ 如果anchor box与ground truth的IoU>0.7,标记为正样本,label=1
④ 如果anchor box与ground truth的IoU<0.3,标记为负样本,label=0
剩下的既不是正样本也不是负样本,不用于最终训练,label=-1

逐像素Bbox回归纠正
除了对anchor box进行标记外,另一件事情就是计算anchor box与ground truth之间的偏移量
令:ground truth:标定的框也对应一个中心点位置坐标x*,y和宽高w,h*
anchor box: 中心点位置坐标x_a,y_a和宽高w_a,h_a
所以,偏移量:
△x=(x*-x_a)/w_a △y=(y*-y_a)/h_a
△w=log(w*/w_a) △h=log(h*/h_a)
通过ground truth box与预测的anchor box之间的差异来进行学习,从而是RPN网络中的权重能够学习到预测box的能力

接着进一步对Anchors进行越界剔除和使用nms非最大值抑制,剔除掉重叠的框;比如,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个);这样,进入到下一层ROI Pooling时region proposal大约只有300个。

参考文献:

  1. faster-rcnn原理及相应概念解释
  2. Faster RCNN 学习笔记
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Faster RCNN详解 的相关文章

随机推荐

  • 实例分割之SOLOv2: Dynamic, Faster and Stronger

    论文 代码 SOLOv2为作者对SOLO的改进 采用动态卷积核生成实例掩码 若对SOLO不了解 可先戳这里 作者取名为Dynamic head 将SOLO中的Mask Branch改为kernel branch和feature branch
  • ubuntu下nfs服务安装

    操作系统 ubuntu22 04 2 一 服务端安装与配置 1 在服务端安装nfs服务端组件 sudo apt install nfs kernel server 2 创建共享目录share并且授权所有人可以访问 sudo mkdir sh
  • 物联网全栈教程-从云端到设备(一)

    一 2016年的时候 我还在学校里面准备着毕业论文 当时做的课题是预测一个挖掘机上面的一个继电器的寿命 我们的想法是检测其吸合的次数 然后根据吸合的次数来预计其寿命 这个想法很简单 因为一个继电器失效之前通常会正常吸合一定的次数比如10W次
  • 【错误】IDEA :Windows找不到文件“chrome”。请确定文件名是否正确,再试一次

    idea运行前端页面的时候 遇到错误找不到浏览器位置 首先确认的就是地址没找到 那么需要我们手动添加一下 找到浏览器 查看属性复制它的全路径 在回到idea中然后在IDEA里面 File gt setting gt Web Browsers
  • EMC整改小技巧

    EMC整改小技巧 差模干扰与共模干扰 差模干扰 存在于L N线之间 电流从L进入 流过整流二极管正极 再流经负载 通过热地 到整流二极管 再回到N 在这条通路上 有高速开关的大功率器件 有反向恢复时间极短的二极管 这些器件产生的高频干扰 都
  • 浏览器会因为什么样的脚本而崩溃

    浏览器可能因为以下几种情况而崩溃 无限循环 如果JavaScript脚本包含一个无限循环 浏览器将无法停止脚本的执行 导致浏览器不响应甚至崩溃 例如 以下代码会导致无限循环 while true 无限循环 内存泄漏 如果JavaScript
  • Java关键字--------final关键字

    final关键字 final关键字表示最终的 不可修改的 final关键字可以用来修饰类 方法和属性 1 final关键字修饰属性 被final关键字修饰的属性的值和类型都不能再改变 就属于常量 只能做一次赋值 被final修饰的属性通常与
  • 【XINLIX 原语】XILINX 原语的使用之 IBUFDS 差分转单端、OBUFDS 单端转差分

    目录 IBUFGDS IBUFDS 介绍 IBUFDS 示意图 例化方式 OBUFDS OBUFDS 介绍 OBUFDS 示意图 例化方式 在 XILINX 中有许多原语 常见的差分转单端 IBUFDS 单端转差分 OBUFDS IBUFG
  • SO_LINGER选项

    SO LINGER选项 SO LINGER选项用于控制close系统调用在关闭TCP连接时的行为 默认情况下 当我们使用close系统调用来关闭一个socket时 close将立即返回 TCP模块负责把该socket对应的TCP发送缓冲区中
  • 代理IP与网络安全在跨境电商中的关键作用

    跨境电商已成为全球商业的重要组成部分 然而 随之而来的网络安全问题也日益凸显 为了在海外市场取得成功 不仅需要优质的商品和服务 还需要稳定 安全的网络连接 本文将介绍如何运用Socks5代理IP技术解决这些挑战 1 代理IP与网络安全 网络
  • [技术讨论]PT100采样电路设计

    本来不论PT100还是PT1000 他们的采样电路网上都很多 而且之前直接用的是现成的MAX31865方案 奈何领导说太贵 用集成运放搭吧 领导动动嘴 属下跑断腿 于是各方论坛 度娘 终于整了个有希望的方案 仅以此文记述这段硬件方案设计的经
  • MySQL 中的 SET 与 ENUM 类型使用详解

    一 SET类型 在创建表时 就指定SET类型的取值范围 sql view plain copy 属性名 SET 值1 值2 值3 值n 其中 属性名 参数指字段的名称 值n 参数表示列表中的第n个值 这些值末尾的空格将会被系统直接删除 其基
  • IRET指令详解

    copy from http lion3875 blog 51cto com 2911026 532347 当使用IRET指令返回到相同保护级别的任务时 IRET会从堆栈弹出代码段选择子及指令指针分别到CS与IP寄存器 并弹出标志寄存器内容
  • alert获取输入框内容_js弹出输入框并且获取输入值

    prompt 方法用于与用户交互 提示用户输入信息的对话框 首先 看看prompt方法的语法形式 var val prompt str1 str2 以上代码中 此方法包含两个属性 str1 提示用户输入的信息 str2 用户输入文本信息默认
  • OpenAI最新官方ChatGPT聊天插件接口《插件示例demo》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(四)(附源码)

    Example plugins 插件示例demo 前言 Introduction 导言 Learn how to build a simple todo list plugin with no auth 了解如何构建一个简单的待办事项列表插
  • 钉钉机器人接收阿里云物联网平台转发的数据

    开篇先献上效果图 现在钉钉已经成为跟微信一样流行的APP了 社交端微信占了 企业端现在的老大应该是非钉钉莫属了 现在用户数量应该已经超过4亿了吧 疫情期间钉钉可是真火了一把 好了 下面进入正题 1 数据获取 首先数据的来源是接入到阿里物联网
  • 背景差分法示例

    背景差分法 背景差分法是一种很常用而且广泛传感的技术 主要用于背景不动的情况下提取前景 它主要的原理是在当前帧和背景做减法 然后使用threshold进行二值化得到前景掩码 下面是背景减法的示意图 背景差分法主要包含以下两个步骤 1 背景的
  • 如何触发‘isTrusted = true‘点击事件

    前言 isTrusted是DOM属性 只能可读 如果事件是由用户调用的 则该事件是可信的 如果是由脚本调用的 则该事件是不可信的 总的来说就是 如果你是通过正常浏览器方式进行操作 基本无法改变该属性 解决方法 1 使用python的sele
  • Ubuntu16.04安装搜狗输入法 详细教程

    由于自己也是一个刚入门Ubuntu的新手 对很多终端命令 软件的安装都不大了解 这里记录一下Linux版本的搜狗输入法 一开始觉着有个中文版的系统自带的输入法挺好的 结果没有想到拼音确实不是很好用 就根据这篇教程安装好了Linux版本的搜狗
  • Faster RCNN详解

    paper Faster R CNN Towards Real Time Object Detection with Region Proposal Networks Tensorflow faster r cnn github Tenso