目标检测算法:Faster-RCNN论文解读

目标检测算法: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的思路
  • 交替训练方法

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

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

相关文章

N-propargyloxycarbonyl-L-lysine,1215204-46-8,是一种基于赖氨酸的非天然氨基酸 (UAA)

产品描述&#xff1a; N-ε-propargyloxycarbonyl-L-lysine (H-L-Lys(Poc)-OH) 是一种基于赖氨酸的非天然氨基酸 (UAA)。 广泛用于多种生物体中荧光探针的生物偶联。 N- ε- Propargyloxycarbonyl-L-lysine (H-L-Lys (Poc) - OH) is a non natural amino acid (UAA) based on …

Qt6之调用Windows下vc生成的动态链接库dll

Qt是跨平台工具&#xff0c;显然能和windows的动态库一起使用。 在Windows操作系统上&#xff0c;库以文件的形式存在&#xff0c;并且可以分为动态链接库(DLL) 和静态链接库两种。动态链接库文控以.dll为后缀名&#xff0c;静态链接库文控以.lib为后缀名。不管是动态链接库还是…

【Mysql】 表的增删查改

文章目录 【Mysql】表的增删查改Create --创建数据Retireve -- 读取数据select 列where条件order by -- 结果排序limit -- 分页 Update -- 更新数据Delete -- 删除数据deletetruncate -- 截断表 插入查询结果聚合函数group by 子句 【Mysql】表的增删查改 CRUD : Create(创建)…

Java开发手册中为什么不建议在for循环中使用“+“进行字符串操作

场景 java开发手册中对于循环体中进行字符串的拼接要求如下&#xff1a; 【推荐】循环体内&#xff0c;字符串的连接方式&#xff0c;使用 StringBuilder 的 append 方法进行扩展。 说明&#xff1a;下例中&#xff0c;反编译出的字节码文件显示每次循环都会 new 出一个 Str…

docker安装golang

最近玩 docker 比较多&#xff0c;试试安装 golang 操作系统&#xff1a;Linux 第一步 先看一下镜像&#xff1a; docker images 看一下我们目前的镜像中&#xff0c;是不是有go 如果有&#xff0c;版本不合适等&#xff0c;可以考虑删除&#xff0c;重新安装&#xff0c;也…

死亡空间2显卡测试软件,《激战2》官方显卡测试数据 A卡略胜N卡

在经过无数次测试后&#xff0c;《激战2》的开发人员从测试玩家处获得了无数的反馈和数据&#xff0c;今天ArenaNet针对硬件配置公布了相关数据&#xff0c;从数据中可以看到&#xff0c;在其他硬件不会成为瓶颈的情况下&#xff0c;AMD显卡帧数要比同等级Nvidia显卡略高&#…

linux运行激战2,在Deepin 20.1系统下可用Wine来模拟运行激战2游戏

经过实测并确定&#xff0c;在Deepin 20.1系统下可以用Wine来模拟运行激战2网络游戏&#xff0c;它的表现跟Windows下差不多&#xff0c;虽然是Wine&#xff0c;但这个游戏优化还是挺好的&#xff0c;我是核显玩的&#xff0c;帧数大概30左右吧&#xff0c;效果在预期之内。 效…

《从零开始的 RPG 游戏制作教程》第六期:设置怪物掉落物并部署关卡怪物

目录 1. 前言 2. 第一期&#xff1a;制作基础场景 3. 第二期&#xff1a;让勇者和怪物登场 4. 第三期&#xff1a;基础的数值设计 5.第四期&#xff1a;从理论的角度简单聊聊关卡 6.第五期&#xff1a;制作物品和技能 第六期&#xff1a;设置怪物掉落物并部署关卡怪物 …

五大移动GPU厂商

《谁能笑傲江湖&#xff1f;移动处理器门派那些事儿》一文中我们把2012年的移动处理器的厂商做了一番介绍&#xff0c;并按照各自的属性给划分了门派。既然把他们称为江湖门派&#xff0c;那么每一个门派总要有自己的绝活。移动处理器厂商中CPU基本都是源自ARM&#xff0c;同架…

趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层

趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层 1&#xff1a;第10讲 | UDP协议&#xff1a;因性善而简单&#xff0c;难免碰到“城会玩”TCP 和 UDP 有哪些区别&#xff1f;UDP 包头是什么样的&#xff1f;UDP 的三大特点第一&#xff0c;沟通简单第二&#xff0c;轻…

