搭建wordpress网站/阿森纳英超积分
目标检测算法:Faster-RCNN论文解读
前言
其实网上已经有很多很好的解读各种论文的文章了,但是我决定自己也写一写,当然,我的主要目的就是帮助自己梳理、深入理解论文,因为写文章,你必须把你所写的东西表达清楚而正确,我认为这是一种很好的锻炼,当然如果可以帮助到网友,也是很开心的事情。
说明
如果有笔误或者写错误的地方请指出(勿喷),如果你有更好的见解也可以提出,我也会认真学习。
原始论文地址
点击这里,或者复制链接
https://arxiv.org/abs/1506.01497
目录结构
文章目录
- 目标检测算法:Faster-RCNN论文解读
- 1. 文章内容概述:
- 2. Faster-RCNN流程介绍:
- 3. Anchor/Anchor boxes:
- 4. 损失函数:
- 5. Faster-RCNN训练:
- 6. 总结:
1. 文章内容概述:
目前的检测算法都依赖于“region proposal”算法,虽然SSP-net、Fast-RCNN等技术的进步缩短了检测网络运行的时间,但同时也暴漏了region proposal的耗时。
因此,作者在Fast-RCNN基础上引入了RPN,通过在原来的CNN结构上添加几个卷积层,在实现共享权值的同时,几乎实现了无成本的区域建议方法。
2. Faster-RCNN流程介绍:
论文原图中的流程如下图:
当然,如果你仅仅是想要知道流程怎么样,对其内部不感兴趣的话,可以直接看此图,流程如下:
- 首先,输入一张图片
- 然后,将这张图片送给CNN架构,其输出一个特征图
- 然后,利用RPN网络产生一些区域建议框
- 其次,将区域建议框映射到特征图上,并使用ROI Pooling方法产生固定长度的输出
- 然后,把ROI Pooling输出的值用于回归和分类即可
**但是,上面的流程其实非常的简短并且有些地方充满疑惑性。**因此,网上有前辈们根据pytorch官方代码和论文,总结了一张详细的流程图(来自参考资料1):
对上图进行简单的说明:
- 首先,将图片缩放到指定尺寸,然后送给去除了全连接层的VGG16,其输出一张特征图
问题:为什么要缩放到指定尺寸?
明明有了ROI Pooling(无论输入,输出大小固定),为什么还需要缩放到指定尺寸。这是当时的实现工具所限制的,当时还没有如tensorflow、pytorch等简单的框架,因此考虑到方便,还是将图片缩放到同样的尺寸,方便处理。
-
然后,特征图分两步走,一步是送进RPN,一步是送给ROI Pooling
- RPN部分:首先,根据特征图遍历生成所谓的anchors;然后将特征图经历一个3*3卷积层,再分别进行回归(校准anchor)和分类(判别anchors)。上图RPN结构中,上面路径为分类,下面路径为回归
-
接着,利用RPN生成的建议框(就是上面校准后的anchors)映射于特征图上,并将每个建议框对应的特征图内容(大小不同)提取出进行ROI Pooling操作,输出对应的ROI Pooling特征向量(长度相同)。
-
最后,将ROI Pooling特征向量进行两个全连接操作,然后进行分类和回归(softmax)
下面,对上面的关键知识点进行解读:
3. Anchor/Anchor boxes:
RPN是Faster-RCNN中最为重要的结构,我们首先需要明白其目的:生成好的区域建议框。
那么,看论文原图:
首先,对上图进行简单说明,然后再细细解读细节。上图中的conv feature map,就是CNN架构最后输出的特征图,红色的框,称之为滑动窗口(sliding window)。即,在特征图上滑动一个窗口,这个窗口将特征图的n*n(图中为3*3)作为输入,将最后的输出(图中的256-d)再送给分类与回归。
其实,不难看出,这个所谓的滑动窗口,就是一个3*3卷积层,没什么好神奇的。这也对应了最开始Faster-RCNN的3*3卷积层。
解释:上面的数字含义
256-d,这是维度的意思。因为在Faster-RCNN论文中,CNN架构采取的是ZF模型,该模型最后一个卷积层输出的特征图通道数就是256维。同理,如果换为VGG16,那么此处应该为512-d。
k anchor boxes,需要知道的是anchor boxes就是我们的区域建议框,不过此时的区域建议框还是很粗暴的,因为它没有经过分类和回归的修正。其中的k表示数量的意思。
2k scores和4k coordinate,一个是分类的得分(概率值),一个是坐标值。2k,表示一个框2个值(正例概率+负例概率),那么k个框,就是2k个值。同理,4k,表示一个框4个坐标值(x+y+w+h),那么k个框就是4k个值。
解释:anchor boxes是如何产生的
首先,Anchor一般指框的中心,而Anchor Boxex才指的是框。
从上图其实不难看出,k个anchor boxes的中心都用蓝色虚线对应了滑动窗口的中心,**这意味着滑动窗口(可移动的)每个中心都会产生k个anchor boxes。我们又知道,滑动窗口其实就是一个3*3卷积层,而特征图就是其输入,那么意味着特征图每个点都会产生k个anchor boxes。**在原文中,k取9。
上面解决了第一个问题,即anchor boxes如何产生的。那么,还有一个问题,每个点都会产生k个anchor boxes,这个anchor boxes有没有什么要求?其实这个是人为定的,而在论文中,作者认为采取三个比例和三个长宽比,这样就会产生3*3=9个框,如下图所示(自己画的):(具体到代码,一般会给定一个基础的anchor,后面的则根据比例等生成)
解释:一张特征图上的Anchor boxes数量
我们假设原图大小为400*400,而CNN架构采取VGG16,那么可以知道原图经过VGG16后,得到的特征图其实缩小了16倍(4个池化层,每个缩小2倍)。
那么,总共的Anchor boxes数量为:
(400/16)*(400/16)*9 = 5625
问题来了,五千多个的建议框实在太多了。作者于是精选了256个合适的建议框,并且正例和负例的比列为1:1。
怎样判断建议框是否合适呢?满足下列条件即可:
- IOU > 0.7的建议框为正例
- IOU最大的建议框为正例
- IOU < 0.3的建议框为负例
- 处于0.3和0.7之间的建议框直接忽略
解释:NMS与越界剔除
获取到建议框后,仍然需要进行NMS(非极大值抑制,不清楚的可以看我RCNN论文解读)和越界剔除(即建议框超出了原图,需要去掉)。
解释:下图中的18和36是怎么得到的?
首先,18和36都是代表通道数或维数。36=4*9,即9个框,每个框4个坐标值,其对应的数据格式应该为:
[batch_size,4*9,W,H]
18=2*9,就是9个框,每个框对应2个类别值(正例或负例),其对应的数据格式为:
[batch_size,2*9,W,H]
问题:anchor boxes产生在原图还是特征图?
其实从我个人的角度来说,anchor boxes产生在原图和特征图上区别不大。比如产生在原图,那么你可以通过除以16来映射到特征图上(VGG16),产生在特征图上同理。
但是,从实际角度来说,anchor boxes是产生在原图的。为什么这么说?因为我们需要计算anchor boxes与真实框的IOU值,这从一定程度上已经告诉我们了它就是产生在原图的(除非你想多计算一步,多浪费点资源)。
RPN中的回归怎么实现?
这个怎么讲呢,就是常见的框回归问题,几乎和RCNN中的框回归一模一样,没什么特殊的地方,如果你感兴趣,可以打开我的博客主页,找到RCNN论文解读中的部分。或者直接复制下面链接:
https://blog.csdn.net/weixin_46676835/article/details/129929232
4. 损失函数:
Faster-RCNN的损失函数,中规中矩,和Fast-RCNN变换不大。
具体公式如下:
其中:
- i表示在某一个batch中的第i个anchor boxes
- Pi表示anchor框包围的对象为不同类的概率(比如总共20各类,分别为各类的概率值)
- Pi*取{0,1},其值由i这个anchor是否为正例决定,为正例则取1,否则取0。这意味着只有该值取1时,回归才计入损失,也即只有包含对象的框才值得计入损失,否则没啥意义。
- ti表示第i个anchor对应的4个坐标值,ti*为真实框的坐标值
- 在论文中,Ncls取batch_size的数目(假设为256),Nreg取特征图的大小(假设输入图片600*1000,VGG16架构,则特征图大小约为2400),而λ是用来平衡两者的大小关系,此时取2400/256,约为10。
- 在代码中,直接让Ncls和Nreg都取batch_size大小,这样λ直接取1即可,方便简单。
而Lcls则是常用的分类损失函数,即交叉熵损失函数:
而Lreg则是目标检测领域常用的平滑L1损失函数,即:
5. Faster-RCNN训练:
现在想想,Faster-RCNN的训练流程其实和它的Anchor一样重要。
其实,在如何训练Faster-RCNN上,作者提出了三种方法,分别是4步交替训练、近似联和训练、非近似联合训练。
简单说说这三个方法:
- 交替训练:作者采取的方法,后面详细说
- 近似联合训练:即将RPN和Fast-RCNN训练时合并为一个网络。前向传递时RPN生成区域建议框,然后这些区域建议框再送给Fast-RCNN。反向传递时,就正常反向传播,只是对于共享的卷积层(即CNN架构部分),将RPN损失和Fast-RCNN损失合并。
- 这个方法容易实现,但是忽略了anchor boxes坐标的导数值,即反向传播时不考虑anchor boxes的导数(这也是近似的由来)。
- 非近似联合训练:非常复杂,不考虑
作者最终选择了交替训练的方法来训练Faster-RCNN,具体流程如下:
- 首先,肯定是把CNN架构(这里设为VGG)放在ImageNet上训练好
- 然后,VGG加上RPN网络部分(权值/卷积共享思想),开始训练RPN,其生成一系列的区域建议框
- 第一次训练Faster-RCNN(不包含RPN部分,更加准确的来说是训练Fast-RCNN)
- 再次训练RPN,得到新的区域建议框
- 第二次训练Faster-RCNN(不包含RPN部分,更加准确的来说是训练Fast-RCNN)
- …(迭代重复直至收敛,作者这里发现两次左右就收敛了)
6. 总结:
Faster-RCNN是两阶段检测的集大成之作,吸收了前面的所有精华。其主要的贡献在于:
- 提出了RPN结构,并巧妙利用了卷积共享的方法减少计算量
- 提出了anchor的思路
- 交替训练方法
相关文章:

