admin管理员组

文章数量:1122962

Faster

文章目录

    • 1,Anchor是如何生成的?
      • 1.1 特征图如何得到
      • Anchor的生成过程
    • 2,Anchor的作用是什么?

1,Anchor是如何生成的?

1.1 特征图如何得到

假设对于网络输入的图像尺寸大小为3*600*800,那么经过VGG网络4次卷积池化后我们会得到的特征图的尺寸为38*50*256的特征图,这里面有两点需要注意:

  • 所有的conv层都是:kernel_size=3,pad=1,stride=1
  • 所有的pooling层都是:kernel_size=2,pad=0,stride=2

在Faster RCNN Conv layers中对所有的卷积都做了扩边处理( pad=1,即填充一圈0),导致原图变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。正是这种设置,导致Conv layers中的conv层不改变输入和输出矩阵大小。如图3:

Conv layers中的pooling层kernel_size=2,stride=2。这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)!这样Conv layers生成的feature map中都可以和原图对应起来。

Anchor的生成过程

Anchor是如何生成的?,首先要明确一个问题就是Anchor一定是作用于原图的,而且Anchor跟卷积后的特征图有具有相关性,那它们之间的一个关系是什么呢?可以参考下图所示:

上面这张图表示的意思是对于卷积后的特征图跟原图之间所对应的一种关系,图中原图的尺寸为600x800,所以经过VGG基础网络中4次池化操作,每次池化操作尺寸减半,所以最后生成的特征图的宽度为(800/16 = 50),高度为(600/16=37.5 约等于38),也就是说对于特征图中一个像素点对应的是原图中一个16*16的像素块


以上两张示意图表示的意思是对于上图中的特征图的红框向右或向下滑动的时候,其对应的原图中的红框自然向右或向下移动,如图所示,那么当我们在特征图上滑动的时候,对应原图区域就会产生9个anchor。所以FasterRCNN共产生50x38x9=17100个anchor,基本覆盖了全图各个区域。

那么接下来问题来了,我们生成了这么多Anchor到底有什么作用呢?,下面我们就再来谈一谈Anchor的作用是什么

2,Anchor的作用是什么?

上一步我们解释了Anchor生成的机制,从上一步中我们生成Anchor的机制可知,Anchor的生成是固定的,也就是说当我们生成了特征图,然后映射到原图所有的Anchor的位置和大小都是固定且已知的,那这些已知的Anchor框到底起到什么作用呢?我们还是通过示意图来展开:
如图上图所示假设绿色框为飞机的Ground Truth(GT),红色为提取的foreground anchors(也就是我们上一节中生成的所有Anchor框中的其中一个),那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得foreground anchorsGT更加接近。

那么通过数学语言我们可以通过将上述问题转化以下问题:
对于窗口一般使用四维向量 ( x , y , w , h ) (x, y, w, h) (x,y,w,h)表示,分别表示窗口的中心点坐标和宽高。红色的框A代表原始的Foreground Anchors,绿色的框 G G G代表目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A A A经过映射得到一个跟真实窗口 G G G 更接近的回归窗口 G ′ G' G′,即:给定 A = ( A x , A y , A w , A h ) A=(Ax, Ay, Aw, Ah) A=(Ax,Ay,Aw,Ah)
寻找一种映射 f f f,使得
f ( A x , A y , A w , A h ) = ( G ′ x , G ′ y , G ′ w , G ′ h ) f(Ax, Ay, Aw, Ah)=(G'x, G'y, G'w, G'h) f(Ax,Ay,Aw,Ah)=(G′x,G′y,G′w,G′h)
其中
( G ′ x , G ′ y , G ′ w , G ′ h ) ≈ ( G x , G y , G w , G h ) (G'x, G'y, G'w, G'h)≈(Gx, Gy, Gw, Gh) (G′x,G′y,G′w,G′h)≈(Gx,Gy,Gw,Gh)。

上面的这个过程总结起来就是一句话:就是以Anchor为媒介,然后通过学习某种变换(即平移和缩放)使得预测框与真实框之间尽可能重合,从而达到微调检测框的目的。

至于如何学习这种变换的理论推导可以参考这篇博文,本文的图片也是引用至这里
RegionProposal Network)RPN网络结构及详解

所以看到这里,我们应该就能明白我们为什么要生成Anchor,以及它在整个模型中到底起到了什么作用,其实Anchor起到的起到的就是一种先验框的作用

本文标签: Faster