何恺明大神巨作:Faster R-CNN 论文笔记

视频链接:https://www.bilibili.com/video/BV1j5411e7aH/

 

何恺明大神奠基Two-stage目标检测算法的一篇巨作。

 

1、看abstract时候的问题(看其他部分时候的回答)

1.什么是region proposal?

相比于YOLO这种one-stage(速度快)的检测算法,two-stage算法(准确率高)就是多出了region proposal的过程。two-stage目标检测算法的思想主要将检测过程分为两步:第一步是在图片中寻找“可能存在物体的位置(regions)”,然后在判断“这个位置里的物体是什么东西”。region proposal就是寻找“可能存在物体位置”的过程,比如最早的是用sliding window 暴力的遍历图片中的所有位置,也算是region proposal的过程。

 

2.论文中提到,如果不算region proposal的时间,fast rcnn几乎能够实现real time的效果。那是不是以前two-stage的算法中,大部分时间都在region proposal上?

我的理解:以前的region proposal是所有region拿出来后,对每个region进行特征提取,所以这样的feature是局部的,不能在detect的时候复用,因此会浪费很多提取特征的时间。另外提取出来的region很多部分都是重复的,因此图片中的很多部分都被重复计算了很多次。

 

3.以前为什么没有人在GPU上re-implement region proposal algorithm?

因为检测网络会进行下采样,因此在如果在GPU上实现region proposal algorithm的话,在后面用共享特征层计算的时候会损失很多feature map的信息,导致准确率不高。

 

4.Anchor有什么用?

目标检测是"目标在哪里有什么"的任务,但是如果让模型盲目的去寻找“目标在哪里”效率非常低,甚至不能收敛。Anchor技术将问题转换为"这个固定参考框中有没有认识的目标,目标框偏离参考框多远",大大降低的目标检测的难度。

 

5.为什么文中的Anchor机制具有translation invariant,但是MultiBox没有?

 

 

6.bouding box和anchor的区别和联系?

Anchor有点像一些初始化的bounding box,后面模型在学习的时候,只需要学习bounding box和这些anchor之间的偏移就行了,大大降低了模型收敛的难度。

 

7.what is Ablation Experiments?

“消融研究(Ablation Experiments)”通常用于神经网络,尤其是相对复杂的神经网络,如R-CNN。我们的想法是通过删除部分网络并研究网络的性能来了解网络。(感觉有点初中物理实验里面的控制变量法)

 

