【机器学习】经典目标检测算法:RCNN、Fast RCNN、 Faster RCNN 基本思想和网络结构介绍

文章目录

    • 三者的比较:RCNN、Fast RCNN、 Faster RCNN
      • 一、框架的对比
        • 1.三者都是二阶算法,网络框架比较:
        • 2.三者的优缺点比较:
    • RCNN
      • 一、RCNN系列简介
      • 二、RCNN算法流程的4个步骤
      • 三、RCNN存在的问题
      • 四、论文解析补充
        • 1.R-CNN提出了两个问题
        • 2.重要结论
    • fast-RCNN
      • 一、fast-RCNN简介
      • 二、fast-RCNN算法的3个步骤
        • 1.概念:训练数据的采样(正负样本)
        • 2.分类器
        • 3.边界框回归器
        • 4.多任务损失函数
      • 三、论文解析补充
        • 1.R-CNN的缺点
        • 2.Fast R-CNN方法的几个优点
        • 3.Fast R-CNN引入Rol层
        • 4.尺度不变性
        • 5.最长时间的花费地方
        • 6.SVD压缩参数
        • 7.重要结论
    • Faster RCNN
      • 一、Faster RCNN简介
      • 二、Faster RCNN算法流程
        • 1.算法流程
        • 2.Faster RCNN 网络的基本结构
        • 3.RPN网络(Region Proposal Network)
          • 3.1RPN网络结构
          • 3.2 anchor的定义
          • 3.3 RPN生成proposal的过程
        • 4.Faster RCNN框架
      • 三、论文解析补充
        • 1.fastrcnn分配两种anchor
        • 2.三种训练网络
        • 3.交替训练的过程
        • 4.感受野的问题
        • 5.小知识点

三者的比较:RCNN、Fast RCNN、 Faster RCNN

一、框架的对比

1.三者都是二阶算法,网络框架比较:

在这里插入图片描述

2.三者的优缺点比较:

在这里插入图片描述

RCNN

一、RCNN系列简介

R-CNN系列(R-CNN,fast-RCNN,faster-RCNN)是使用深度学习进行物体检测的鼻祖论文,其中fast-RCNN 以及faster-RCNN都是延续R-CNN的思路。

R-CNN新提出了CNN卷积特征提取方法和微调。

R-CNN全称region with CNN features,其实它的名字就是一个很好的解释。用CNN提取出Region Proposals中的featues,然后进行SVM分类与bbox的回归(定位置)。

【RCNN网络结构】
在这里插入图片描述在这里插入图片描述

二、RCNN算法流程的4个步骤

重要思想:
(1)通过专门模板去生成候选框(RPN),寻找前景以及调整边界框(基于锚框)
(2)基于之前生成的候选框进行进一步分类以及调整边界框(基于建议框)
具体步骤:
1.一张图像生成1k~2k个候选区域(使用Selective Search方法)
2.对每个候选区域,使用深度网络提取特征(CNN)
3.特征送入每一类的SVM分类器,判别是否属于该类(SVM)
4.使用回归器精细修正候选框位置
步骤详解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、RCNN存在的问题

1.测试速度慢
2.训练速度慢(过程复杂,cnn、svm、回归网络都要训练)
3.训练所需空间大
在这里插入图片描述

四、论文解析补充

1.R-CNN提出了两个问题

1.如何用CNN定位目标
2.标注数据太少,使用迁移学习的思想(微调)
关于迁移学习(微调):什么是微调?
图像分类:Image:Net 目标检测:PASCAL VOC

2.重要结论

1.在选择图片的时候,会选择比区域大16个像素的图片,这样边缘信息也会利用上。在卷积的时候信息可能丢失。实验证明扩充16个像素 效果会更好
2.最后分类会多出来一类,这一类代表的是背景类。
3.CNN和SVM使用不同的正负样本划分方法。类别分类器使用0.3的阈值
4.可视化学习的特征:高层提取的特征高层每一个不同的通道,学习的就是不一样的东西。eg:1学的是人,2学的是点状
5.R-CNNBB(Bounding box regression)边界框回归
这是RCNN定准确定位的关键,定位正确的位置什么是R-CNNbb?在这里插入图片描述
6.这里的△x,△y…都是通过训练SVM模型实现回归任务得到的。
上述公式预测的是△x,△w,而作者预测的是dx,dw,这是为什么?
1.因为△w是宽放大的比例,这里只可能为正数,但是通过svm模型预测出来的可能存在负数。通过先预测出来dw (也可能是正负),那么通过exp的函数一定是正数即可保证△w为正数。
2.如下图所示,当使用d计算的话,对于两张相同预测和真实之间的损失函数的值相同。在这里插入图片描述

