R-CNN目标检测第三弹(Faster R-CNN)

R-CNN目标检测第三弹(Faster R-CNN)

​ 今天,重看了 R-CNN 的终极改进版本 Faster R-CNN(NIPS 版)-本文提到的paper,若为特别指明,说的就是此版本。

​ 先说一个学术趣事吧,R-CNN 的 一作是RGB大神,大神的导师也是DPM检测方法的作者;受到微软亚研院 Kaiming HeRGB博士SPP-Net工作的启发,RGB大神博士毕业后在微软 redmond 研究院做出了 Fast R-CNN;而本篇paper,则是Kaiming 和 RGB的合作产生;今年CVPR17 的mask R-CNN也是两位大神的大作。大神们的合作,我等只能膜拜...

​ 闲话以后再扯,我们就来看这一次改进是怎么让 R-CNN faster的。

1. 缘起

1.1 Fast R-CNN的不足

​ 尽管 Fast R-CNN通过 ROI Pooling Layer实现了对proposal深度特征的快速提取,又通过multi-loss的联合训练进一步提升了mAP。但是它依旧不完全是一个end-2-end的工作,下面详细列出:

  1. 和R-CNN一样,Fast R-CNN的region proposal生成依旧严重依赖于 Selective Search算法(简写为SS算法)。不仅在于SS算法比较耗时,还在于SS算法得到的proposal不一定适合于detection network。

1.2 Faster R-CNN的主要解决手段

针对 Fast R-CNN 存在的上述问题,Faster R-CNN主要采用以下方式来解决:

  1. 设计专门用于region proposal generating的网络:region proposal networks。该网络和fast r-cnn中的检测网络共享 conv layer的参数,通过anchor box来生成多个 region proposal,并给出每个proposal的object-ness score
  2. 设计multi-loss来对该 region proposal network进行优化。此外,依次对参数共享的region proposal network和detection network进行交替训练。

本文在Fast R-CNN 的基础上,采用其原有的detection network来对每张图片中的region proposal进行分类和重定位。另一方面,设计了Region Proposal Network 来生成proposal。

下面,我们主要探讨 region proposal network的构造与优化

2. Region Proposal Network

​ paper作者希望设计基于CNN model的region生成机制。

A Region Proposal Network(RPN)(也是CNN model)的以任意size的图像作为输入,输出一系列矩形目标proposals,每个proposal都自带一个object-ness score

​ 为了节省计算量,作者将RPN前半部分的卷积层设计为和detection network的卷积层为共享(shared),在最后一层共享的conv layer后,作者设计了如下的类似sliding window的机制来生成proposal,并得到每个proposal的object-ness score。详细如下:

2.1 后续的proposal如何生成?

  1. 基本的生成流程

    为了生成 region proposals,在最后一个共享 conv layer输出的conv feature map上,上下左右滑动一个小型的network。这个network全连接到conv feature map上的 (n,n)大小的子窗口上,对应每个子窗口,network的输出就是一个低维向量(256-d for ZF,512-d for VGG16)。而这个低维向量后面跟了两个分开的全连接层,其中一个是分类层:负责判定子窗口得到的proposal为object的概率,即计算object-ness score;而另一个则是回归层:负责对子窗口的位置信息进行更新(类似于detection network中的),即计算更精确的proposal的位置。

    这里的n取3,事实上,这个滑动的network就是(3,3,input_dim,output_dim)的conv 层。

  1. Anchors的引入

    事实上,上述生成流程中,对每一个(n,n)子窗口,就可以得到关于这个子窗口的 object-ness score和位置信息的更新。但是proposal的size和aspect ratio 可能存在多种情况,例如目标人的height一般就是width的两倍以上,车辆则反过来。如果考虑多种长宽比的子窗口,那么就会出现组合爆炸,变成了真正的dense sample proposal,计算量太高。因此,对每个(n,n)子窗口,paper在提出采用旋转不变的 Anchors:

    在每一个 sliding-window location,同时预测 k 个 region proposals,这样一来,分类层会输出k个object-ness score,回归层会输出k个对应的新的位置信息。

    这k个proposal是相对 k个 anchor来说的。这里的k个anchor是一些以sliding-window的中心为中心,不同scale和aspect ratio的proposal。这里取3种scale和3种aspect-ratio,那么k=9。

    假设conv feature map的大小为 (W,H),那么anchors的个数为 WHK,这是因为在有边界padding的情况下,每个点都是sliding-window location。

    一个重要的性质是:每个点的k个anchors,除了中心不同外,高度和宽度均一致。且对每种anchor,从子窗口到256-d的conv连接是共享的,是不随中心变化而变化的。

    所以,现在再看k个anchors,实际上就是在conv feature map运行k个不同kernel size的conv 层。每个conv层后面接的就是分类全连接层和回归全连接层。

