【CV论文笔记】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

本文主要用于介绍rbg大神于2015年提出的Faster R-CNN网络,该网络架构是在其前作Fast R-CNN上的升级改进版。本笔记主要为方便初学者快速入门,以及自我回顾。

论文链接:https://arxiv.org/pdf/1506.01497.pdf
github主页:https://github.com/rbgirshick/py-faster-rcnn
rbg大神个人主页:http://www.rossgirshick.info/#girshick2014rcnn

为更好的理解该论文,建议先行阅读R-CNN,SPPNet,Fast R-CNN网络的相关论文,这里也附上本菇之前写的4篇论文笔记供大家参考~
R-CNN理解
SPPNet网络理解
Fast R-CNN理解
全卷积网络理解

基本目录如下:

  1. 摘要
  2. 核心思想
  3. 总结

------------------第一菇 - 摘要------------------

1.1 论文摘要

现今流行的目标检测网络都依赖于“区域建议(region proposal)”算法来提前假设潜在的目标区域。像最新的SPPNet网络,Fast R-CNN网络都已经在检测网络上节省了大量的时间,唯一效率上的瓶颈就在于第一步,候选框的提出。因此,在本论文中,我们提出了一种“区域建议网络(Region Proposal Network,RPN)”,该网络与检测网络共享卷积层参数,因此使得新增的该网络层的时间开销几乎为0。RPN的本质就是同时计算每一个位置的目标边界和目标分数的全卷积网络,该网络生成的候选区域框,将会输入到后续的Fast R-CNN架构用于目标检测。本论文还同时,将RPN网络和Fast R-CNN网络合并进一个网络中,因此能够共享卷积层的参数,且用于提取特征的网络层用了最新流行的引入“注意力”机制的网络。对于那种深度模型VGG16,我们新的架构能够达到单GPU,5fps目标检测速度,并且还保证了准确率。在2015年的ILSVRC和COCO的目标检测比赛中,第一名所用模型的架构都有我们的影子。

------------------第二菇 - 核心思想------------------

2.1 Faster R-CNN的网络架构图

Fast R-CNN的提出成功解决了目标检测的时效性问题,并且已经能接近达到实时的效果。但是,Fast R-CNN网络运行的前提就是准备好一堆候选框,之前都是采用的传统图像算法,比如Selective Search。但是随着后半部分问题的解决,前面生成候选框的时效性(主要还是想把整一套流程都放到GPU上来搞)也变的引人注目了。。。于是rbg大神们,也就索性放弃了传统图像算法,提出了一个新的RPN网络来生成候选框,再把RPN网络嵌入到Fast R-CNN中,也就是当红炸子鸡Faster R-CNN了,这里先直接上一张论文中的网络架构图,方便大家对其有一个基本的认知,

Faster R-CNN网络架构图.jpg

可以看到,红色框的那部分(RPN)就是相比于Fast R-CNN新加的部分,因此只要理解了RPN网络,再加上Fast R-CNN的基础,那么对Faster R-CNN的整体把握就比较清晰了~所以,接下来我们就重点看一下RPN网络的细节。

2.2 理解RPN网络

首先明确RPN网络的作用为:输入任意大小的图片,输出一系列的方形目标候选框,每一个目标候选框都带有objectness分数。该网络其实是可以作为一个单独的目标检测网络而存在的!只不过,作者将其嵌入进了Fast R-CNN架构中,并将整个新的架构命名为Faster R-CNN。

(注:这里必须强调一下,objectness想表达的意思是该候选目标框是否含有目标检测物体(并不需要明确是哪一类),因此仅仅是一个二分类问题,含有目标或者是背景)

其次,必须明确Faster R-CNN架构中的RPN网络层为了共享卷积层参数,会直接用前置卷积池化操作产生的特征图(feature map)。有了特征图以后,会在特征图上的指定地方(由Anchors决定,不理解Anchors没关系,后文会解释,在这简单理解为特征图上的一个固定点)滑动一个小的神经网络(我姑且称之为“候选生成网络”,真的很小,就是由1个nn的卷积层再跟2个11卷积层的分支,分别对应分类和回归),这个小神经网络的输入就是一个Anchor生成的候选框,然后输出每个候选框的分数和位置,如果有不清楚整体架构的,直接看论文中原图如下,应该也就能明白整体的架构逻辑了~

RPN网络架构图.jpg

(注:比较容易搞混的可能是“滑动一个小的神经网络”~传统操作一般不都是滑动卷积核或池化核,其实操作的本质类似,只不过这里滑动的是一个小的神经网络,从而达到输出多个候选框的目的)

上图应该来说是比较清晰了,接下来我们就再深入一些细节,加深理解。

2.2.1 Anchors的理解

