在R-CNN中提到过,候选区域的提取和之后的目标检测其实是独立的,所以我们可以使用任意的算法如SS。Fast-RCNN改进的是目标检测部分,但是其实候选区域的提取也挺费时的,Faster R-CNN就把改进方向放在了这里。
我们已经领略到了CNN的强大,所以Faster R-CNN把提取候选框的任务也交给神经网络来做。我们把完成这一任务的神经网络叫做Region Proposal Network(RPN)。
可以看到在Faster R-CNN中候选框的提取不再是第一步。在RPN之前已经有一个CNN用于生成feature map,CNN中包括一系列卷积(Conv+Relu)和池化(Pooling)操作,卷积层的操作由RPN和Fast RCNN共享(提升速度)。在CNN最后一个卷积层后面才是RPN,RPN在feature map上得到候选区域。RPN引入了多尺度Anchor。通过Softmax对anchors属于目标(foreground)还是背景(background)进行分类判决,并使用Bounding Box Regression对anchors进行回归预测,获取Proposal的精确位置,并用于后续的目标识别与检测。简单来说和之后的目标检测一样,就是分类+回归,不同的是这里的分类只需要判断是目标还是背景,不需要知道具体的类别。
除了CNN和RPN。还有两个重要部分:
RoIPooling,综合卷积层特征feature maps和候选框proposal的信息,将propopal在输入图像中的坐标映射到最后一层feature map(conv5-3)中,对feature map中的对应区域进行池化操作,得到固定大小(7×7)输出的池化结果,并与后面的全连接层相连。池化的主要目的还是得到大小固定的向量,便于输入神经网络。原始的对候选框中图像进行大小归一化的方法是crop和warp。
可以看到两种方法都有失真。所以我们换了一种思路,没必要对图像大小归一化,只需要对它们形成的向量归一化就好了。M×N尺度,将proposal的坐标映射到M16×N16大小的conv5-3中,然后将Proposal在conv5-3的对应区域水平和竖直均分为7等份,并对每一份进行Max Pooling或Average Pooling处理,得到固定大小(7×7)输出的池化结果,实现固定长度输出(fixed-length output),如下图所示。水平和竖直方向分别是7等分就可以,不必使得水平和竖直的每一块大小都相同,最后使用最大池化或者平均池化,使得每一块不管大小,都只有一个输出,则得到了统一的7x7的大小。
Classificationand Regression: 全连接层后接两个子连接层——分类层(cls)和回归层(reg),分类层用于判断Proposal的类别,回归层则通过boundingbox regression预测Proposal的准确位置。https://blog.csdn.net/Zachary_Co/article/details/78890768
还没有仔细了解一下ss方法,现在先来看一下RPN。RPN使用一个3x3的卷积核,在feature map上滑动窗口。但是Anchor不是指这个3x3的核,而是3x3卷积核在滑动的过程中,将核中心位置映射回输入图像,生成的3种尺度(scale 边长为128,256,512的正方形),3种长宽比(aspect ratio 1:1,1:2,2:1),共9种的候选框。特征图conv5-3每个位置都对应9个anchors,如果featuremap的大小为W×H,则一共有W×H×9个anchors,滑动窗口的方式保证能够关联conv5-3的全部特征空间,最后在原图上得到多尺度多长宽比的anchors。
因为在候选框的提取RPN和目标检测Fast R-CNN中都需要进行分类classification和回归Regression,所以一共需要4个损失函数。
Reference:
1. https://www.cnblogs.com/skyfsm/p/6806246.html
2. https://blog.csdn.net/Zachary_Co/article/details/78890768