实习日记~

菜鸟实习日记~day17(R-FCN)

2017-11-01  本文已影响0人  飞翔的小瓜瓜

科研:

一、R-FCN(引用自机器之心)

还记得 Fast R-CNN 是如何通过在所有 region proposal 上共享同一个 CNN,来改善检测速度的吗?这也是设计 R-FCN 的一个动机:通过最大化共享计算来提升速度。

R-FCN,或称 Region-based Fully Convolutional Net(基于区域的全卷积网络),可以在每个输出之间完全共享计算。作为全卷积网络,它在模型设计过程中遇到了一个特殊的问题。

一方面,当对一个目标进行分类任务时,我们希望学到模型中的位置不变性(location invariance):无论这只猫出现在图中的哪个位置,我们都想将它分类成一只猫。另一方面,当进行目标检测任务时,我们希望学习到位置可变性(location variance):如果这只猫在左上角,那么我们希望在图像左上角这个位置画一个框。所以,问题出现了,如果想在网络中 100% 共享卷积计算的话,我们应该如何在位置不变性(location invariance)和位置可变性(location variance)之间做出权衡呢?

R-FCN 的解决方案:位置敏感分数图

每个位置敏感分数图都代表了一个目标类(object class)的一个相关位置。例如,只要是在图像右上角检测到一只猫,就会激活一个分数图(score map)。而当系统看见左下角出现一辆车时,另一个分数图也将会被激活。本质上来讲,这些分数图都是卷积特征图,它们被训练来识别每个目标的特定部位。

以下是 R-FCN 的工作方式:

1、在输入图像上运行一个 CNN(本例中使用的是 ResNet)。

2、添加一个全卷积层,以生成位置敏感分数图的 score bank。这里应该有 k²(C+1) 个分数图,其中,k²代表切分一个目标的相关位置的数量(比如,3²代表一个 3x3 的空间网格),C+1 代表 C 个类外加一个背景。

3、运行一个全卷积 region proposal 网络(RPN),以生成感兴趣区域(regions of interest,RoI)。

4、对于每个 RoI,我们都将其切分成同样的 k²个子区域,然后将这些子区域作为分数图。

5、对每个子区域,我们检查其 score bank,以判断这个子区域是否匹配具体目标的对应位置。比如,如果我们处在「上-左」子区域,那我们就会获取与这个目标「上-左」子区域对应的分数图,并且在感兴趣区域(RoI region)里对那些值取平均。对每个类我们都要进行这个过程。

6、一旦每个 k²子区域都具备每个类的「目标匹配」值,那么我们就可以对这些子区域求平均值,得到每个类的分数。

7、通过对剩下 C+1 个维度向量进行 softmax 回归,来对 RoI 进行分类。

下面是 R-FCN 的示意图,用 RPN 生成 RoI:

当然,即便有上述文字以及图片的解释,你可能仍然不太明白这个模型的工作方式。老实说,当你可以实际看到 R-FCN 的工作过程时,你会发现理解起来会更加简单。下面就是一个在实践中应用的 R-FCN,它正在从图中检测一个婴儿:

我们只用简单地让 R-FCN 去处理每个 region proposal,然后将其切分成子区域,在子区域上反复询问系统:「这看起来像是婴儿的『上-左』部分吗?」,「这看起来像是婴儿的『上-中』部分吗?」,「这看起来像是婴儿的『上-右』部分吗?」等等。系统会对所有类重复这个过程。如果有足够的子区域表示「是的,我的确匹配婴儿的这个部分!」那么 RoI 就会通过对所有类进行 softmax 回归的方式被分类成一个婴儿。」

借助这种设置,R-FCN 便能同时处理位置可变性(location variance)与位置不变性(location invariance)。它给出不同的目标区域来处理位置可变性,让每个 region proposal 都参考同一个分数图 score bank 来处理位置不变形这些分数图应该去学习将一只猫分类成猫,而不用管这只猫在在那个位置(ROI Pooling的过程)。最好的是,由于它是全卷积的,所以这意味着网络中所有的计算都是共享的。

因此,R-FCN 比 Faster R-CNN 快了好几倍,并且可以达到类似的准确率。

上一篇下一篇

猜你喜欢

热点阅读