fast-RCNN

一、fast-RCNN简介

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal VOC数据集上)。
在这里插入图片描述
注意:
这里与RCNN有明显的不同,RCNN是独立的四步,这里只有两步,所以大大加快了训练速度。
在这里插入图片描述

二、fast-RCNN算法的3个步骤

1.一张图像生成1K~2K个候选区域(使用Selective Search方法)
2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
3.将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
在这里插入图片描述
注意:
与RCNN在第二步有所不同,RCNN是把候选框送入CNN,而fast-RCNN是把整张图片送进去。
在这里插入图片描述

1.概念:训练数据的采样(正负样本)

1.正样本就是感兴趣的部分,负样本就是没有我们需要的样本(可以理解为背景)
2.训练的时候不是用ss算法中的全部候选框,只是使用了一部分:只要候选框和我们的真实的目标边界框的iou大于0.5,那么就认为是正样本,不是所有的正样本都会被使用,也是随机选择使用的。
3.RoI Pooling Layer
在这里插入图片描述

2.分类器

在这里插入图片描述

3.边界框回归器

在这里插入图片描述
在这里插入图片描述

4.多任务损失函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、论文解析补充

1.R-CNN的缺点

1.训练是多阶段的
2.训练需要大量的空间和时间
3.因为每张图片需要2000个候选框,所以训练的很慢
主要原因:R-CNN需要一个CNN前向传播,但是没有使用到共享计算。这里使用SPPnet的思路
下边介绍一下SPPnet引入的新思想 什么是SPPnet?
在这里插入图片描述
这里使用到sppnet思想空间金字塔池化层
和RCNN的区别
RCNN一般使用的是3*3步长为2的最大池化层,spp层就是限制了输出的尺寸,动态池化控制输出尺寸,不需要想RCNN限制输入图片的尺寸了
新思想:
不传候选区域,直接传整张图片。这一块解决了上述CNN因为候选框太多处理图片慢的问题。
缺点:
无法更新空间金字塔池化之前的卷积层

2.Fast R-CNN方法的几个优点

1.mAP高于R-CNN、SPPnet
2.训练是单阶段的,使用多任务损失
3.训练可以更新所有网络层 (包括卷积层和全连接层)
4.特性缓存不需要磁盘存储

3.Fast R-CNN引入Rol层

RoI层只是SPPnets中使用的空间金字塔池化层的特殊情况,其中只有一个金字塔层。

4.尺度不变性

有两个目标,一个目标大,一个小,如果都能被识别,证明模型有很好的尺度不变性。

5.最长时间的花费地方

对于检测,要处理的roi数量很大,并且近一半的前向通过时间花在计算全连接层上

6.SVD压缩参数

中间的对角矩阵,左上的最重要,右下的相对不重要,故取左上一部分。把nn 变tt.相当于把n压缩到t,压缩的越多,后续的参数越少。
在这里插入图片描述

7.重要结论

1.sppnet只微调全连接层,把卷积层全部冻结。
fastrcnn证明了微调卷积层也是很重要的,实验证明调越靠前的卷积层,效果会更好。
2.多任务训练能提高平均精度。
3.多尺度训练能提高平均精度。
4.大量的训练数据能提高平均精度。
5.使用softmax替换SVM能提高平均精度。
6.使用更多的候选框不一定能提高平均精度。会出现先上升再向下的趋势
7.不需要再单独训练分类器边界框回归器

Faster RCNN

一、Faster RCNN简介

Faster RCNN 是作者 Ross Girshick 继 RCNN 和 Fast RCNN后的又一力作。同样使用 VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及cOco竞赛中获得多个项目的第一名。