8.为什么Fig2中recall和IoU呈现负相关?什么是Recall? (https://www.cnblogs.com/pprp/p/11241954.html

Recall就是检出率,指的是有多少ground truth的正样本在predict的时候被检测出来,如果全部检测出来了就是100%,计算公式为Recall=(True Positive)/(True Positive+False Negtive)

与之对应的是,Precision准确率指的是predict里面有多少的正样本正确的,比如:如果只检测出了1个,并且这一个是正确的,那么Precision就是100%,计算公式为Precision=(True Positive)/(True Positive+False Positive)

如果IoU的阈值设置的很小,那么就可以把所有的物体都检测出来,只是准确率很低,recall可以达到100%;反之,也是这样。

 

 

2、创新点

1.Faster-RCNN在RPN网络中提取的是整张图片的feature map,而非局部的,这样的feature map在后面的detection network中也用得到,所以实现了region proposal的过程nearly free-cost。(即:Sharing Convolutional Features for Region Proposal and Object Detection)

2.以前的RP(region proposal)过程都是在CPU上implement的,本文为了提高速度,在GPU上对算法进行了re-implement。

 

 

3、做了什么

在Fast-RCNN的基础上,改进了region proposal的过程,提出了一个RPN网络,使得检测网络能够共享RPN网络得到的整张图片的feature map,让region proposal过程的实现达到nearly cost-free。

 

4、难点

RPN and Fast R-CNN是两个不同的网络,但是现在要求他们能够共享卷积层。因此不能简单的训练两个网络,然后分别优化。

5、怎么做

总体流程:

RPN网络的input为一张图片,output是一些rectangle object proposals和这些proposal中包含物体的score。

 

为了能够让RPN的feature map和detection network进行公用,本文采用了fully- convolutional network 的方式进行卷积。

 

为了能够生成region proposal,这里在上面生成最后一层feature map后,还n × n 的slding window(具体实现是n × n的卷积后跟上两个1 x 1的卷积层,一个用来生成分类信息[cls,score],一个用来位置信息[x,y,w,h]),如下图所示:

何恺明大神巨作:Faster R-CNN 论文笔记

 

1.Translation-Invariant Anchors

本文引入了anchor机制,每个区域中有k个anchors(本文的anchor有三个scale和三个aspect ratios,因此k=9),如果feature map的大小为W x H,那么所有的anchor数为W*H*k。RPN网络在feature map中根据这些anchor进行分类和回归,其中分类网络的输出为2k(分类信息和score信息),回归网络的输出为4k(region proposal的x,y,w,h)。

另外,这样的anchor还具有位移不变性(我也不知道为什么)。

 

2.A Loss Function for Learning Region Proposals

首先定义一下,刚刚生成的anchor分为三类:

Positive anchor:和GT box重合最大的anchor或者与GT box的IoU大于0.7。

Negtive anchor:跟任意一个GT box的IoU小于0.3

Neither positive nor negtive anchor:这类anchor在训练的过程中不起作用。

 

损失函数定义:

何恺明大神巨作:Faster R-CNN 论文笔记

 

pi为预测bounding box包含物体的score,pi*为GT label。如果anchor包含物体,pi*为1;否则,pi*为0。

ti是预测的bouding box的坐标信息,ti*为GT box的坐标信息。前面乘了pi*,是因为只有anchor中包含物体时,才计算regression loss。

Lcls()是log loss;Lreg()是smooth L1 loss。

 

另外,还有一个注意点:

ti和ti*中的坐标信息,并不是原始的坐标信息,而是相对于anchor的坐标信息。

何恺明大神巨作:Faster R-CNN 论文笔记

 

其中x,y,w,h表示bounding box的中心坐标和宽高。

x、xa、x*表示预测框、anchor box和GT box。

(个人觉得,所有的坐标信息不是相对于整张图,而是相对于最近的anchor box的一个目的是,为了让loss收敛能够更快一些)

 

 

3.Optimization

在进行optimization的过程中,如果用所有的anchor进行进行optimize,会出现高bias的情况,因为大多数的anchor都是negtive的。所以本文的实验中,是随机选择了256个anchor进行optimize,并且positive 和 negtive的比值为1:1。如果positive anchor的数量不够,再使用negtive anchor填充,这样就保证了正负样本数量几乎一致,训练的效果比较好。

 

4.Sharing Convolutional Features for Region Proposal and Object Detection

提出了一个4-step training algorithm来共享卷积特征通过alternating optimization。

1.train RPN(use ImageNet- pre-trained model)

2.train detection network(use ImageNet- pre-trained model)

3.用detector network去initialize RPN 的训练,但是固定shared conv layers,只是fine tune专属于RPN的网络部分。

4.固定shared conv layers,fine tune Fast-RCNN的全连接层

 

5.Implementation Details

为了去除很多redundant predicted box,本文还用了NMS算法,对区域内对同一个物体的predicted box进行抑制,这里的阈值设置为0.7。

 

 

6、结果怎么样

相同detector network,不同region proposal方法下的结果对比:

何恺明大神巨作:Faster R-CNN 论文笔记

 

 

使用RPN+VGG下,用PASCAL VOC 07、12、07+12数据集的结果(shared代表共享特征层)。

何恺明大神巨作:Faster R-CNN 论文笔记

 

 

相同数据集下,Selective Search和RPN+VGG的对比

何恺明大神巨作:Faster R-CNN 论文笔记

 

 

不同算法在Tesla K40上的速度对比

何恺明大神巨作:Faster R-CNN 论文笔记

 

 

one-stage和two-stage的对比

何恺明大神巨作:Faster R-CNN 论文笔记

 

 

0.3k,1k,2k个proposals下,不同算法的Recall和IoU的变化曲线

何恺明大神巨作:Faster R-CNN 论文笔记

 

 

——————————————————————————————

视频笔记:https://www.zhihu.com/zvideo/1267233726305873920

笔记链接:http://note.youdao.com/s/PL7jyNZI

如果内容有帮助到您,希望大家多多点赞+收藏+关注!!!

经常会在知乎中分享自己的学习笔记,和大家一起学习进步!!!

——————————————————————————————