Region Proposal by Guided Anchoring 笔记

Region Proposal by Guided Anchoring 笔记_第1张图片
CVPR2019 的文章

Region Proposal by Guided Anchoring 笔记_第2张图片

anchor 是现代目标检测的基石,一般都采用密集的 anchor ,这些 anchor 在空间中均匀采样,并且有预先设定好的尺度和宽高比例。这篇文章重新研究了 anchor,使之更加高效。

主要提出了 guided anchoring,可以通过语义信息来为 anchor 提供指导,提出的方法联合预测物体的中心可能出现的位置以及不同位置的尺度和宽高比。在预测出来 anchor 的形状之后,又加了一个特征适应模块(feature adaption module)来缓解特征不一致(feature inconsistency)的问题,还研究了如何使用高质量的 proposal 来改进识别的性能。这个提出的方法可以用到任何提 proposal 的部分。

对于 two-stage detector 来说,anchor 是提 proposal 时的回归 bbox 参照物和分类候选框;对于 one-stage detector 来说,anchor 是最终预测时的回归 bbox 参照物和分类候选框。现代的目标检测系统常常从一大堆密集分布的 anchor 开始,比如 Faster RCNN 就是先从 anchor 生成 proposal 然后再把他们分到特定的类别,之后再通过 bbox regression 来改进 proposal 。

设计合理的 anchor 通常需要两个一般规则:

  1. 对齐(alignment)
  2. 一致性(consistency)

首先,使用卷积特征作为 achor 的表示,需要将 anchor 的中心和 feature map 的 pixel 良好地对齐起来。

其次,在一个 feature map 的不同的位置,感受野和语义域应当和 anchor 的尺度形状保持一致。

广泛使用的 sliding window 方法很好地符合了以上两个规则。对于大多数地检测方法来说,anchor 均匀地定义在每一层 feature map 上:每个位置 k k k 个不同尺度、宽高比地 anchor。

anchor-based 方法已经被证实十分有效,但是上面提到地这种均匀放置 anchor 的方法并不一定是最优的方法,上述方法会造成两个困难:

  1. 对于不同的问题,必须预先设计一个很好的 anchor 集合,错误的设计可能会影响检测的速度和质量。
  2. 为了使 proposal 的 recall 尽可能地高,必须使用大量的 anchor,但是其中相当大的一部分都对应着和物体无关的错误候选框,同时,大量的 anchor 会增加计算量,尤其在 proposal 阶段有一个很复杂的分类时。

这篇 paper 提出了一个更加高效的方法来准备 anchor,目标是缓解人为定义的 anchor 引来的问题。动机在于:物体在图片上并不是均匀分布的,一个物体的尺度和图片的内容、位置及场景几何信息紧密相关。从这个直觉出发,文章提出通过两步来生成稀疏的 anchor:

  1. 找到可能含有物体的子区域
  2. 在不同的位置确定其形状

使 anchor 的形状变成可学习的这一思路很有前途,但是它破坏了之前提到的一致性,因此带来了一些问题。anchor 的尺度和形状现在是变量而不是确定的,所以不同的特征图上的点需要学习能够符合对应 anchor 的自适应特征表示,这篇 paper 提出了一个有效的模块根据 anchor 的几何特性来自动调整特征。

基于此提出 Guided Anchoring Region Proposal Network (GA-RPN) 可以有 9.1% 更高的 recall ,用了 90% 更少的 anchor。通过预测 scale 和 aspect ratios ,该方法可以更加有效地处理较高或较宽地物体。除了 region proposal 之外,guided anchoring 地方法可以用到任何需要 anchor 的模型中去,比如 GA-Fast-RCNN, GA-Faster-RCNN, GA-RetinaNet 分别比他们的 baseline 高 2.2,2.7,1.2。另外,该文章探索了怎样使用高质量的 proposal,并提出了一个用 GA-RPN 进行的 fine-tuning 的模式,它可以使已经收敛的 Faster R-CNN 模型只用 3 个 epoch 就从 37.4 提升到 39.6。