2.2 如何学习RPN?

​ RPN的loss其实和 Fast R-CNN中 detection的multi-loss十分类似。区别在于,detection network中的分类错误是对多类别的分类错误,回归错误只针对不是背景的proposal来做;而RPN 中的分类错误是针对 是否为物体的分类错误,回归错误则只针对是物体的anchor来做。这个loss的公式表达为:

$L({p_i},{t_i})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i, p_i^)+\lambda \frac{1}{N_{reg}}\sum_i p^i L{reg}(t_i, t^*_i)$

​ 上式中的 $p_i$ 和 $p_i^$ 分别代表proposal经过分类层得到的object-ness预测概率和 proposal对应的gt bbox的label(1 or 0),而 $t_i$ 和 $t_i^$ 则是proposal经过回归层预测出的位置信息以及 proposal对应的gt bbox的位置信息。当然这里的位置信息和R-CNN中的bbox regression一样,经过了参数化的。详见paper的第4页。

​ 值得注意的是,这里的regression是针对k种anchors来进行训练的,即覆盖了多种scale和aspect-ratio下的bbox regression,这样做出的预测是更有针对性的。

​ RPN 训练时的正负样本定义:正样本包含两类:和每个gt bbox的IOU最大的anchor,以及和任意 gt bbox的IOU大于0.7的anchor。负样本为:和所有的 gt bbox的IOU均小于0.3的anchor。对于正样本某anchor,其回归层的回归目标就是那个和它IOU最大的gt bbox的位置信息。

​ 接下来,就是通过类似 hierarchical sampling的方式采集正负样本,进行SGD训练来学习RPN。

2.2.1 一些训练细节
  1. anchor boxes在训练和测试中的使用

    由于anchor box是对子窗口进行不同scale和不同aspect-ratio变化得到的,因此存在大量的anchor boxes超出了图像的边界。在训练中,将超出了图像边界的anchor boxes全部忽略。在测试时,也不保留这些超出边界的anchor boxes(这里存疑,文中并未叙述清晰,需要看具体的代码),待得到最终的 proposal后,对于超出图像边界的proposal,截取其在图像内的部分作为proposal。

  2. Non-maximum Suppression用于减少proposal

    在RPN得到proposal之后,根据每个proposal的object-ness score来执行NMS(使用的IOU阈值为0.7),并留下前2000个proposal,作为detection network的输入

2.3 如何对RPN和detection network进行联合训练

​ 由于节省计算量的关系,作者将RPN和detection network的前半部分设计为共享的。顺理成章,最好是进行联合训练。正如paper中第4页末尾所言,

需要开发一种技术来学习共享层的参数,而不是学习两个隔离开来的网络。但这并非简单地将RPN和detection network组合在一起进行联合训练,主要是因为:detection network的训练需要固定的object proposal作为输入。很难说,在对RPN进行优化(即逐步改变proposal的生成机制)时同时去优化detection network,因为不一定会收敛。

​ 不过未来可以尝试开发联合学习,paper中给出的是:采用交替优化的四步训练算法:

  1. 从 imagenet pretrained的网络出发fine-tuning RPN
  2. 采用第一步得到的RPN来负责proposal generation,从 imagenet pretrained 的网络出发fine-tuning detection network
  3. 采用第二步得到的detection network的权重来初始化RPN的共享部分,并保持共享部分的权重不变,在第一步得到的RPN的ROI Pooling Layer及其后的层的权重的基础上fine-tuning RPN
  4. 采用第三步得到的RPN来负责proposal generation,保持共享部分的权重不变,在第二步detection network的FC层权重的基础上fine-tuning detection network。

3. 实验分析

3.1 RPN 对训练的提升

​ paper第5页的Table 1清晰展示了实验结果,以下结果说明了训练RPN时multi-loss的重要性

  1. 训练好RPN后,采用SS算法生成的proposal来训练detection network,然后在测试时采用RPN来生成proposal,mAP相对上面的方法略有下降
  2. 训练好不带分类输出的RPN后,采用SS算法生成的proposal来训练detection network,然后在测试时采用不刚刚训练的不带分类输出的RPN来生成proposal,mAP有大幅下降,下降的绝对值接近10%以上
  3. 训练好不带回归输出的RPN后,采用SS算法生成的proposal来训练detection network,然后在测试时采用不刚刚训练的不带回归输出的RPN来生成proposal,mAP有小幅下降,下降的绝对值接近5%以上

3.2 其它

  1. 采用的detection network的capacity越强,mAP也更高(from ZF-Net to VGG)
  2. 在整个的检测流程中,因为实现了RPN和detection network的共享,实际上proposal的生成几乎不耗费时间

我个人感觉,今后肯定能出现一个将RPN和detection network结合起来的工作...

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

推荐阅读更多精彩内容