Faster-RCNN网络详解

news2024/11/28 12:45:45

文章目录

  • 一、前言
  • 二、Faster-RCNN算法原理
    • 2.1.RPN结构
      • 2.1.1感受野的计算与候选框的生成
      • 2.1.2正负样本
    • 2.2.RPN的损失计算
      • 2.2.1对于分类损失
      • 2.2.2.边界回归参数
    • 2.3.Fast-RCNN损失
    • 2.4.整体训练
  • 三、总结
  • 四、参考博客、视频、论文地址
    • 4.1.B站优质UP视频
    • 4.2.系类论文地址
    • 4.3.个人相应笔记
      • 4.3.1数据集
      • 4.3.2目标检测系列

一、前言

前面铺垫都是为了学习最终的Faster-RCNN网络,为此学习了PASCAL VOC数据集、COCO数据集、评价指标、SS算法、R-CNN网络、Fast-RCNN网络,这些可以到本文参考博客查看。

本文有两个目的,其一是作为本人自己的笔记,方便自己巩固复习;其二,希望拙劣的见解能够帮助到正在自学的朋友。

在这里插入图片描述
Faster R-CNN提出了一个FPN的结构使得检测速度进度加快,推测速度达到5fps,也即每1秒可以检测5张图片。

二、Faster-RCNN算法原理

在这里插入图片描述
我们可以认为Faste-RCNN是在Fast-RCNN的基础上进行修改的,主要改的部分就是候选框的生成,改为了RPN结构,也就是说Faster-RCNN = Fast-RCNN + RPN,接下来我们先介绍什么是RPN?

2.1.RPN结构

在这里插入图片描述
上图右边是原论文给的关于RPN的结构,在输入整张图片得到feature map后,我们在feature map上滑动找到滑动窗口中心点在原始图上的中心点(可以根据映射比例关系得到),然后在原图上以该点为中心计算出k个anchor boxes,这里的anchor boxes即为初步生成的候选框,k为指定的一个大小,因为每个目标的大小和比例不一样,所以需要多个候选框来尽可能的找到目标。在原论文中k=9(主要选取了3个比例,分为1:1,1:2,2:1,大小也有三个,分别为:128✖128, 256✖256, 512✖512。也即k = 3✖3 = 9 )

256-d表示的是一个256维的一维向量,256是因为feature map的channels为256,如果backbone是VGG16则会生成512维的一维向量。
2kscores指的是,长度为2k的全连接层,每两个数来表示对k个候选框背景与目标的概率预测,总共k个候选框,所以2k个scores。
4k是指对k个候选框的边界框回归参数的预测,每个框需要4个参数。

在这里插入图片描述

2.1.1感受野的计算与候选框的生成

1)感受野的计算

论文中也提到了对于feature map上面每一个pixel的感受野,当网络backbone为ZF时感受为171,VGG16时为228,下图为ZF时的感受野计算过程:
在这里插入图片描述
PS:得到每一个anchor的背景前景预测以及边界框回归参数后,我们通过RPN生成的边界框回归参数与前景背景预测分数调整这个初步生成的候选框来生成Fast-RCNN的输入候选框。

2)候选框的生成

对于一张1000✖600✖3的图片在经过backbone输出大小为60*40的feature map,对于上面的每一个pixel,有九个初步候选框,大约为60乘以40✖9 大约20k个初步候选框,排除掉超出图片范围的大约剩下6k个,再经过RPN得到的cls得分,采取极大值抑制的方法筛选出大概2k个候选框,IOU设置为0.7,最终得到的候选框数量与SS算法生成的基本相同,大约2k个。

2.1.2正负样本

训练数据的采样,也即正样本与负样本。

对于每张图片大概采集256个样本,128个正样本,若正样本不够128,则负样本补上数量就行,例如正样本只有100,则负样本采取156个。正样本有两种方式来确定:1)是取与真实框IOU大于0.7的记为正样本;2)将与真实样本IOU最大的作为正样本;第二种方式主要作为第一种方式的补充,防止没有预测的框与真实框IOU大于0.7的极端情况。
负样本由IOU小于0.3的来确定。

2.2.RPN的损失计算

RPN的损失与前面的Fast-RCNN的损失类似,也有两个损失,一个是分类损失,一个边界框回归参数的损失。
在这里插入图片描述

2.2.1对于分类损失

刚看最不理解的就是为什么Ncls不等于Nreg,理论上不应该对于每一个候选框我们需要由它对于前景与背景的预测分数,有边界框的回归回归参数,这样不是256个框就都除以256吗?
后面我的个人理解是:对于分类损失确实只预测了256个框,所以每张图像的256个预测框的前后背景得分交叉熵需要除以256
而对于边界框的回归主要由位置来决定,虽然只使用了256个框但是由2400个位置,每个位置k个框,最后采样提取出来的256个框包含了这2400个位置的信息,所以除以2400。
况且还有一个平衡参数λ=10,这样得到的每个损失的权重为1/256,1/240,基本一样,更能说明其实刚开始想的除以256应该才是正确想法。
事实上对于λ,作者做了一些实验,有结果如下:
> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrcOGolX-1684636829305)(image_7.9db1a8fc.png)]
可以看到实际上各个部分的损失权重对于结果的准确性影响很小。而λ=10是作者实验得到的最佳参数。