文章的主要贡献:

  1. 提出了一个新的 anchoring 的范式,并不是预定义的密集 anchor,而是能够预测非均匀分布且形状任意的 anchor。
  2. 我们用两个分解了的条件分布来明确地表达 anchor 的联合分布,分别用两个模块来对他们进行建模。
  3. 我们研究了将特征和相应 anchor 对应起来的重要性,并且设计了一个 特征适应模块来根据潜在的 anchor 的形状来改善特征。
  4. 我们研究了如何在两阶段检测器中使用高质量的 proposal,并且提出了一个方法来改进已经训练好的模型的性能。

相关工作:

  • sliding window anchors

通过滑动窗口法在特征图中生成 anchor 的方法已经用了很久。在现代的目标检测中,two-stage 的方法也延续了很久。Faster-RCNN 提出了 Region Proposal Network (RPN) 来生成 proposal,它使用一个小的全卷积网络来将每个 sliding window anchor 映射到一个低维的特征上去。这种设计也被用到之后的两阶段方法中,比如 R-FCN, Mask RCNN, FPN 等。MetaAnchor 提出了生成 anchor 的元学习方法。也有很多的工作使用级联的架构来拒绝在早期阶段或早期层中容易的样本,通过迭代回归包围框来不断改进,如 Deepproposal, Object detection
via a multi-region and semantic segmentation-aware cnn
model, G-cnn: an iterative grid based object detector, Craft objects from images, RefineDet, Cascade region proposal and global context for deep object detection, Cascader-cnn: Delving into high quality object detection, Hybrid task cascade for instance segmentation. 和双阶段相比,单阶段去掉了生成 proposal 的步骤,直接一步预测出检测框和类别分数。尽管没有了生成 proposal 的步骤,单阶段的方法仍然使用通过 sliding window 生成的 anchor。比如 SSD 和 DenseBox 从特征图上生成密集的 anchor,然后用他们来预测结果。RetinaNet 提出 Focal Loss 来解决前景背景不平衡的问题。YOLOv2 使用了 sliding window anchor 来分类以及预测坐标,比前一版本得到了更高的 recall。

  • 比较与不同
  1. 之前的方法需要依靠均匀分布的、密集的 anchor,文章提出了一种方法来指导 anchor 的生成,只需要比较稀疏的 anchor
  2. Cascade 的检测器采用多于一个阶段来修正预测出的坐标结果,这样的计算量很大,速度很慢。
  3. anchor-free 的方法通常框架较为简单,并且能够在一个阶段内得出结果。由于没有用 anchor,也没有进一步的 refinement,他们缺少处理复杂场景的能力。我们关注于稀疏的、不均一分布的 anchor 方式,并且用高质量的 proposal 来提升检测的性能。为了达到这个目的,必须解决 misalignment 和 inconsistency 的问题。
  4. 一些单阶段的检测器通过多次回归和分类来对 anchor 进行 refine,我们的方法与之不同,并不是不断地对 anchor 进行 refine,而是预测 anchor 的一个分布,该分布用位置和形状进行表征。传统的方法不能够考虑 anchor 和 feature 之间的对齐问题,因此他们需要对 anchor 回归多次,既违背了对其原则,也违背了一致性原则,与之不同的是,我们强调这两个条件的重要性,所以我们只预测 anchor 的形状,固定 anchor 的中心,然后根据预测出来的形状来自动调整特征。

方法:

anchor 是现代目标检测流程的基础,主流网络更多地使用的是均匀分布地 anchor,具体来说,是一系列的在 W × H W\times H W×H 大小的特征图上定义的不同 scale 和 宽高比的 anchor,这种方式是低效的,因为许多 anchor 所在的位置并不太可能存在物体。另外,手动设计的 anchor 为物体不切实际地定义了一系列固定形状(尺度和宽高比)的 anchor。

