前言
前两天讲了RCNN和Fast-RCNN,相信对目标检测已经有了一些认识了。我们知道RCNN和Fast-RCNN都是双阶段的算法,依赖于候选框搜索算法。而搜索算法是很慢的,这就导致这两个算法不能实时。基于这个重大缺点,Faster-RCNN算法问世。
贡献
Fast-RCNN仍依赖于搜索候选框方法,其中以Selective Search为主。在Fast-RCNN给出的时间测试结果中,一张图片需要2.3s的前向推理时间,其中2s用于生成2000个ROI。可以看到整个算法的时间消耗几乎都在区域候选框搜索这个步骤了,如果我们能去掉候选框搜索这个过程是不是实时有希望了?Faster-RCNN就干了这件事,论文提出在内部使用深层网络代替候选区域。新的候选区域网络(RPN)在生成ROI的效率大大提升,一张图片只需要10毫秒!!!
网络结构
Faster-RCNN的网络结构如下图表示:
我们可以发现除了添加一个RPN网络之外,其他地方和Fast-RCNN是完全一致的。引用知乎上看到的一张更详细的网络结构如下:
RPN网络
RPN网络将第一个卷积网络(backbone,如VGG16,ResNet)的输出特征图作为输入。它在特征图上滑动一个3×33\times 33×3的卷积核,以使用卷积网络构建与类别无关的候选区域(候选框建议网络只用关心建议出来的框是否包含物体,而不用关系那个物体是哪一类的),我们将RPN产生的每个框叫做Anchor。
这里这样说肯定还是比较模糊,我引用一张训练时候的RPN的结构图然后固定输入分辨率和backbone为VGG16来解释一下。下面这张图是RPN架构:
我们可以看到anchor的数量是和Feature Map的大小相关,对于特征图中的每一个位置,RPN会做k次预测。因此,在这里对每个像素,RPN将输出4×k4\times k4×