Faster R-CNN: TowardsReal-Time Object Detection with Region Proposal Networks阅读笔记

本文主要是介绍Faster R-CNN: TowardsReal-Time Object Detection with Region Proposal Networks阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Faster R-CNN: TowardsReal-Time Object Detection with Region Proposal Networks

Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun

一、摘要

       目前最好的目标检测网络都依赖region proposals算法来假设目标位置。比较好的例子,例如SPP-net、Fast R-CNN已经极大地减少了这些检测网络的运行时间,Region proposal的计算便成了整个检测网络的一个瓶颈。这篇论文提出了一种RegionProposal Network(RPN),它能够和检测网络共享整张图像的卷及特征,从而使得region proposal的计算几乎cost-free。RPN是一种全卷积的网络,能够同时预测目标的边界以及对objectness得分。RPN是端到端训练,产生高质量的regionproposals用于Fast R-CNN的检测。作者通过共享卷及特征进一步将RPN和Fast R-CNN合并成一个网络,使用最近神经网络流行的术语——“attention”机制,RPN组件能够告诉网络看向哪里。对于VGG-16模型,检测系统在GPU上的帧率为5帧(包含所有步骤),同时仅用每张图300个proposals取得了PASCAL VOC2007,2012以及MS COCO数据集的最好检测精度。代码已公开。

二、Introduction

       1~2节先交代问题背景,目前的网络挺好,点明问题所在——regionproposal算法比较耗时。第3节分析耗时跟region proposal使用CPU有一定关系,但即使用GPU去生成proposal来省时,依旧忽略了网络结构的特征从而错过可以共享计算的机会。

       然后4~5节就是引入并介绍本文提出的算法。第4节引入了RPN,可以和目前非常好的目标检测网络共享卷积层,从而省去计算proposal的时间。第5节说明了这个想法的由来:作者发现Fast R-CNN网络结构中的卷积特征图不仅可以用于ROI池化层,另外再加一段卷积层还可以用来产生region proposals,RPN的结构就这样出来了,具体如图1,左边多出来的部分就是RPN结构。所以RPN是实质是一种全卷积层,端到端训练,专门用于产生regionproposals的任务。


图1. Faster R-CNN的网络结构

6~7节介绍了一下结构细节的内容,也是文章正文核心的内容。RPN用于产生预测具有大范围尺度以及长宽比变化的regionproposals。先前的方法都是通过图像金字塔或者滤波器金字塔的方式来得到Region proposals在尺度以及长宽比上的不同模式,但是本文引入一种称为“anchor”boxes的方法实现,可以视为一种pyramids of regressionreference(回归引用金字塔,意思就是在一个位置同时预测多个不同size的proposal),如图2。这种模式不必去列举不同尺寸和长宽比的图像或者滤波器,训练和测试阶段都仅使用一种size的图像即可。为了统一RPN和Fast R-CNN,作者提出了一种训练模式:在region proposal和目标检测两个任务的fine-tuning之间交替进行。这种模式收敛很快并且产生统一的能够在两个之间共享卷积特征的网络结构。


图2. (a)图像金字塔;(b)滤波器金字塔;(c)回归引用金字塔(字面翻译)。

       8~10节介绍了方法的结果以及成绩。在PASCAL VOC上评估,检测精度比Selective Search + FastR-CNN高,同时解决了Selectivesearch在测试阶段的计算负担。在GPU上即使使用复杂的VGG-16模型,帧率依旧能达到5帧(包括所有步骤),就速度和精度而言,已经达到了实际应用的效果。文章同时也展示了在MS COCO上的结果以及利用MS COCO数据对PASCAL VOC检测结果的改善,代码已公开。第9、10节交代之前的版本以及本文的方法还被很多其他方法和商业系统引用。

三、Related Work

1、Object Proposals

       最近看的几篇论文都要提一下object proposals。详细内容看《What Makes for EffectiveDetection Proposals》。

2、关于目标检测的深度网络

       R-CNN。端到端训练CNN来分类目标,它主要任务是分类,另外加了一个包围盒回归实现预测目标的边界。

       OverFeat。训练一个全连接层对假设只有一个目标的定位任务预测盒坐标,然后全连接层接入卷积层用于检测多个具体类别。

       MultiBox。从最后一个fc层同时预测多个包围盒的网络中生成区域建议,R-CNN就是用的这个。

       另外,卷积的共享计算近来也很热门。主要就是SPPnet, FastR-CNN。

四、Faster R-CNN

       本文的目标检测系统主要由两个模块构成:深度全卷积网络(RPN)用于产生region proposals;Fast R-CNN Detector。

4.1 RPN

       RPN以一张任意size的图像作为输入,输出的是一系列矩形的object proposals,每个proposal都会有一个object score,本文用一个全卷积网络(n*n的卷积层+两个并列的1*1卷积层)来对这个过程进行建模。

产生proposal的方法(我的理解)是:将卷积特征图(convolutional feature map)划分为W*H个窗口,然后用滑动窗口的方式产生proposals。滑动的时候每次取3*3个窗口作为RPN的输入,先经过一些中间层映射成更低维的特征(通常ZF网络是256维,VGG-16是512维),然后将这个特征转入到两个并列的全连接层(一个回归位置,一个分类)产生proposals。见图3。所以RPN的结构可以看成是一个3*3的卷积层加上两个并列的1*1的全连接层。