在这篇文章中,目标是设计更加高效的 anchoring 的方法,可以自己学到相应的形状。首先,一个物体的位置和形状可以定义为 ( x , y , w , h ) (x,y,w,h) (x,y,w,h) ,其中 ( x , y ) (x,y) (x,y) 是物体的中心, w , h w,h w,h 是宽和高,假如我们从一个给定的图片 I I I 中拿出一个物体,那么该物体的位置和大小可以认为符合以下的分布:

p ( x , y , w , h ∣ I ) = p ( x , y ∣ I ) p ( w , h ∣ x , y , I ) p(x,y,w,h|I)=p(x,y|I)p(w,h|x,y,I) p(x,y,w,hI)=p(x,yI)p(w,hx,y,I)

这种分解考虑了两个重要的直觉:

  1. 给定一个图片,物体可能只存在于特定的区域
  2. 物体的形状(尺度以及宽高比)和物体所在的位置有很深的联系

按照这个公式,我们设计了一个生成 anchor 的模块,该模块包含两个分支,分别预测位置和形状。给定一个图片 I I I,首先得到一个特征图 F I F_I FI ,在 F I F_I FI 之上,位置预测分支产生一个概率图,表示物体可能在的位置,形状预测分支预测基于位置的形状。给定这两个分支的输出,我们选择概率大于一定值的位置以及其对应的最可能的形状,从而生成一系列的 anchor。由于 anchor 的形状可能会变化,不同位置的特征应当捕捉不同的范围的视觉内容。考虑到这一点,我们进一步引入了 feature adaptation 模块,该模块可以根据 anchor 的形状来自适应特征。

上述的生成 anchor 的过程主要基于单一特征图,最近的发展表现出在多层 feature map 进行预测得到的效果更好。因此发展出一个多级 anchor 生成的模块,主要基于的是 FPN。注意在我们的设计中,anchor 生成的参数在所有用的 feature level 中是共享的,因此这种方式是很高效的。

Region Proposal by Guided Anchoring 笔记_第3张图片

  • anchor 位置预测

anchor location prediction 分支生成一个概率图 p ( ⋅ ∣ F I ) p(\cdot|F_I) p(FI) ,其大小和输入的特征图 F I F_I FI 的大小一样,每一个值 P ( i , j ∣ F I ) P(i,j|F_I) P(i,jFI) 对应图像 I I I 中的坐标 ( ( i + 1 2 ) s , ( j + 1 2 ) s ) ((i+\frac{1}{2})s,(j+\frac{1}{2})s) ((i+21)s,(j+21)s) ,其中 s s s 是 feature map 的 stride ,即相邻 anchor 之间的距离,每一个值表示该位置存在一个物体的中心的概率。

在我们的构造中,概率图 p ( i , j ∣ F I ) p(i,j|F_I) p(i,jFI) 用一个子网络 N L \mathcal{N}_L NL 来进行预测,该网络在 F I F_I FI 上用一个 1 × 1 1\times 1 1×1 卷积得到存在物体的分数,然后用一个 sigmoid 函数装换成概率。一般来说一个深一点的子网络可以可以得到更加准确的预测,我们发现经验上来看,在一层卷积层后跟一个 sigmoid 函数可以在效率和准确率之间得到一个很好的平衡。

根据产生的概率图,我们再确定可能存在物体的位置,首先设置一个阈值 ϵ L \epsilon_L ϵL,选择概率大于该阈值的位置为包含物体的位置,这一步可以滤掉 90% 的区域,同时能够保持相同的召回率。如图4.b 所示,天空和大海都滤掉了,anchor 主要集中在人和冲浪板上。由于不再需要考虑这些滤掉的区域,因此我们将随后的卷积层用 masked convolution 来替代,这样做在 inference 时会更快。(??啥是 masked convolution??)

masked convolution 参考文献:

在这里插入图片描述
在这里插入图片描述
Region Proposal by Guided Anchoring 笔记_第4张图片

  • anchor 形状预测

在得到可能存在物体的位置之后,下一步是确定在每一个位置物体的形状,这一步通过 anchor shape prediction 分支来实现。