在这里插入图片描述

2.2.2.边界回归参数

在这里插入图片描述
RPN的边界框回归损失与Fast-RCNN的边界框回归损失基本一样,不明白的可以去看我的关于fast-RCNN的详解。值得注意的是这里的X,Xa,X*分别指预测的框,anchor box(也即还没有经过RPN调整的框)、真实框的中心x坐标,y,w,h类似分别指框中心y坐标,框宽和高。这里的边界框回归参数都是相对anchor box计算的。

2.3.Fast-RCNN损失

这部分损失请看上一篇博客。本质上计算一模一样。3.目标检测(三)——Fast-RCNN详解

2.4.整体训练

在这里插入图片描述
关于Faster-RCNN的训练,作者有提出几种方法。

1.交替迭代训练,也就是本论文最终采取的方式
2.直接将Fast-RCNN与RPN的损失加在一起训练(Pytorch官方采取的这种方式,相比第一种时间更少,结果也基本一样)
3.作者提到直接加在一起可能会有一点问题,解决方法超出本篇论文的讨论范围。

三、总结

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

写到这里,R-CNN的系列基本学完,后续还有继续写Mask-RCNN的笔记。特别感谢有B站Up主霹雳吧啦Wz的视频讲解,没有博主的无私分享,我感觉自己理解会达不到这样的层次。本系列的博客都是基于他的视频讲解与原论文还有其他优秀博客写的,确实花了不少时间,希望自己能够帮助到正在学习相关知识的朋友。接下来就可以开始阅读Faster-RCNN的源码了。

四、参考博客、视频、论文地址

4.1.B站优质UP视频

B站UP主视频(强推)

4.2.系类论文地址

基于图的分割算法论文

Selective Search算法

R-CNN论文

[Fast-RCNN]([1504.08083] Fast R-CNN (arxiv.org))

[Faster-RCNN](1506.01497v3.pdf (arxiv.org))

4.3.个人相应笔记

4.3.1数据集

1.PASCAL VOC数据集详解
2.MS CoCo数据集详解
3.MAP计算与CoCo评价指标

4.3.2目标检测系列

1.目标检测(一)——SS算法
2.目标检测(二)——RCNN详解
3.目标检测(三)——Fast-RCNN详解


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

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

相关文章

windows11下系统睡眠状态被UpdateOrchestrator唤醒的解决方案

windows11下系统睡眠状态被UpdateOrchestrator唤醒的解决方案 一、问题排查二、问题解决 一、问题排查 最近win11更新后发现会偶尔在睡眠状态下唤醒,CMD中输入powercfg -lastwake命令可以查看唤醒源程序 这里显示唤醒是按下了电源按钮,符合我此次唤醒操…

论文阅读_语音合成_VALLE-X

论文信息 name_en: Speak Foreign Languages with Your Own Voice: Cross-Lingual Neural Codec Language Modeling name_ch: 用你自己的声音说外语:跨语言神经编解码器语言建模 paper_addr: http://arxiv.org/abs/2303.03926 date_read: 2023-04-25 date_publish:…

【Hadoop】一、Apache Hadoop、 HDFS