目标检测算法:Faster-RCNN论文解读
目标检测算法:Faster-RCNN论文解读 前言 其实网上已经有很多很好的解读各种论文的文章了,但是我决定自己也写一写,当然,我的主要目的就是帮助自己梳理、深入理解论文,因为写文章,你必须把你所写的东西表…...

基于Python的接口自动化-Requests模块
目录 引言 一、模块说明 二、Requests模块快速入门 1 发送简单的请求 2 发送带参数的请求 3 定制header头和cookie 4 响应内容 5 发送post请求 6 超时和代理 三、Requests实际应用 引言 在使用Python进行接口自动化测试时,实现接口请求…...

Vue框架中监测数组变化的方法
在 Vue 中,如果直接对数组进行操作,比如使用下标直接修改元素,数组长度不变时, Vue 是无法监测到这种变化的,导致无法触发视图更新。针对该问题,总结如下解决方法: 一、使用 Vue.js 提供的方法…...

PHP isset()函数使用详解,PHP判断变量是否存在
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 isset 一、判断变量是否存在二、判断变量是否为NUL…...

2021~2022 学年第二学期《信息安全》考试试题(A 卷)
北京信息科技大学 2021~2022 学年第二学期《信息安全》考试试题(A 卷) 课程所在学院:计算机学院 适用专业班级:计科1901-06,重修 考试形式:(闭卷) 一、选择题(本题满分10分,共含10道小题,每小题…...

通俗讲解元学习(Meta-Learning)
元学习通俗的来说,就是去学习如何学习(Learning to learn),掌握学习的方法,有时候掌握学习的方法比刻苦学习更重要! 下面我们进行详细讲解 1. 从传统机器学习到元学习 传统的机器学中,我们选择一个算法&…...

生成全球定位系统、伽利略和北斗二号的Matlab代码及实际数据捕获文件,为测试功能提供完整信号与频谱
使用Matlab生成和分析GNSS信号(第一部分) 全球导航卫星系统(Global Navigation Satellite System, GNSS)是一个提供全球覆盖的,定位、导航、时间传递服务的系统。由全球定位系统(GPS),俄罗斯的格洛纳斯(GLONASS),欧洲…...

Android 14 版本变更总览
Android 14 版本 Android 14 总览Android 14 功能和变更列表行为变更:所有应用行为变更:以 Android 14 或更高版本为目标平台的应用功能和 API 概览 Android 14 总览 https://developer.android.google.cn/about/versions/14?hlzh-cn 文章基于官方资料…...

内网安全:Cobalt Strike 工具 渗透多层内网主机.(正向 || 反向)
内网安全:Cobalt Strike 工具 渗透多层内网主机. Cobalt Strike 是一款以 metasploit 为基础的 GUI 的框架式渗透工具,又被业界人称为 CS。拥有多种协议主机上线方式,集成了端口转发,服务扫描,自动化溢出,…...

ChatGPT 五个写论文的神技巧,让你的老师对你刮目相看!
导读:ChatGPT这款AI工具在推出两个月内就累积了超过1亿用户。我们向您展示如何使用ChatGPT进行写作辅助,以及其他一些有用的写作技巧。 本文字数:2000,阅读时长大约:12分钟 ChatGPT这款AI工具在推出两个月内就累积了超…...

模型服务文档自动生成,要素追溯关联、结构规范易读|ModelWhale 版本更新
整装待发的初夏,ModelWhale 持续聚焦 AI for Science,针对大模型等前沿带来了新一轮的版本更新,期待为你提供更好的使用体验。 本次更新中,ModelWhale 主要进行了以下功能迭代: • 新增 模型服务文档自动生成…...

《微服务实战》 第三十一章 ShardingSphere - ShardingSphere-JDBC
前言 Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的…...

【论文阅读】Twin neural network regression is a semi- supervised regression algorithm
论文下载 GitHub bib: ARTICLE{,title {Twin neural network regression is a semi- supervised regression algorithm},author {Sebastian J Wetzel and Roger G Melko and Isaac Tamblyn},journal {Machine Learning: Science and Technology},year {2022},volum…...

java之反射机制和注解(更新中......)
Reflect在文档中的位置: 文档链接:https://docs.oracle.com/javase/8/docs/api/index.html 用于获取类或对象的反射信息。 常用的反射机制重要的类: java.lang.Class:整个字节码,代表一个类型。包含了以下三块内容&a…...

【Unity入门】25.入门结课Demo--神鸟大战怪兽
【Unity入门】入门结课Demo--神鸟大战怪兽 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一) 前言 经过了两个月的学习,我们也顺利的完成了入门课程,最后就用一个Demo作为我们的结课句号吧&am…...

HTTP协议基本格式
HTTP即HyperText Transfer Protocol(超文本传输协议),HTTP基于TCP/IP协议传输数据。 目录 Chrome抓包Fiddler代理抓包HTTP协议格式HTTP请求首行URL方法Get方法Post方法Get与Post的区别 请求报头中的属性Cookie和SessionCookie与Session的区别…...

在 ubuntu 22.04 上配置界面服务器 xrdp
文章目录 图形界面解决方案VNCXRDP XRDP 实例安装和配置使用 XRDP 使用原理谁更快 : X11转发 > XRDP > VNC 图形界面解决方案 1. VNC 2. XRDP 3. X11 ssh : // https://blog.csdn.net/u011011827/article/details/131065690VNC 外部开放端口 用的 是 5901-5910 桌面用…...

53、基于51单片机蓄电池充电器过充过放保护LCD液晶屏显示系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)
方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&…...