物联网-鸡舍项目总结

转自&#xff1a;http://mt.sohu.com/20160816/n464326503.shtml&#xff0c;在此向作者致敬&#xff0c;干货很多。 本系统采用五层架构&#xff1a;传感器/智能设备→采集器/智能终端→智能网关→云中间件/Web后台→网页/微信。 鸡舍一般需要监控的参数&#xff0c;包括光照、…

Python爬虫可视化第2季-舌尖上的“小龙虾”

前言&#xff1a; 上期内容与大家分享了一些旅游的内容&#xff0c;从本期开始&#xff0c;会陆续分享一些为吃货们量身定制的文章。世界杯激战正酣&#xff0c;大家在欣赏精彩比赛的同时&#xff0c;怎能少了美食的陪伴&#xff0c;我们今天就来聊聊世界杯的好丽友-小龙虾。 P…

华为的汽车“攻势”

数字化转型&#xff0c;对于传统汽车的从业者而言&#xff0c;看起来还是一个陌生的词汇。\n 然而&#xff0c;现实是&#xff0c;把汽车产品数字化&#xff0c;把企业运营数字化&#xff0c;把一切实体的东西数字化、虚拟化&#xff0c;将成为传统车企不得不直面的事关生死的…

三级pc技术_第十九周PC、笔电、数码周边新品汇总:AMD英特尔激战正酣

【dogkeji-科技犬】 各位网友周末好&#xff0c;又到了2020年第十九周的PC、笔电、数码周边新品发布汇总时刻&#xff08;2020年5月4日至2020年5月9日&#xff09;&#xff0c;那么本周有那些PC、笔电、数码周边新品发布呢&#xff1f;通过科技犬的汇总我们来一起回顾一下吧。 …

安全——网络安全协议的引入

TCP/IP安全缺陷 信息泄露 概述 网络中投递的报文往往包含账号、口令等敏感信息&#xff0c;若这些信息泄露则是灾难性的后果。其中嗅探是一种常见而隐蔽的网络攻击手段。 嗅探 概述 问题&#xff1a;在共享式网络架构下&#xff0c;所有的数据都是以广播方式进行发送&…

618价格激战下的苏宁悟空榜 映射零售进阶史

今年的电商价格战&#xff0c;给我的感觉是猛的一批。百亿补贴、J-10%、24期免息、直播低价促销、自有品牌产品降价不降质等等&#xff0c;一套价格组合拳打下来&#xff0c;让原本萎靡不振的消费市场又恢复到了以往的热闹烟火气息氛围中。 联想到8年之前的京东刘强东向苏宁发起…

汽车控制芯片赛道“激战”,高性能车规MCU全球首发

中国芯片厂商正在加速进入高端车载MCU&#xff08;微控制单元&#xff09;市场。 4月12日&#xff0c;芯驰科技重磅发布了ISO 26262 ASIL D级的高性能、高可靠、高安全、广覆盖的车规MCU产品——“控之芯”E3系列&#xff0c;该系列产品采用台积电22nm车规工艺&#xff0c;集成…

monkeyrunner2

最近,做android项目测试,测试一个应用程序在多个设备中分辨率是否合适,麻烦得要命,不停的截图比较,前一段时间,研究了一下monkeyrunner ,决定通宵写一个实用性强的monkeyrunner来方便测试使用 前一段时间写的monkeyrunner资料 http://youxilua.blog.51cto.com/3357586/772666 功…

梦三国解析服务器spl文件头失败,流沙恐遭降级?《梦三国2》MPL夏季赛第二轮激战全面开启...

逐梦巅峰&#xff0c;为荣耀而战&#xff01;2020《梦三国2》职业联赛(简称&#xff1a;MPL)夏季常规赛第一轮较量于上周正式结束&#xff0c;风月战队后来居上&#xff0c;通过6小局连胜将战队积分累积至14分&#xff0c;积分排名连跳3级成功登顶第四周积分榜首之位。常规赛半…

2017计算机最高配置,快来升级你的电脑:2017年单机大作配置要求一览

2017年&#xff0c;众多新游戏都蓄势待发&#xff0c;你的PC是否还能经受得住接连而来的游戏性能挑战呢&#xff1f;当然每个玩家所爱的游戏都是不一样的&#xff0c;所谓众口难调&#xff0c;并且各家厂商对游戏的优化程度也不尽相同&#xff0c;而且网游和单机对于硬件的要求…