论文阅记 Region Proposal by Guided Anchoring
文献地址:https://arxiv.org/pdf/1901.03278.pdf
源码地址:
GA-RPN应用中的效果
可以看出,在Faster-RCNN单纯使用GA-RPN便可以提升2.7%。
背景
anchor是目标检测中的重要概念之一,它作为回归和分类的参考和基准,在two-stage模型中预测建议区域;在single-stage模型中预测最终的bounding box。现在的目标检测通道通常以一组密集分布的锚点开始。以Faster-RCNN为例,该算法首先从密集的anchor集合中生成区域建议,然后将anchor划分为特定的类,并通过bounding box回归来优化anchor的位置。
更具体来说,two-stage model的第一阶段通常采用RPN生成proposal,这是对anchor进行分类回归的过程,即anchor->proposal->detection bbox;
one-stage model直接对anchor进行分类和回归,也就是anchor->detection bbox。
关于合理的anchor设计,通常有两条规则:
-
中心对齐
每个 anchor 都是由 feature map 上的一个点表示,那么这个 anchor 最好是以这个点为中心。
-
特征一致
feature map中不同位置anchor的尺度和形状保持一致。
滑动窗(sliding window)是一种简单且广泛采用的遵循上述规则的anchor方案。对于大多数检测方法中,anchor是通过统一的方式进行定义,例如,feature map中的每个位置都有k个预定义比例和长宽比的锚框。虽然简单,但并不完美!
这种统一设计锚框的方案并不是最优的方式。具体表现在:
-
必须为不同的问题预定义一组固定长宽比的锚。错误的设计可能会影响检测器的速度和精度; 并且,即使对anchor进行优化,也不一定可以满足在实际场景中出现的极端大小或者长宽比悬殊的物体。
![](https://img2020.cnblogs.com/blog/1399393/202010/1399393-20201028175556089-936856207.png)
-
为了保证建议具有较高的召回率,需要大量的anchors,可这些anchors大多与感兴趣的区域是不相关的,在背景部分的anchor对于proposal或者检测没有任何作用。因此,这些anchor的存在实际上导致了显著的计算成本。
![](https://img2020.cnblogs.com/blog/1399393/202010/1399393-20201028175621262-1549011320.png)
针对上述提出的问题,作者提出了一种稀疏、形状可以根据位置改变的anchor。 -- Guided Anchoring
Motivation
上一节中,介绍了采用sliding window方式生成预定义anchor存在的问题。针对这样的问题,作者观察到物体不是均匀分布在图像上。一个物体的尺度也与图像内容、它的位置和场景的几何形状密切相关。基于这种直觉,将生成稀疏锚点分为两步:其一,识别可能包含对象的子区域,然后确定不同位置的形状。
锚框形状的学习提升模型检测的精度是值得期待的,如果anchor可以学习,那么从基准开始就已经可以加趋近于bounding box。但它打破了anchor设计中一致性的规则。也就是说,如果锚框可以学习,那么锚框的比例和长宽比将会是变化的。 这在设计中可能会面临一定的问题。 -- feature adaption module.
-
我们提出了一种新的锚定方案,能够预测非均匀的和任意形状的锚,而不是稠密的和预定义的锚。
-
提出了基于两个条件分布的联合锚分布,并设计了两个模块分别对其建模。
-
我们研究了特征与相应锚点对齐的重要性,并设计了一个基于锚点形状的特征适应模块进行特征细化。
-
将其应用于two-stage 模型中。
Guided Anchoring
概述
anchor通常通过(x, y, w, h)表达,即中心点坐标和宽高。也就是说,确定anchor的位置,需要通过(x, y)和(w,h)共同确定。如果说,将(x, y)称之为位置,(w, h)称之为形状。那么,anchor的可以服从下述条件分布:
anchor的概率分布分解为两个条件概率分布,其一,给定图像后anchor中心点的概率分布;其二,给定图像和中心点位置后的形状概率分布。
如上图所示,右图展示了Guided anchoring的基本流程。使用建立的网络和特征图Fi实现anchor位置和形状的预测。首先,锚框的筛选建立在特征图Fi上。基于特征图Fi包含两个分支(如红色虚线框所示),其一用于anchor位置的预测;其二用于anchor形状的预测。通过选择预测概率高于某一阈值的位置和每个选定位置上最可能的形状生成锚框。另一方面,作者意识到由于锚点形状可能不同,不同位置的特征应该捕获不同范围内的视觉内容。因此,添加了一个特征调整模块(feature adaptation module)(如绿色虚线框所示)。最后,由于“在不同层次上操作多个特征图通常是有帮助的”,就像FPN,作者在基于单一feature map Fi 的基础上设计了一种多层级anchor generation的策略。也就是上图左图部分。
P.S. 作者提到,锚框生成策略虽然利用不同层的特征,但仍然是高效的,因为锚框生成参数在不同层级是共享的。
Part A. Anchor Location Prediction
anchor 位置的预测实际上就是筛选特征图上哪些像素点可能作为物体的中心,可以转化为一个二分类问题。最简单的方式就是通过生成概率图外加阈值筛选,作者是这样做的。这种方式需要生成一个与特征图Fi相同尺寸的概率图,最容易想到的方式就是通过一个1×1卷积 外加 sigmoid激活函数规范化输出大小,作者也是这样做的。如上图中NL分支。
整理可视化一下:
![](https://img2020.cnblogs.com/blog/1399393/202010/1399393-20201028175517819-1836922917.png)
虽然更深层次的网络可以做出更准确的预测,但我们从经验上发现,卷积层之后进行sigmoid变换可以很好地平衡效率和准确性。
对于生成概率图后,便可以通过预设定的阈值进行筛选过滤,得到可能存在目标的位置。作者描述到,这一过程可以在保持模型相同回调的前提下,滤去90%的区域。
另外,作者对生成的概率图进行了可视化。
Part B. Anchor Shape Prediction
anchor形状的预测的目标实际上就是宽高(w, h)的预测,但由于这两个值的范围比较大,直接预测这两个值可能并不稳定。因此,进行下述处理,也就是一个转换过程:
也就是说,形状预测分支的输出为dw和dh,然后通过上式转转换为w和h。其中,s为步长,σ 为缩放因子(经验值8)。
具体来说,对于输入为特征图Fi的情况,实现上述输出的方式可以也可以通过1×1卷积,只不过此时有两个输出dw和dh,便需要两个1×1卷积产生两个通道的输出。如上图Ns分支。
生成后,便可以与位置预测产生的结果结合,生成最终的锚框分布。
作者在行文中强调,其提出的这种anchor策略与传统不同,主要体现在每个位置只与一个动态预测形状的锚定相关,而不是一组预定义形状的锚定。
另外,这种策略可以带来更高的召回率,因为其允许任意的长宽比,更利于捕获一些具有极端高度和宽度的目标。
在得到anchor位置和形状后,便可以生成anchor。如下图所示。一个位置只有一个anchor。
Part C. Feature Adaptation
通过Part A和Part B的介绍,作者的工作实际上是通过网络结构进行anchor的学习,实现了anchor在特征图Fi上的引导(Guided)。但这会引来一个问题,采用滑动窗方案的传统RPN或单级检测器,锚点在整个特征图上是一致的。
也就是说,所有的锚点使用相同的形状和比例,这样特征图才能够学习到一致性的表达。一会小anchor,一会大anchor,特征图可能也比较懵逼吧,毕竟后续的分类也好、回归也罢都需要基于该特征图。
总而言之,需要建立起anchor和特征图之间的关联。如果anchor是变换的,那就需要特征图可以随着anchor的变化而调整。
灵感:大的anchor的特征应该在一个大的区域编码内容,而小的anchor特性应该相应地有更小的范围。
而对于锚框形状变化的情况,再使用全卷积分类器并不是一个好的选择。对于这种不一致性,作者针对每一个区域设计了一个可以指导anchor的特征适应模块。如下式所示:
其中,fi是第i个位置的特征;(wi, hi)是相应anchor的形状。而NT是一个采用3×3的可形变卷积层构成的位置依赖转换。
具体来说,首先依据形状预测分支的输出预测一个偏移场,这个偏移场作为可形变卷积生成偏移量所需的偏移场,然后对特征图Fi应用可形变卷积得到偏移量,从而获得最终的输出fi‘。后续的分类和bbox回归任务基于这个输出。
![](https://img2020.cnblogs.com/blog/1399393/202010/1399393-20201029174043324-2017321613.png)
P.S. 可形变卷积:
N是卷积核的大小,即如果3×3的卷积核,N=3×3=9,这是由于卷积核的每一个位置都需要一个偏移量,而偏移量又是2维的。
偏移场每个像素各个通道展开就是偏移量offsets。
Part D. Training
本文提出的anchor策略的核心是在于anchor的可学习。因此,对于这样的一个框架去实现end-to-end的训练优化需要使用多任务损失。作者在传统的分类回归损失中额外添加了位置损失和形状损失:(实验中λ1 = 1; λ2 = 0.1 )
深度学习的构建实际上就是结构的实现和损失的指导,指导机器如何更好的学习。指导的过程对于监督学习而言,需要构建真值,同时建立网络产生的结果与真值的关系。
a. 位置目标
关于anchor位置的真值,需要一个二值标签图。其中,1代表anchor的有效位置,0表示无效位置。
可以利用bbox真值指导二值图的生成。特别地,希望构建的二值图具有如下特性:
一个物体的中心附近放置锚点多,远离中心的锚点少。(不能只是几个真值中心的点噢,此处的目标不是生成最优的bbox,而只是较优的proposal)
-
首先,将bbox真值(xg, tg, wg, hg)映射到特征图Fi的尺寸上(xg', yg', wg', hg');
-
其次,定义了一个矩形区域R(x, y, w, h)。anchor被期望放置在这个矩形中,从而与真值可以获得较大的初始IoU。 可以理解,这个矩形区域的中心就是(xg', yg')。作者定义了三种类型的矩形:
-
CR: 正样本;是在真值bbox中心附近的区域,如上图绿色区域。(实验中σ1 = 0.2 )
-
IR:被标记为"ignore",在训练中被忽略,如上图黄色区域。(σ2 > σ1) (实验中σ2 = 0.5 )
-
OR:负样本;特征图除去CR和IR的部分,如上图灰色区域>。
-
作者指出,当多目标重叠时,CR可以抑制IR,IR可以抑制OR。
由于CR通常只占整个feature map的一小部分,所以采用focal loss进行location branch的训练。
b. 形状目标
确定每个anchor形状的真值有两个步骤:
-
将锚点与bbox真值匹配;
-
预测与匹配的bbox真值覆盖最高的宽度和高度。
之前,给bbox真值分配候选anchor时通过最大IoU的方式。但该方式不适合目前未预定义anchor的w和h变量的情况。因此,作者定义了一种在变量anchor之间IoU的方式:
对于任意位置(x0, y0)的anchor和真值bbox gt。表达式vIoU是十分复杂的,并且难以高效的应用在end-to-ent的网络。
此处的复杂和高效体现在不可能吧所有的(w, h)遍历一遍,只能挑几个让网络自己去优化吧。
因此,作者采取了一种近似的方式,即sample一些(w, h),对采样的得到的结果求取最大值,作为近似vIoU。在训练过程中,作者采样9对(w, h)对vIoU进行估计。具体来说,我们采用了RetinaNet中使用的9对不同的尺度和长宽比。(理论上,采样数量越多,越精确,但也会带来计算成本)
L1为smooth L1 loss。(w, h)表示预测anchor的形状,(wg, hg)表示真值bbox的形状。
上述损失函数实际上就是两个回归损失,由于w,wg,h,hg最优的情况是相等的时候,即最小值为1,当为1时,损失为0。不为1时,损失单调递增。
Part E. 高质量proposal的正确打开方式
作者将提出的guided anchoring策略应用于RPN (GA-RPN),可以获得更高质量的建议。通过比较RPN和GA-RPN产生建议的IoU分布可以看出GA-RPN具有两个显著的优势,如下图所示:
-
积极建议的数量增多;
-
high-IoU建议的比例增多;
从上图可以看出,GA-RPN产生的proposal质量提升比较显著。那对于GA-RPN的使用,是不是可以简单直接的替换现有模型中替换RPN网络?
然而,事实并非如此,如果采用完全相同的设置在detector上的性能提升非常有限(例如,不到1个百分点)。
为此,作者做了实验进行比较,如下表所示,测试不同数量的proposals和IoU阈值,发现:
-
增大IoU阈值;(proposal的质量已经比较高,提高阈值可以很好的抑制假阳性的目标,提升分类的识别度)
-
使用更少的proposals;
可以显著提升模型的性能。
作者观察到使用高质量的建议的前提是根据建议的分布来调整训练样本的分布。因此,与RPN相比,在端到端训练检测器时设置了更高的正/负阈值,使用的样本也更少。
另外,采用GA-RPN对已经训练的模型进行微调也可以获得显著的提升。
延伸
Guided Anchoring的优势可能通过上述描述并不能体现得很清楚,举几个比较实际的例子:
1. 对于尺度变化较大,并且存在多种极端形状的目标,预定义anchor难以对极端形状实现很好的拟合;
2. 对于打比赛的场景,再决赛环节,往往我们看不到训练数据集,对于其中是否存在极端形状不得而知。(现阶段打比赛习惯使用联邦学习的框架)
-------------------------------------------
算法届的小学生,虔诚而不迷茫,做一个懂生活并有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个 [推荐] 噢! 欢迎共同交流机器学习,机器视觉,深度学习~
欢迎转载,转载请声明出处!