一、Apache Hadoop、 HDFS 1、Apache Hadoop概述 Hadoop介绍 狭义上Hadoop指的是Apache软件基金会的一款开源软件。 用java语言实现,开源 允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理 Hadoop核心组件 Hadoop HDFS(分布式文…

论文阅读_音频压缩_SoundStream

论文信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: SoundStream: An End-to-End Neural Audio Codec name_ch: SoundStream:一种端到端的神经音频编解码器 paper_addr: http://arxiv.org/abs/2107.03312 doi: 10.1109/TASLP.2021.3129994 dat…

织梦网做城市分站织梦分站群二级目录织梦城市分站教程

一、安装网站 1、上传到服务器上输入www.xxxx.com/install进行安装(具体安装方法找百度一大堆); 可以参考http://www.hlzcb.com/zhimengxueyuan/zhimenganzhuangshiyong/25830.html 2.安装好后台点击后台系统→数据库备份还原→数据还原,点击下面的开始还原数据; 二、设…

第五章 图像处理

文章目录 前言一、图像金字塔1.高斯金字塔2.拉普拉斯金字塔 二、图像轮廓1. 轮廓提取2. 轮廓绘制3. 轮廓特征4. 轮廓近似5. 轮廓标记 三、模板匹配四、直方图1. 对比度2. 绘制直方图3. 均衡化3.1 理论3.2 代码 4. CLAHE 五、图像傅里叶变换5.1 正弦平面波5.2 二维傅里叶变换5.3…

论文阅读_音频压缩_Encodec

论文信息 name_en: High Fidelity Neural Audio Compression name_ch: 高保真神经音频压缩 paper_addr: http://arxiv.org/abs/2210.13438 date_read: 2023-04-27 date_publish: 2022-10-24 tags: [‘深度学习’,‘音频’] author: Alexandre Dfossez, Meta AI, FAIR Team cod…

【产品经理】工作交接

一、前言 相信大家对这样的场景一定不陌生:有一天去找某个业务的负责人,突然被告知调岗了,或是辞职了,更坏的情况是,甚至完全找不到相关人员了,直接导致工作搁置了。这种情况,你应该多少会感到…

函数与递归

函数与递归 函数定义与分类库函数库函数的定义与种类二级查询库函数性质工具的使用c语言中常用的库函数总结 自定义函数函数的参数实参定义形参定义 函数调用传值调用图解分析传址调用图解分析编程题判断一个数是不是素数判断一年是不是闰年实现一个整形有序数组的二分查找。 函…

四元数与旋转矩阵之间的转换

在https://blog.csdn.net/fengbingchun/article/details/130039337 中介绍了相机外参及相机的位姿R,t,其中R为3*3旋转矩阵(R的逆矩阵与R的转置矩阵相同),t为3*1平移向量,R,t组合成3*4的矩阵。 在instant-ngp中执行scripts/colmap2nerf.…

DHT11温湿度传感器

1.认识DHT11 1、概述: DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通空调;汽车;消费品;气象站;湿度调节器;除湿器;家电&#x…

通过cloudflare创建openai api的代理

一、前言 首先你要有一个域名,其次这个域名要托管到cloudfare,所以: 直接在cloudfare购买域名,方便省事!找其他免费域名,再托管到cloudfare,本着一分钱不花的目的,这里提供一个顶级免费公益域…

005 - STM32启动代码

常用汇编指令 指令名称作用EQU给数字常量取一个符号名,相当于C语言中的#define;AREA汇编一个新的代码段或者数据段;SPACE分配内存空间;PRESERVE8当前文件栈需要按照8字节对齐;EXPORT声明一个具有全局属性的标号&#…

聚观早报 | 小冰启动GPT克隆人计划;ofo创始人在美创业改做咖啡

今日要闻:小冰启动“GPT克隆人计划”;ofo创始人在美创业改做咖啡;OpenAI正准备新的开源AI模型;青年失业率首破20%创新高;微软收购动视暴雪获批 小冰启动“GPT克隆人计划” 5 月 16 日,小冰公司…

Spring Boot + Mybtis-plus集成

目录 需求分析Maven 相关依赖配置文件相关流程MybatisPlus配置自动补全参数配置逻辑删除注解乐观锁注解 需求分析 Spring Boot和MyBatis-Plus是目前使用最广泛的Java web开发框架和ORM框架,它们可以很好地协同工作,提供高效和稳定的系统开发和数据操作。…

[答疑]UML精粹里和你视频里说的不太一样

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 第五元素 2023-4-14 20:32 这是是UML精粹里的。潘老师,这个跟你视频里讲的是不是不太一样?还是我理解错了? UMLChina潘加宇 这个&#…

软件最后一步------打包

本文章主要是记将源代码打包成程序 Python 一、安装Pyinstaller (用于打包的库) pip install pyinstaller二、使用参数 参数介绍 选项参数参数解释-hhelp(帮助信息)-vversion(版本号)-c显示命令行窗口-w不显示命令行窗口-F生成结果是一个exe程序,所有依赖项被打…

计算机的基本工作原理

参考资料: L-1.6: Common Bus system| How basic computer works - YouTube 准备好内存单元、不同类型的寄存器,内存和寄存器、寄存器和寄存器之间都是通过总线连接(假设是直接把数据总线、控制总线、地址总线变成一条总线)。 使用多路复用器实现的总线&…

C语言—通讯录

通讯录 通讯录的创建通讯录的初始化通讯录添加联系人信息通讯录删除特定联系人信息通讯录查找特定联系人信息通讯录修改特定联系人信息通讯录排序联系人信息通讯录打印联系人信息通讯录整体代码 通讯录的创建 通讯录中是存放人的信息的,人的信息包括:姓…

数据结构—排序算法交换排序(冒泡快排)

目录 1.交换排序—冒泡排序 1.1冒泡排序基本思想 1.2冒泡排序的实现 2.交换排序—快速排序 1.1快速排序基本思想 1.2基准值划分—分析 1. hoare版: 2. 挖坑法: 3. 前后指针版本 1.3 hoare快排的具体实现 1.4 挖坑法快排的具体实现 1.5 前后指…