[Intensive Reading]目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN

2022-05-09 14:34:14 浏览数 (1)

目标检测系列:

目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作

目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享

目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练

目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN

目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式

目标检测(object detection)系列(六) SSD:兼顾效率和准确性

目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN

目标检测(object detection)系列(八) YOLOv2:更好,更快,更强

目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言

目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度

目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作

目标检测(object detection)系列(十二) CornerNet:anchor free的开端

目标检测(object detection)系列(十三) CenterNet:no Anchor,no NMS

目标检测(object detection)系列(十四)FCOS:用图像分割处理目标检测

目标检测扩展系列:

目标检测(object detection)扩展系列(一) Selective Search:选择性搜索算法

目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘

目标检测(object detection)扩展系列(三) Faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3在损失函数上的区别

简介:有RPN的Fast R-CNN

RBG团队在2015年,与Fast R-CNN同年推出了Faster R-CNN,我们先从头回顾下Object Detection任务中各个网络的发展,首先R-CNN用分类 bounding box解决了目标检测问题,SPP-Net解决了卷积共享计算问题,Fast R-CNN解决了end-to-end训练的问题,那么最后还能下一个ss算法,依旧独立于网络,是一个单独的部分,然而这个算法需要大概2秒的时间,这个点是R-CNN系列的性能瓶颈,所有Fast R-CNN是没有什么实时性的。那么Faster R-CNN的出现就是为了解决这个瓶颈问题。

在Faster R-CNN中提出了RPN网络,Region Proposal Network(区域建议网络)以代替原来的ss算法,可以简单的理解为:

Faster R-CNN =Fast R-CNN RPN-ss算法

所以,可以说除了RPN,Faster R-CNN剩下的地方与Fast R-CNN是一样的, 那么理解Faster R-CNN的关键其实理解RPN。Faster R-CNN的论文是《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》。

Faster R-CNN实现

RPN网络结构

首先,上面这张图说明了RPN在Faster R-CNN中的位置,它在CNN卷积后的特征图上做区域建议(大约300个),并根据RPN生成的区域建议对feature maps做提取,并对提取后的特征做RoI pooling。在RoI pooling之后的东西就和Fast R-CNN一样了。

所以RPN的输入是卷积后的特征图,输出是多个打过分的建议框,所谓打分是对框中是否是物体打分,建议框是四个值(x,y,w,h)。

那么,k是什么呢?

k是Anchor box(参考框)的类型数,在Faster R-CNN中k=9,分别是3个尺度scale和3个比例ratio,其中:

scale为(128,256,512)

ratio为 1:1,1:2,2:1

然后我们就会发现通过上面的解释,RPN有一些地方是说不通的,下面我们一一解释下这些坑:

1.上面提到Anchor box的总数是1521个,那为什么说RPN生成300个左右的区域建议呢?

每一个参考框都会有一个是不是物体的打分,在检测过程中RPN计算所有的参考框后会选择其中300个得分最高的区域,也就是二分类confidence更高的。

2.参考框中的尺寸为(128,256,512),但是conv5的尺寸只有

13times13

,在哪里生成这些参考框呢?

这些参考框不是在特征图上生成,而是在原图上,所以anchor size的选择一定是要考虑缩放前的原图的尺寸,因为最后anchor超过的图像大小,并没有意义。所以RPN在做的是将每个点产生的9个参考框来映射原始图像,也就是通过4k个位置偏移输出和k个参考框,得到参考框在原始图像中的位置。就像Fast R-CNN中ss算法,其实也是在原图上生成的,最后只是经过了坐标变化才能在conv5上提取。

3.在卷积核卷积到一个点的时候,输出了9个参考框,但是这9个建议框的特征是相同的,都是256个

3times3times256

卷积核,卷积得到的

1times1times256

的特征,那么这9个参考框在哪里引导的RPN关注这些区域呢?

特征确实是相同的,但是得到的特征最终是要向原图做映射的,以得到最终的区域建议,而相同的特征对应了9种不同的参考映射方式,于是相同的特征,映射给不同的参考框时,loss是不同的。那么哪种方式是做好的呢,当然是loss最小的那个。所以不同的9个参考框,它们的区别并不体现在特征上,而是在loss上,我们下面就看下RPN的损失函数。

RPN损失函数

首先给出函数的公式:

这个公式和Fast R-CNN的多任务损失其实很像,同样是一个在做分类,一个在做回归,然后把两个函数加在一起。i是一个batch中anchor box的索引。

分类损失:

0 人点赞