二、Faster RCNN算法流程

Faster RCNN = RPN + Fast RCNN
RPN 是指 Region Proposal Network,建议区域生成网络。 Faster RCNN 中用 RPN 来代替了 Fast RCNN 中的SS算法。

1.算法流程

(1)将图像输入网络得到相应的特征图。

(2)使用RPN网络生成候选框,将RPN生成的候选框投影到特征图上获得ROI区域的特征矩阵。

(3)将每个ROI区域的特征矩阵通过 ROI pooling 层缩放到7x7大小的特征图,接着将特征图展平为vector,之后通过一系列全连接层得到预测结果。

2.Faster RCNN 网络的基本结构

在这里插入图片描述

3.RPN网络(Region Proposal Network)
3.1RPN网络结构

在这里插入图片描述
图中的 conv feature map 是图像输入网络得到相应的特征图,通过sliding window处理之后产生一个256-d的一维向量。该向量通过两个全连接层,分别输出分类概率scores和边界框回归参数coordinates,其中k是指 k个 anchor boxes,2k个scores是每个 anchor box 分别为前景和背景的概率(注意这里只区分前景和背景,所有的类别都归为前景),4k个coordinates是因为每个anchor box 有四个参数。
注意
2k cls的2分别代表是背景不是背景
4k reg的4代表中心坐标、宽、高

3.2 anchor的定义

anchor不是候选框(Proposal),后面会提到二者的区别。
在这里插入图片描述
我们在特征图中找一个点,就可以在原图中找到对应的一个像素点,以该像素点为中心,画出9个不同大小和长宽比的框,称为anchor 。如下图所示,这些anchor里面可能包含目标,也可能没有目标。因为我们在一张图中想找的的目标的大小和长宽比并不是固定的,所以这里用9个不同大小和长宽比的anchor来进行预测。
注意
这里要做特征图向原图的映射
如果找?
x = 原图的宽度/特征图的宽度(取整)* 3 (x = 步距 * 滑动窗口大小)
y = 原图的高度/特征图的高度(取整)* 3 (y = 步距 * 滑动窗口大小)
为什么是9个anchor呢?
论文中给出了每个anchor的面积和长宽比:

所以特征图中的每个位置在原图中都会生成 33=9 个anchor,如下图所示,蓝色的三个anchor是面积为128128的,红色是面积为256256的,绿色是512512的。
在这里插入图片描述
如何计算感受野?
在这里插入图片描述
论文细节
在这里插入图片描述

3.3 RPN生成proposal的过程

对于一张 1000x600x3 的图像(三通道),用3x3的卷积核进行特征提取得到60x40的特征图,则共有 60x40x9 (约2w个)个anchor。忽略超过图片边界的 anchor 后,剩下约 6000 个anchor。

对于这6000 个 anchor,通过RPN生成的边界框回归参数将每个 anchor 调整为proposal(前面提到了每个anchor经过RPN都输出2个概率和4个边界框回归参数),这里就能看到anchor和proposal的区别。这个过程就是 RPN 生成候选框的过程。

RPN 生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩下 2000 个候选框。

4.Faster RCNN框架

在这里插入图片描述
Faster RCNN 在Fast RCNN的基础上更进一步,将候选框生成也融入到CNN网络中,使得 候选框生成、特征提取、候选框分类、候选框边界回归这四大部分都结合在一个CNN网络中,避免了分步训练,实现了真正端到端的目标检测。

三、论文解析补充

1.fastrcnn分配两种anchor

1)与目标框相交最大的anchor 2)IOU>0.7的anchor

2.三种训练网络

1)交替训练本篇论文使用的就是交替训练
2)近似联合训练存在的问题:RPN在反向传播时,不能计算偏导数。所以求出来的值只是一个近似值。
3)非近似联合训练

3.交替训练的过程

1)单独训练RPN网络
2)单独训练RCNN网络,并且使用第1步训练的RPN网络
3)使用RCNN网络初始化RPN网络(这里固定了卷积层,仅仅微调了RPN独有的结构)
4)固定了卷积层,仅仅微调了RCNN独有的结构
在这里插入图片描述