这一个分支和传统的 bbox regression 的分支很不一样。因为这一分支不会改变 anchor 的位置,也不会造成 anchor 和 anchor feature 之间的 misalignment 。具体地,给定一个特征图 F I F_I FI ,这个分支预测每个位置地最佳地形状 ( w , h ) (w,h) (w,h) ,该形状和最近的 ground truth 覆盖最大。

虽然我们的目标是预测 w , h w,h w,h,但是我们发现经验上来看直接预测这两个值是很不稳定的,因为他们的变化范围太大了,所以我们进行了如下变换:

w = σ ⋅ s ⋅ e d w , h = σ ⋅ s ⋅ e d h w=\sigma\cdot s\cdot e^{dw},h=\sigma\cdot s\cdot e^{dh} w=σsedw,h=σsedh

!!!wait a minuate,你这样做不就相当于潜式定义了一堆 anchor 嘛…

shape prediction branch 输出的是 d w , d h dw,dh dw,dh ,然后再根据上式将其映射回 w , h w,h w,h,其中 s s s 是 feature level 的 stride, σ \sigma σ 是一个经验的缩放因子(实验中 σ = 8 \sigma=8 σ=8)。这种非线性变换将输出空间 [ 0 , 1000 ] [0,1000] [0,1000] 映射到了 [ − 1 , 1 ] [-1,1] [1,1],因此训练起来更加容易。在我们的设计中,我们使用了一个 N S \mathcal{N}_S NS 的子网络,其包含一个 1 × 1 1\times 1 1×1 的卷积,能够产生两个 channel 的结果,分别对应 d w , d h dw,dh dw,dh,然后再进行上述变换,把 d w , d h dw,dh dw,dh 映射到 w , h w,h w,h

注意到上述设计和传统的方法是不同的:传统方法在每个位置预先定义了多个 anchor,而现在的设计每个位置只有一个形状是动态预测出来的 anchor。我们实验验证了由于位置和形状之间有很强的相关性,我们的方法比 baseline 方法能够达到更高的 recall。由于该设计允许存在任意的宽高比,因此该方法可以捕捉到极端高或者极端宽的物体。

  • Anchor-Guided Feature Adaptation

在传统的 RPN 或者单阶段检测器中,他们通常使用 sliding window 的方法,anchor 在整个特征图上是均匀分布的,也就是说他们在每个位置都有相同的形状和尺度。因此特征图可以学到一致的表示。在我们的方法中,anchor 的形状在不同的位置是不断变化的,在这种条件下,我们发现用 Faster RCNN 中既定的方法并不一定是一个好的选择,Faster RCNN 均匀地在特征图上应用了全卷积分类器。理想状态下,一个较大的 anchor 的特征应当编码了一个较大的区域的内容,对于较小的 anchor 也应当有对应的较小的区域的内容。从这个直觉出发,我们进一步设计了一个 anchor-based feature adaptation 模块,该模块根据其 anchor 的形状把每个单独位置的特征进行了变换:

f i ′ = N T ( f i , w i , h i ) \mathbf{f}'_i=\mathcal{N}_T(\mathbf{f}_i,w_i,h_i) fi=NT(fi,wi,hi)

其中 f i \mathbf{f}_i fi 是位置 i i i 处的特征, ( w i , h i ) (w_i,h_i) (wi,hi) 是对应的 anchor 的形状。对于这样的位置相关的变换,我们采用了一个 3 × 3 3\times 3 3×3 deformable convolutional layer 来实现 N T \mathcal{N}_T NT 。如图1 所示,首先用 anchor shape prediction 分支的输出预测 offset field,然后用 offset 对原始的 feature map 做一个 deformable convolution 来得到 f I ′ \mathbf{f}_I' fI,得到适应过的 feature 后,可以继续进行下一步的 classification 和 bounding-box regression

训练:

  • 联合的目标