Anchors中文翻译就是“锚点”,每一个锚点,我们都会生成大小各异的多个候选框,这里明确一个参数的意义,k,就表示每一个锚点生成的候选框的个数。

因此,上图2k的意思就是,每一个框都会有2个分数(一个是:为目标的概率;另一个是:为背景的概率),总共有k个,那自然输出是2k。同理,4k就是每一个框都由4个参数来定位,总共就是4k个。

论文中,作者采用的参数是9个,运行调用作者demo中的generate_anchors.py,可以得到9个矩形共有3种形状(如下图,来源【1】),长宽比大约控制在\{1:1, 2:1, 1:2\},每1个ratio对应3个scale,因此最终是9个,其本质就是引入了检测中常用的多尺度方法。

Anchor示意图.jpg

作者也在文中强调,该种多尺度的实现方法是整套的核心,

The design of multi- scale anchors is a key component for sharing features without extra cost for addressing scales.

那么在论文的参数设置下,最终的候选框个数是多少呢?假设原图是800*600的,VGG下采样16倍,每个锚点9个框,

ceil(800/16)*ceil(600/16)*9 = 17100

再从网上盗一张图,加深理解,

Anchors示意图2.jpg

这里再贴一张原图上的锚点示意图【3】,助于理解(因为下采样了16倍,所以每个锚点在原图上会有16个像素距离)

锚点示意图3.jpg

这么多的候选框,自然是不可能全都送到后面的网络中去的,训练程序会在合适的anchors中随机选择128个positive anchors + 128个negative anchors进行训练。因为大部分情况下都是背景居多(negative),如果positve少于128的话,那在当前批次里,就选取其他的negative补上。

2.2.2 损失函数

至此,大家对整一套RPN网络应该有比较好的理解了,我们再上一张python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构【1】,

faster_rcnn_test.py网络结构图.jpg

上图的表示相比于原论文,会更加清晰易懂,因此,损失函数也有2部分组成,其中一部分是分类,另一部分是回归。整个网络的损失函数可以表示为(其实与Fast R-CNN真的很像),

L(\{p_i\}, \{t_i\}) = \frac{1}{N_{cls}}\sum_{i}L_{cls}(p_i, p^*_i) + \frac{1}{N_{reg}}\sum_ip^*_iL_{reg}(t_i, t^*_i)

其中,
i表示在一个批中的anchor的下标
p_i为该锚点是目标的概率
p^*_i为1如果是positive,为0如果是negetive
t_i就是预测的4个用于定位的坐标点
t^*_i就是GT,当然也只有是positive才会计入损失

当然,实际的训练中会发现,N_{cls}N_{reg}值相差过大,通常会引入参数\lambda来平衡,是总的Loss能均匀考虑2种Loss。

(注:推荐学有余力的同学看该博文对于回归问题的一个细节描述,看懂了以后,再来理解文中给出的公式就不难了,简单讲一句就是,回归分支真正要学的参数不是具体的坐标值,而是对于每一个Anchor的平移量和变化尺度)

至此,整一套RPN网络就已经讲清楚了,至于RoI在Fast R-CNN中已经讲的很清楚了,这里就不展开了。

2.2.3 训练过程

接下来,还有一个难点,就是如果训练整一套Faster R-CNN网络。文中作者给出了几种可能的训练方法,

1)分开单独训练,即先训练RPN网络,再用RPN生成的候选区域来训练Fast R-CNN,再用Fast R-CNN训练微调完的网络来训练RPN,迭代往复,这也是本文作者在做实验中用的训练方法。

2)放在一起训练。。。说实话,有点懵。。。主要是我也没想明白这个梯度更新的过程。。。

(以下内容来自【4】)
然而,作者在源码中的训练细节一共分了4步,
1)用ImageNet模型初始化,独立训练一个RPN网络

2)仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;

3)使用第二步的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN、Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;

4)仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个unified network,继续训练,fine tune Fast-RCNN特有的网络层,此时,该网络已经实现我们设想的目标,即网络内部预测proposal并实现检测的功能。

训练过程.jpg

以上就是训练的细节步骤。

至此,整一套Faster R-CNN算是讲明白了,其余的实验设置和结果这边就不展开了,有兴趣的同学自己看原文就行~

------------------第三菇 - 总结------------------

3.1 总结

到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一种新的RPN网络用于生成候选区域框,并将其嵌入到Fast R-CNN中,将其命名为Faster R-CNN,进一步提高了目标检测算法的时效性,并实验证明其可行性,为后续发展奠定了基础。

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对Faster R-CNN网络,尤其是其中的RPN网络的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

参考文献:
【1】https://zhuanlan.zhihu.com/p/31426458
【2】https://blog.csdn.net/shenziheng1/article/details/82907663
【3】https://www.jiqizhixin.com/articles/2018-02-23-3
【4】https://zhuanlan.zhihu.com/p/24916624

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348