4.感受野的问题

ZF感受野171
VGG感受野228
在这里插入图片描述
为什么能预测的比感受野更大?
根据可见部分,可以粗略预测(人们在看东西的时候,也可以根据已知推未知)

5.小知识点

1)coco数据集上小目标图像比较多
2)RPN上只跑了300个候选区域(通过实验所得)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端八股----JVM篇

上图中线程1,2如果资源被抢占了,则程序计数器记录一下执行的行号,等到资源就绪后会从记录的行号继续向后执行。 Java8把静态变量以及常量放到了线程的本地内存原空间中(避免放在堆中不可控)。 👆图中第二种情况不太容易出现…

Stable Diffusion WebUI 生成参数:宽度/高度/生成批次/每批数量/提示词相关性/随机种子

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文将继续了解 Stable Diffusion WebUI 的生成参数,主要内容有:宽度、高度、生成批次、每批数量、提示词相关性、随机种子。希望能对你…

【目标检测】YOLOv2 网络结构(darknet-19 作为 backbone)

上一篇文章主要是写了一些 YOLOv1 的原版网络结构,这篇文章一样,目标是还原论文中原版的 YOLOv2 的网络结构,而不是后续各种魔改的版本。 YOLOv2 和 YOLOv1 不一样,开始使用 Darknet-19 来作为 backbone 了。论文中给出了 Darkne…

jupyter notebook使用教程

首先是打开jupyter notebook 下载安装好之后,直接在命令行中输入‘jupyter notebook’即可跳转到对应页面 还可以进入想要打开的文件夹,然后再文件夹中打开中断,执行‘jupyter notebook’命令,就能够打开对应文件界面的jupyter …

关于前端的学习

目录 前言: 1.初识HTML: 1.1超文本: 1.2标记语言: 2.关于html的基本框架: 3.HTML基本文字标签: 3.1.h标题标签: 3.3 文本内容: 3.4换行的和分割的: 3.5 特殊文字标签: 3.5.1表面上看着三对的结果呈现都是一样的: 3.5.2但是其背后的效果其实是不一样的: 3.6转义字符:…

25考研|北大软微会「爆炸」吗?

软微不是已经爆炸了吗? 大家去看看他的录取平均分就知道了,没有实力千万别碰,现在考软微已经不存在捡漏之说。 110408的复试线已经划到了465分,这个人真的不低了,因为有数学一和408两个比较难的专业课,复…

Docker之大鲸鱼

什么是Docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 Docker常见命令? docker run -d \--name mys…

【GIS系列】GeoTools简介及工具类分享

本文将对GeoTools相关概念进行介绍,同时会给大家分享我工作中用到的工具类及使用方法。 作者:后端小肥肠 目录 1.前言 2. GeoTools简介 3. Geotools使用示例 3.1. 开发环境搭建 3.1.1. 所需版本和工具 3.1.2. pom依赖​​​​​​​ 4. 工具类介绍…

擂台赛-安全攻防之使用openssh后门获取root密码实战

前言 大家好,我是沐风晓月,我们开始组队学习了,介绍下我们的情况: 这几天跟队员 迎月,虹月,心月,古月打擂台,我和心月一组,相互攻占对方服务器。 终于在今早凌晨三点拿…

【算法】欧拉筛(线性筛)模版

蓝桥杯题目 试题 B: 双子数 本题总分:5 分 【问题描述】   若一个正整数 x 可以被表示为 p2 q2,其中 p、q 为质数且 p , q,则 x 是一个 “双子数”。请计算区间 [2333, 23333333333333] 内有多少个 “双子数”? 【答案提交】…

【目标检测】2. RCNN

接上篇 【目标检测】1. 目标检测概述_目标检测包括预测目标的位置吗?-CSDN博客 一、前言 CVPR201 4经典paper:《 Rich feature hierarchies for accurate object detection and semantic segmentation》,https://arxiv.org/abs/1311.2524, 这篇论文的算法思想被称…

Css提高——calc函数、过渡

1、calc函数&#xff1a; 2、过渡 例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>过渡exerci…