何恺明大神巨作: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]),如下图所示:
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在训练的过程中不起作用。
损失函数定义:
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的坐标信息。
其中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方法下的结果对比:
使用RPN+VGG下,用PASCAL VOC 07、12、07+12数据集的结果(shared代表共享特征层)。
相同数据集下,Selective Search和RPN+VGG的对比
不同算法在Tesla K40上的速度对比
one-stage和two-stage的对比
0.3k,1k,2k个proposals下,不同算法的Recall和IoU的变化曲线
——————————————————————————————
视频笔记:https://www.zhihu.com/zvideo/1267233726305873920
笔记链接:http://note.youdao.com/s/PL7jyNZI
如果内容有帮助到您,希望大家多多点赞+收藏+关注!!!
经常会在知乎中分享自己的学习笔记,和大家一起学习进步!!!
——————————————————————————————