分析Faster RCNN中的RPN

faster rcnn是经典的detection网络,虽然现在有更好的模型(yolo等),但是faster rcnn依然是很值得研究的。


之前在商汤论文分享会上遇到李博同学分享刚刚发表在CVPR2018的论文SiameseRPN,他们的新模型使得单目标追踪效果远超前任state of the art,做到了真正实时的tracking(160+ fps),这个模型实时性之所以好的一个重要就是借鉴了Faster rcnn的RPN,或者说是借鉴了bounding box regression。因为regression算法是十分轻量的模型(相对于神经网络来说)。当时分享会上有不少人都对bbox回归提出疑问,其实这个算法是看起来很难理解但其实很简单的。

本篇博文主要对Bounding box回归做一下解析。


github:https://github.com/rbgirshick/py-faster-rcnn
paper:https://arxiv.org/pdf/1506.01497.pdf


Region Proposal Network

faster rcnn的核心是一个RPN网络。使得相比fast rcnn的基础上,有更快的速度和更高的mAP。
先关注整个Faster rcnn的结构图
分析Faster RCNN中的RPN_第1张图片

detection有两项task:定位和识别,RPN就是单独用来location(定位)的网络。由于RPN的输入是接的卷积层后的feature maps,已经是被高度抽象的特征图了,所以RPN并不需要花参数层在特征提取上,因此RPN可以是一个比较轻量级的网络,这也是计算更fast的原因。


RPN是怎么推荐备选框呢?

要生成高质量的推荐框,需要anchor机制bbox regression


anchor机制
anchor这个单词的翻译是“锚”
分析Faster RCNN中的RPN_第2张图片
仔细一想,论文中的anchor就是“锚”的引申义。把每个点当作一个下锚的地方,每个点生成若干个框代表撒网的意思。把整幅特征图当作汪洋的大海,没过一个点下一个锚,然后开始撒网捕鱼。
第一步,把feature maps(256张map)拍扁,变成一张图(每个点都是256维)。基于每个256d点开始“下锚”。
分析Faster RCNN中的RPN_第3张图片
第二步,“下锚”以后开始撒网,即以每一个锚点为中心生成大小不同的k个框。原文中选用的k=9。九个大小形状不一的框,致力于使目标对象能出现在某个框中。框的大小也是有讲究的,长宽比1:1,2:1,1:2三种,大小也由三种。如下图:

分析Faster RCNN中的RPN_第4张图片

有了anchor机制以后,对于feature maps上的点(每个点维度是256),以每个点为中心生成9个大小不一的框,那么一定有跟ground truth很接近的框


Bounding box regression

如果把跟GT最接近的框当作输出,那么结果肯定是非常粗糙的,大小比例很难跟GT一样。所以就需要调整这个框,平移或者缩放。如下图:

分析Faster RCNN中的RPN_第5张图片
A是你的anchor,G’是你调整后的,G是GroundTruth。那么对A的这个调整,就是Bounding Box回归。为什么说bbox regression是看起来很复杂但实则很简单呢
觉得难以理解是因为通常由两点原因:
1. 对机器学习算法比较薄弱,没有把握到回归算法的精髓;
2. 无法解释为何简单的回归算法能这么强大,还能修正神经网络的结果。

回归算法就是用线性函数去拟合实际函数, y=wx y = w x ,乍看起来就像弱智版的全连接网络。当你的bbox和GT比较接近时,调整框操作才可以使用线性回归模型

我们粗粒度探讨一下线性回归模型的操作:
1. 回归模型的作用:微调整bbox的位置和大小。每个bbox可以由四个数值来表示(中点坐标x,y和长宽l,w)。平移bbox只需在x,y上作加减,调整大小只需在l,w上作乘法。
2. 回归模型的输出:x,y上的增量以及l,w的系数。即,输出也是4个值。
3. 回归模型的输入:bbox在feature maps上划下的区域。

对于下面这个栗子:
分析Faster RCNN中的RPN_第6张图片
红色框是anchor框,蓝色框时GT。现在要通过回归模型调整anchor到GT的样子。
输入是:(类似于下图的feature maps)
分析Faster RCNN中的RPN_第7张图片

输出是:调整平移和缩放的四个数值。

不知道到这一步有没有一种感觉,输入一个飞机体,就可以想象它的机翼部分的范围应该在哪里。而回归模型就做了这么一件事。

前面卷积层已经把把特征高度抽象化了,这里的回归模型只是根据特征来输出调整值。所以这么强大的调整功能,也是有卷积的功劳的。

回归模型的参数也是通过训练得出来,训练思路也可以参考我一再安利的雪柳花明。

你可能感兴趣的:(Computer,Vision,AI数学)