【C/C++】详解 函数重载和应用
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c系列专栏:C/C零基础到精通 🔥 给大…...

WPF开发txt阅读器4:字体控件绑定
文章目录 控件折叠字体尺寸绑定选择字体字体的中文名称 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录 控件折叠 作为一个txt阅读器,至少能够设置文字字体、尺寸,段落行间距等,还得有护眼模式等一系…...

CoreDX DDS应用开发指南(8)开发订阅应用程序
11 应用数据类型Application Data Types 11.1 概述 每个DDS主题都包含一个且仅包含一个数据类型,这是在主题上进行通信时使用的用户定义的数据类型。在大多数情况下,应用程序开发人员以数据定义语言(DDL)格式定义这些DDS数据类型。编译器用于将这些DDL类型定义转换为适当的…...

基于Python的接口自动化-读写配置文件
目录 引言 configparser模块功能介绍 引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值。为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这…...

useEffect的基础知识和底层机制
useEffect 是 React 中一个重要的 Hook,用来处理组件的副作用操作。它的基础知识包括两个方面:执行时机和参数。 执行时机: useEff ect 的执行时机包括两种情况: 组件挂载时,即第一次渲染之后。组件更新时ÿ…...

chatgpt赋能python:Python中如何加空格
Python中如何加空格 Python是一门广泛应用于科学计算、数据分析、人工智能、Web开发等领域的高级编程语言。在Python编程过程中,经常需要使用到空格,以实现程序的格式化和美观,同时也有助于提高代码的可读性和可维护性。本文主要介绍Python中…...