提出的框架可以进行端到端的优化,使用的是 multi-taks loss。除了传统的分类 loss L c l s \mathcal{L}_{cls} Lcls 和回归 loss L r e g \mathcal{L}_{reg} Lreg ,我们引进了两个额外的 loss :anchor localization L l o c \mathcal{L}_{loc} Lloc 和 anchor shape prediction L s h a p e \mathcal{L}_{shape} Lshape ,他们放在一块进行联合优化:

L = λ 1 L l o c + λ 2 L s h a p e + L c l s + L r e g \mathcal{L}=\lambda_1\mathcal{L}_{loc}+\lambda_2\mathcal{L}_{shape}+\mathcal{L}_{cls}+\mathcal{L}_{reg} L=λ1Lloc+λ2Lshape+Lcls+Lreg

  • anchor location targets

为了训练 anchor localization 分支,对于每个图片,我们需要一个二值标签图,其中 1 表示可以放置 anchor,0 表示不能放。在这里,我们使用 ground truth bbox 来直到二值标签图的生成。具体地,我们希望在物体的中间部分能够放更多的 anchor,在远离中间的部分放的少一些。首先,将 ground truth bbox ( x g , y g , w g , h g ) (x_g,y_g,w_g,h_g) (xg,yg,wg,hg) 映射到对应的特征图上,得到 ( x g ′ , y g ′ , w g ′ , h g ′ ) (x_g',y_g',w_g',h_g') (xg,yg,wg,hg) ,用 R ( x , y , w , h ) \mathcal{R}(x,y,w,h) R(x,y,w,h) 来表示中心为 ( x , y ) (x,y) (x,y),宽高为 ( w , h ) (w,h) (w,h) 的矩形。anchors 要尽可能地放在接近 ground truth 中心的位置上来得到较高的初始 IoU,因此我们对每一个 box 定义三种区域:

  1. 中心区域 C R = R ( x g ′ , y g ′ , σ 1 w ′ , σ 1 h ′ ) CR=\mathcal{R}(x_g',y_g',\sigma_1w',\sigma_1h') CR=R(xg,yg,σ1w,σ1h) 定义的是盒子中间的区域, C R CR CR 中的点认为是正样本
  2. 忽略区域 I R = x g ′ , y g ′ , σ 2 w ′ , σ 2 h ′ ∖ C R IR=\mathcal{x_g',y_g',\sigma_2w',\sigma_2h'}\setminus CR IR=xg,yg,σ2w,σ2hCR I R IR IR 中的点在训练中不考虑
  3. 外部区域 O R OR OR 是除了 C R , I R CR,IR CR,IR 的区域,这部分区域的点定义为负样本

Region Proposal by Guided Anchoring 笔记_第5张图片
DenseBox 提出了灰色地带(gray zone)的概念来平衡采样,和上述方法类似,但是 DenseBox 只能在一个 feature level 上用。由于我们用的是 FPN,所以我们还考虑了相邻 feature map 的影响。具体地,每个 level 的 feature map 只能选择一定尺度范围的目标,所以只有在 gt 对应尺度的 feature map 上 C R CR CR 才有定义,相邻 level 对应的区域设置为 I R IR IR,当多个区域重叠时, C R CR CR 可以覆盖 I R IR IR I R IR IR 可以覆盖 O R OR OR ,由于 C R CR CR 通常只占一小部分的区域,因此我们使用了 Focal Loss

  • anchor shape targets

分两个步骤来确定每个 anchor 最佳的形状:

  1. 将 anchor 匹配到 ground truth bbox
  2. 预测 anchor 的宽和高使之能够和 gt 有尽可能大的重叠

Faster RCNN 中将一个候选 anchor 分配给与之具有最大 IoU 的 ground truth 上,但是这个过程在我们这种情况下不可用,因为我们的 anchor 呀,它没有 w , h w,h w,h ,不是预先定义的,而是变量。于是定义 变量 anchor a w h = { ( x 0 , y 0 , w , h ) ∣ w > 0 , h > 0 } a_{wh}=\{(x_0,y_0,w,h)|w>0,h>0\} awh={(x0,y0,w,h)w>0,h>0} 和 gt ( x g , y g , w g , h g ) (x_g,y_g,w_g,h_g) (xg,yg,wg,hg) 之间的 IoU 为 vIoU:

v I o U ( a w h , g t ) = max ⁡ w > , h > 0 I o U n o r m a l ( a w h , g t ) \mathrm{vIoU}(a_{wh},gt)=\max_{w>,h>0}\mathrm{IoU}_{normal}(a_{wh},gt) vIoU(awh,gt)=w>,h>0maxIoUnormal(awh,gt)

其中 I o U n o r m a l \mathrm{IoU}_{normal} IoUnormal 是通常的 IoU 的定义, w , h w,h w,h 是变量。注意到对于任意一个 anchor location ( x 0 . y 0 ) (x_0.y_0) (x0.y0) 和 ground truth g t gt gt ,上述式子的解析表达是非常复杂的,并且难以实现,因此我们使用另外一种方法来估计它。给定 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),我们采样一些常见的 w , h w,h w,h 来模拟对所有 w , h w,h w,h 的枚举,然后我们计算这些枚举出来的 anchor 和 gt 之间的 IoU ,选择最大值作为 vIoU。在我们的实验中,我们采样了 9 对 ( w , h ) (w,h) (w,h),这 9 对就是 RetinaNet 中 anchor 用的那 9 个(????我感觉这样搞很复杂,因为 anchor shape 的时候要用前一步 anchor location 的结果,也就是说前一步已经通过定义的 CR,IR,OR 来定义好了正负样本,并且每个 feature level 也有对应的 scale 范围,那么到 shape 的这一步,正样本的 anchor 基本上分布已经很有规律性了——即每个 gt 都有对应的一些正样本 anchor ,并且根据 gt 的大小,分布在对应的 feature level 上,而对于 vIoU 而言,相当于 anchor position 越接近于 gt 的中心,vIoU 越大,当 anchor position 在 gt 中心时,vIoU 达到最大值 1,所以这篇文章这样建模纯粹是把简单问题复杂化,而且也不能完完全全地说这些 anchor 起初没有对应的 w , h w,h w,h,由于这一层网络学习的是 d w , d h dw,dh dw,dh,之后又经过了一个变换到 w , h w,h w,h,这一步就隐式地为不同 feature level 定义了最初 anchor 的 w , h w,h w,h,只不过没有明说罢了 ),理论上讲,采样的越多,估计的也就越准确,但是相应的计算量也很大。我们使用了 bounded iou loss 的一个变种来优化 shape prediction,loss 的定义为:

L s h a p e = L 1 ( 1 − min ⁡ ( w w g , w g w ) ) + L 1 ( 1 − min ⁡ ( h h g , h g h ) ) \mathcal{L}_{shape}=\mathcal{L}_1(1-\min(\frac{w}{w_g},\frac{w_g}{w}))+\mathcal{L}_1(1-\min(\frac{h}{h_g},\frac{h_g}{h})) Lshape=L1(1min(wgw,wwg))+L1(1min(hgh,hhg))

其中 L 1 \mathcal{L}_1 L1 是 smooth L1 loss

使用高质量的 proposal :

用 guided anchoring 增强过的 RPN (GA-RPN)可以生成更高质量的 proposal。我们探索了怎么用这些高质量的 proposal 来提升传统双阶段检测器的性能。

首先,我们研究了 RPN 和 GA-RPN 的 IoU 的分布:

Region Proposal by Guided Anchoring 笔记_第6张图片
可以看到 GA-RPN 相对于 RPN 生成的 proposal 有两个明显的好处:

  1. positive proposal 的数量更多
  2. 高 IoU 的 proposal 的比例更大

一个很直接的想法是将现在的 RPN 替换成 GA-RPN ,然后再去训练模型。但是,这个问题是不平凡的,简单地这样做带来的效果是有限的。通过我们的观察,使用高质量 proposal 的前提条件是使训练样本的分布和 proposal 的分布相一致,因此,我们设置了较高的 positive/negative threshold 并使用了更少的样本来进行端到端训练。

