引言
论文:《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》
详细内容可以参看博客,我只记录一些我自己的理解。
摘要
1.提出使用RPN网络替代R-CNN和Fast R-CNN中的区域提取Selective Search
2.采用RPN和Fast R-CNN交替训练的方式
RPN网络
网络结构大致如下,就是传统的CNN网络进行multi-task。可以采用ZFnet或者是VGG16net两种架构。
Anchor
主要记录一下anchor的概念。
Anchor是设置在原图上的一些矩形框。RPN进行ROI提取的大致思路就是:对CNN最后一层的feature map进行3*3的滑窗,feature map的每一个节点可以对应原图上的一个感知区,逐个判断Anchor是否包含ROI。
论文为了解决多尺度的问题,设置了9种不同的Anchor。9的来源是:ratio [1:1,1:2,2:1]和scale [128,256,512]的全排列。
Feature Map的每一个节点都对应一个Anchor的中心点,因此,对于ZFnet网络的Feature Map最后一层输出是40*60,因此会对应40*60*9=21600个Anchors。需要对每一个anchor判断是否包含ROI。为了解决Anchors太多的问题,论文提出使用如下两个方式进行解决:
1.忽略cross boundary的Anchor。意思就是,如果某一个Anchor与边缘交叉了,那么就将这个anchor去掉。这样的做法是可以理解的,不想将某一个cross boundary的anchor删除的一个原因是可能这里出现了obj,但是由于各种scale的anchor遍布整个原图,完全会有其他更合适的非cross-boundary的anchor标注该obj,因此删除。
通过这样的方式可以将Anchor下降到6000个左右
2.通过非极大抑制算法NMS可以将Anchor 下降到约2000个左右
NMS算法介绍
损失函数
RPN网络的损失函数介绍如下:
由分类的损失函数和回归的损失函数组成(PS: 分类的损失函数指的是判断anchor内部)
下面分别进行介绍
分类损失函数
其中,
回归损失函数
其中
其中