软件测试之路已不再是坦途
去年下半年才跳了槽,过程非常顺利,没有经历大家所说的工作荒的境地,所以一直没有直观地感受到软件测试就业形势到底有多严峻。 近来看到一些机构频频发出某某测试员在糟糕的就业形势下逆袭拿下XXW的某厂offer,然后推荐测试进阶课…...

扫雷——C语言实现
扫雷 文章目录 扫雷实现代码什么是扫雷基本功能实现显示选择菜单定义几个二维数组?确定数组大小初始化数组布置地雷打印展示数组排查地雷记录指定区域周围地雷的个数判断排雷成功排查地雷实现代码 基本功能的实现代码和效果展示 拓展功能简化游戏界面改变字体颜色实…...

CSS基础学习--6 CSS Text(文本)
一、文本颜色 color:red; 颜色属性被用来设置文字的颜色。 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000一个RGB值 - 如: RGB(255,0,0)颜色的名称 - 如: red body {color:red;} h1 {color:#00ff00;} h2 {color:rgb(255,0,0);} 二、文本的…...

高精度电压源的应用场合有哪些
高精度电压源是一种能够提供恒定、稳定电压输出的设备,被广泛应用于各种领域。高精度电压源是现代电力、通信、控制等领域中重要的测试仪器之一,其主要功能是提供稳定可靠的直流或交流电源,并具有高精度和高分辨率的特点。在实际应用中&#…...

Android约束布局
一、嵌套布局效率可能很低。 在 Android 开发中,我们常常需要使用嵌套布局来实现某些较复杂的界面效果。但是嵌套层级太深会带来一些问题,主要包括: 视图层级过深,导致内存占用过高和性能下降。Android 需要为每个 View 对象分配内存,嵌套层级过深会创建很多 View 对象,占用较…...

selenium基础语法
文章目录 selenium基础语法1.定位页面元素2.元素的操作1) 模拟键盘输入(send_keys)2) 点击操作(click)3) 清除去对象输入的文本内容(clear)4) 获取文本(gettext) 3. 等待4. 信息打印5. 窗口6. 导航7. 弹窗8. 鼠标和弹窗9.选择框10.文件上传11.屏幕截图 selenium基础语法 1.定位…...