除了端到端训练,我们发现 GA-RPN 的 proposal 可以提升一个已经训练好的双阶段检测器,具体而言,给定一个训练好的模型,我们去掉生成 proposal 的模块,然后用事先计算好的 GA-RPN 的 proposal 来对其微调几个 epoch (默认是 3 epochs)。GA-RPN proposal 在 inference 的时候也可以用。这种简单的 fine-tuning 方法可以带来很大的提升,而只需要花费较少的一些时间(??????训练 GA-RPN 不需要花时间的嘛?)

实验:

  • 实验设置

数据:使用 MSCOCO 2017,都是常规操作,略去
实现细节:使用 ResNet-50-FPN ,图片 resize 成 1333x800, σ 1 = 0.2 , σ 2 = 0.5 \sigma_1=0.2,\sigma_2=0.5 σ1=0.2,σ2=0.5,multi-task loss 中, λ 1 = 1 , λ 2 = 0.1 \lambda_1=1,\lambda_2=0.1 λ1=1,λ2=0.1 来平衡 location 和 shape 分支。在 8 张 GPU 上使用 synchronized SGD ,2imgs/GPU ,训练 12 epochs,初始学习率 0.02,8 epoch 和 11 epoch 时学习率降 0.1,运行时间是在 TITAN X GPU 上测的
评估指标:RPN 的结果用 AR 来衡量,是不同 IoU threshold (0.5 到 0.95)下的平均 recall。每张图片 100,300,1000 个 proposal 的 AR 表示为 AR_100,AR_300,AR_1000,小中大物体的 AR 表示为 AR_S,AR_M,AR_L,在 100 个 proposal 上测得。检测的结果通过标准的 COCO 指标获得,是 IoU 0.5 到 0.95 的 mAP 的平均值。

  • 结果

我们首先比较了 GA-RPN 和 RPN 的 recall 结果。同时我们比较了 RPN 的一些变种,RPN+9 anchors 意思是在每个 feature level 上用了 3 种 scale 和 3 种不同的宽高比,baseline 只用了 1 种 scale 和 3 种宽高比(依据是 FPN 的原 paper)。RPN+Focal Loss 以及 RPN+Bounded IoU Loss 表示使用 focal loss 以及 bounded IoU loss 分别来替代 binary cross-entropy loss 和 smooth l1 loss。RPN+Iterative 表示连续使用了两个 RPN head,两个 RPN head 中间加了一个额外的 3x3 卷积。RefineRPN 是一个类似于 RefineDet 的结构,其中 anchor 在 FPN 前后分类回归了两次。

表1 显示了我们的方法比 RPN baseline 好太多,它可以改进 AR_300 和 AR_1000 分别 10.5% 和 9.1%,GA-RPN 放在一个较小的 backbone 上可以得到比 RPN 放到大的 backbone 上更高的 recall。

Region Proposal by Guided Anchoring 笔记_第7张图片
我们给力的结果可以从图4 的定性分析中看出。
Region Proposal by Guided Anchoring 笔记_第8张图片
可以看到 anchor 更多的集中在物体上,为之后的 proposal 提供了一个良好的基础。图 5 展示了一些例子。

Region Proposal by Guided Anchoring 笔记_第9张图片
RPN+Interative 和 RefineRPN 只给 RPN 带了了有限的增益,这证明了之前提到的两个规则——对齐和一致性(alignment and consistency)——的有效性。简单地多次 refine anchor 不够高效,保持 anchor 中心固定,根据 anchor 形状来自适应特征是至关重要的。

现在研究 GA 的泛化性能,做实验如表2:

Region Proposal by Guided Anchoring 笔记_第10张图片
进一步研究高质量 proposal 的有效性,取一个训练好的 Faster RCNN 的模型,分别用 RPN 和 GA-RPN 的 proposal 进行微调,都是微调 3 个 epochs,学习率分别为 0.02, 0.002, 0.0002,结果如表 3:

Region Proposal by Guided Anchoring 笔记_第11张图片
消融实验:

  • 模型设计

我们依次去掉 location prediction , shape prediction 和 feature adaption 来验证这三个部分各自的有效性。结果如表 4

Region Proposal by Guided Anchoring 笔记_第12张图片

  • anchor location

location threshold ϵ L \epsilon_L ϵL 控制了 anchor 分布的稀疏性,选择不同的 threshold 会产生不同数量的 anchor,改变这个参数,比较以下结果:平均每张图片的 anchor 数量,最终 proposal 的 recall,inference 时间。

Region Proposal by Guided Anchoring 笔记_第13张图片
可以看出,大多数背景的 objectness score 都很接近 0,所以设置一个比较小的 ϵ L \epsilon_L ϵL 就可以滤去 90% 以上的 anchor,而 recall 只降低了一点点。注意到 RPN 中只有一层卷积网络,所以速度加快的不多。尽管如此,在比较重的头部中,大量减少 anchor 的数量会提速不少。

  • anchor shape

比较 GA 生成的 anchor 和 sliding window 生成的 anchor,我们的方法在每个位置只有 1 个而不是 k 个 anchor,因此 anchor 的数量减少了 1/k,图 6 显示了不同方法的 scale 和 aspect ratio 的分布,预测处的 anchor 包含了更加广泛的尺度和形状,并且个 ground truth 有着相近的分布,提供了一系列和物体有很高重叠度的初始 anchor。
Region Proposal by Guided Anchoring 笔记_第14张图片

  • feature adaption

feature adaption 模块很大程度上改善了 recall,证明了 feature consistency 的改进是很重要的,我们声称,这一改进不仅仅来源于对 deformable conv 的使用,还在于我们用 anchor shape prediction 来 predict deformable conv 的 offset,假如说直接在生成 anchor 的后面加 deformable 的话,效果是没有我们这种做法好的。

  • alignment and consistency rule

我们证实了这两个提出的规则的必要性,alignment 规则要求我们应该使 anchor 保持和特征图的对齐。根据 consistency 规则,我们设计了 feature adaption 模块来 refine 特征,表 6 展示了这些规则的重要性:

Region Proposal by Guided Anchoring 笔记_第15张图片

  • 使用高质量的 proposal

尽管有了高质量的 proposal,训练一个好的检测器仍然是一个非平凡的问题,表 7 可以看出:

  1. 更大的 IoU threshold 对于利用高质量的 proposal 很重要,通过关注更高 IoU 的正样本,false positive 的数量会更少,用于分类的 feature 会更加具有辨别性。当设置 IoU 小于 0.6 时为负样本,AP_0.5 会降低,但是 AP_75 等会升高,整体是升高的。
  2. 如果 recall 足够高,在训练和测试时使用更少的 proposal 对学习是有好处的。较少的 proposal 会造成较小的 recall,但是会简化学习的过程,因为在低分数的 proposal 中有更多的难样本。当训练 RPN 时使用 300 proposal ,效果会降低,因为 recall 过低,导致很多物体都没有检测出来。但是 GA-RPN 能够保证有很少的 proposal 时还能有高的 recall ,因此此时用 300 个 proposal 训练时仍然能够提升效果。
    Region Proposal by Guided Anchoring 笔记_第16张图片
  • 超参数

我们的方法对超参数不明显:

  1. 算 vIoU 时选择不同的采样数如 3.,9,15, 得到的 AR@100 是差不多的
  2. λ 2 = 0.1 , 0.2 , 0.05 \lambda_2=0.1,0.2,0.05 λ2=0.1,0.2,0.05 得到的结果差不多
  3. 改变 σ 1 ∈ [ 0.1 , 0.5 ] \sigma_1\in[0.1,0.5] σ1[0.1,0.5],改变 σ 2 ∈ [ 0.2 , 1.0 ] \sigma_2\in[0.2,1.0] σ2[0.2,1.0] ,结果也差不多。

你可能感兴趣的:(Paper,Reading)