图3. RPN的结构。

4.1.1anchors

       在每个滑动窗口的位置,同时预测多个region proposals,proposals最大数目设置为k。这样,reg层输出4k个值表示proposal的坐标,cls层输出2k个值评估proposal是否为目标的概率。这k个proposals时关于k个reference boxes参数化的,因此称为anchors。anchor以滑动窗口为中心,对应一种特定尺度以及长宽比,默认选取三中尺度三种长宽比,因此每个滑动位置产生9个anchors。最终总共最多产生W*H*k个anchorss(当然会选取得分高的anchors作为proposals的)。

Translation-Invarlation Anchors

       本文方法一个重要的特点就是平移不变性,意思就是对于anchors以及与anchors相关的计算proposals的函数而言,具有平移不变性。举个例子,如果将图像中的目标平移了,依然能计算出对应的平移的proposals,并且在任何位置函数都能预测到它。MultiBox用的是K均值方法产生800个anchors,不具有平移不变性。

       平移不变性还能减小模型的尺寸。MultiBox的全连接输出层是(4+1)*800维,本文卷积输出层是(4+2)*9维(k取9),结果就是本文输出层2.8*10^4个参数,而MultiBox有6.1*10个参数,相差两个量级。考虑特征映射层,也会相差一个量级。

Multi-Scale Anchors as Regression References

       将本文的多尺度anchors和图像/滤波器金字塔作比较,并举了例子,来说明本文基于anchor的方法实现多尺度有两个好处:一、省时;二、可以仅使用一张一张图像的卷积特征图(事实上还是省时)。

4.1.2loss function

       这一部分没有细看,就是RPN训练reg和cls层的loss函数。

4.1.3训练RPNs

       训练RPN过程的采样策略以及参数设置。通过反向传播算法以及随机梯度下降算法实现端到端训练,采用的是“Fast R-CNN”的采样策略。每个mini-batch由一张包含多个正负ahchors的单一图像产生,由于优化loss函数的时候会偏向占主导作用的负样本,所以本文采样的mini-batch的正负anchors的比例保持在1:1,随机采样256个anchors来计算损失函数。

       新构建的层所有参数一均值0标准差0.01的高斯分布随机采样,其它层用ImageNet分类的参数初始化。ZF的所有层都参与优化,VGG-16从conv3向上的层优化。学习速率一开始的60000minibatches设置0.001,接下来的20000个minibatches设置为0.0001。

4.2 RPN和Fast R-CNN共享特征

       上面4.1提到的是如何单独训练RPN,4.2描述怎样训练RPN和Fast R-CNN统一的网络结构。作者讨论了三种训练共享特征的方法:

       (1)迭代训练。先训练RPN,然后用训练好的RPN产生的proposals来训练Fast R-CNN。接着由Fast R-CNN微调的结构初始化RPN。以上,交替进行。这也是本文所有实验使用的方法。

       (2)和(3),Approximatejoint training和Non-approximatejoint training。因为作者没用,也就没细看了。

4-Step Alternating Training

       第一步,训练RPN,用ImageNet预训练模型初始化参数来微调网络;第二步,用前面训练的RPN产生的proposals单独训练一个Fast R-CNN网络;第三步,用检测网络初始化RPN,固定共享的卷积层,只微调RPN单独的部分;第四步,固定共享的卷积层,微调Fast R-CNN独立的部分。以上,训练结束。可以迭代,但是改善很小。

4.3 实现细节  

见这个网址:http://blog.csdn.net/liumaolincycle/article/details/48804687

五、实验

5.1 PASCAL VOC

       两个数据集:PASCAL VOC 2007,PASCAL VOC2012;两个网络:ZF,VGG-16。

(1)先评估的是平均精度

下图给出了PASCAL VOC 2007的结果,使用了各种proposal的方法进行比较。


图4. SS表示Selectivesearch; EB表示EdgeBoxes。

       关于RPN的不同设置的实验结果。图5。包括是否共享卷积层,proposals的数量,是否添加非极大值抑制,以及是否含有reg和cls层的结果。


图5. 关于RPN的消融实验。

       关于VGG-16网络结构在PASCAL 2007上的表现。图6。包括了和SS的比较,是否共享特征以及数据集的变化的结果。


图6. 关于VGG-16的实验(VOC 2007)。

       又贴出了VGG-16在PASCAL VOC 2012上的表现。


图7. 关于VGG-16的实验(VOC 2012)。

(2)接着评估了运行时间


图8. SS和RPN的运行时间比较。

(3)比较了不同尺度以及长宽比结果


接着还分级了IoU和召回率的比较结果以及λ对结果影响。图太多,不贴了。

5.2 MS COCO数据库的结果。

       mAP@.5最好的结果是42.7%,mAP@[.5,.95]是21.9%。

5.3 借用MS COCO数据训练PASCALVOC的结果

       VOC2007最好结果是78.8%;VOC 2012最好结果是75.9%。速度没有变化。

这篇关于Faster R-CNN: TowardsReal-Time Object Detection with Region Proposal Networks阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353671

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个