Guided Anchoring 论文笔记
文章主旨:
1.利用语义特征来帮助产生锚框,取代预设锚框的方法,预测了目标的中心点位置可能存在在哪里以及不同位置的尺寸和比例。2.除了预测锚框形状还用特征自适应模块缓解了特征不一致的情况。
Code
锚框简介
对于锚框有两条规则:alignment(对齐)&&consistency(一致性),1.锚框的中心要和特征图的像素点对齐;2.特征图上每个位置的感受野要能够和锚框的大小相匹配,即提供足够的感受野给锚框,关于这点有篇文章讲的很好,锚框本质上是省去了金字塔多尺度+便利滑窗的步骤,一般来说感受野一定要大于锚框的大小,并且越大越好。
传统锚框的缺点
1.因为锚框是要预设尺寸和比例的,错误的预设对检测的影响较大
2.为了保证recall值,需要大量的锚框,其中的大部分是无效的。同时大量的锚框会导致算力的浪费(在proposal分类的阶段)
本文的motivation
观察到目标在图片中并不是均匀分布的,对象的比例还与图像内容,其位置和场景的几何形状密切相关。
因此,本文通过两个方法生成稀疏锚框:1.确定可能包含目标的子区域;2.确定在不同位置的锚框的形状
可学习锚框会破坏之前提到的感受野一致性,所以本文中的锚框的尺寸比例并不会固定,提出一种特征自适应模块。
contributions
our approach achieves 9.1% higher recall with 90% substantially fewer anchors than the RPN baseline that adopts dense anchoring scheme.
1.本文提出了新的anchor机制可以预测任意形状的anchor
2.将anchor的联合分布分解为两个条件分布,并分别使用模型进行建模。
3.本文研究了相关anchor与feature map特征一致的重要性,并设计了一个特征调整模型来针对anchor的形状来增强feature。
4.本文研究了双阶段检测高质量的proposals,并提出了一种提高训练性能的机制。
相关工作(以后可能用到的结论)
anchor-free方法使用简单地pipelines并在单阶段生成结果,(减少了锚框和锚框精细化的过程),没有能力去处理复杂的场景。
本文不像某些单阶段模型去回归和分类锚框来对锚框进行refine而是去预测锚框的分布,其被分解为位置和形状。
常规方法没有去考虑锚框和特征的对齐。
本文是固定住锚框的中心(对齐原则),只去预测锚框的形状,并基于预测的形状去适应特征。
Guided Anchoring
目标物的位置及形状可以由(x,y,w,h)表示。(x,y)代表物体空间位置的坐标。假想在一个给定的输入图片上画目标物的框则可以得到如下分布方式
由上式得到两条重要信息,(1)目标物在图像中的特定区域(2)目标物的尺寸及比例与其所在位置密切相关。本文结构如下
本文设计的anchor生成模型包含两个分支:一个用于定位,一个用于形状预测,对于一张输入图片I,首先得到feature map Fi,在Fi的头部,位置预测分支产生一个概率map代表目标物可能存在的位置,而形状预测分支则产生与位置无关的形状预测。然后,结合两个分支的输出结果,通过比较预测的值超过一定阈值的来得到一些可能的位置,并根据预测出的可能的位置预测最有可能的形状来生成一系列anchors。由于anchor的形状是可以变化的,因此,不同位置的特征应该可以捕捉不同范围的视觉内容。因此,本文引入了特征调整模型,进而根据特定的anchor形状来调整feature.同时,本文基于FPN,进行多层次的anchor生成。同时,anchor 生成的参数在所有层次的特征都是共享的,因此效率较高。
Anchor Location Prediction
ALP会生成和F1特征图相同尺寸的概率图p(F1),概率图的每个位置i,j对应对原图的((i+1/2)*s,(j+1/2)s),s是stride,同时也是相邻锚框的距离。概率图的值就是目标中心存在的概率
概率图是用NL子网络生成的,用了一个11卷积得到,并通过一个点对点的sigmoid函数转换为概率。
通过概率图,可以选择那些概率值超过预设阈值的位置,这样就能滤掉90%的区域
将整个 feature map 的区域分为物体中心区域,外围区域和忽略区域,大概思路就是将 ground truth 框的中心一小块对应在 feature map 上的区域标为物体中心区域,在训练的时候作为正样本,其余区域按照离中心的距离标为忽略或者负样本
通过位置预测,我们可以筛选出一小部分区域作为 anchor 的候选中心点位置,使得 anchor 数量大大降低。在 inference 的时候,预测完位置之后,我们可以采用 masked conv 替代普通的 conv,只在有 anchor 的地方进行计算,可以进行加速。
Anchor Shape Prediction
ASP
本文提出的ASP方法和传统锚框回归策略不同,不会改变锚框的位置(常规方法回归会改变),所以不会造成锚框和锚框特征的不匹配问题。给定Fi,该分支预测每个位置的(w,h),预测出的形状可能会与最近的Ground truth产生较高的IOU。但(w,h)的取值范围太大,直接进行预测存在难度。因此,做了如下变换。
形状预测输出是dw和dh,然后再映射到w和h,s是stride,theta是经验参数,实验中是8.这个非线性变化能把输出空间从0到1000隐射到-1到1的范围内,使得学习更稳定。
NS也是一个1*1卷积同时接公式2的非线性函数。
该方法在每个位置只和一个动态锚框相关联。
然而这玩意的 target 并不好计算,而且实现起来也会比较困难,所以我们直接使用 IoU 作为监督,来学习 w 和 h。既然我们算不出来最优的 w 和 h,而计算 IoU 又是可导的操作,那就让网络自己去优化使得 IoU 最大吧。后来改用了 bounded IoU Loss,但原理是一样的。
这里面还有个问题,就是对于某个 anchor,应该优化和哪个 ground truth 的 IoU,也就是说应该把这个 anchor 分配给哪个 ground truth。对于以前常规的 anchor,我们可以直接计算它和所有 ground truth 的 IoU,然后将它分配给 IoU 最大的那个 gt。但是很不幸现在的 anchor 的 w 和 h 是不确定的,是一个需要预测的变量。我们将这个 anchor 和某个 gt 的 IoU 表示为 [公式] 。当然我们不可能真的把所有可能的 w 和 h 遍历一遍然后求 IoU 的最大值,所以采用了近似的方法,也就是 sample 一些可能的 w 和 h。理论上 sample 得越多,近似效果越好,但出于效率的考虑,我们 sample 了常见的 9 组 w 和 h。我们通过实验发现,最终结果对 sample 的组数这个超参并不敏感,也就是说不管 sample 多少组,近似效果已经足够。
AG 特征自适应模块
在基于滑动窗机制的单阶段或者RPN网络中,每个位置都均匀的共享相同尺寸的anchors,因此,feature map可以学到连续的表示。而本文的anchor在每个位置的形状是不同的,因此,不易按照以前使用一个全卷积分类器作用在ferature map上。较大的anchor的特征应该编码较大区域的特征,而小的anchor特征则应该编码较小的区域特征。
不合理的原因一方面在于,在同一层 conv 的不同位置,feature 的 receiptive field 是相同的,在原来的 RPN 里面,大家都表示相同形状的 anchor,所以相安无事,但是现在每个 anchor 都有自己独特的形状大小,和 feature 就不是特别好地 match。另一方面,对原本的特征图来说,它并不知道形状预测分支预测的 anchor 形状,但是接下来的分类和回归却是基于预测出的 anchor 来做的,可能会比较懵逼。这里是把w,h转换为了可变形卷积的offset
我们增加了一个 Feature Adaption 模块来解决这种问题。思路很简单,就是把 anchor 的形状信息直接融入到特征图中,这样新得到的特征图就可以去适应每个位置 anchor 的形状。我们利用一个 3x3 的 deformable convolution 来修正原始的特征图,而 deformable convolution 的 offset 是通过 anchor 的 w 和 h 经过一个 1x1 conv 得到的。(此处应该划重点,如果是像正常的 deformable convolution 一样,用特征图来预测 offset,则提升有限,因为没有起到根据 anchor 形状来 adapt 的效果)
因此,本文设计了基于每个独立位置anchor形状调整feature 形状的anchor guided feature adaptation组件,如下
其中,fi代表第I个位置的feature map,(wi,hi)为相应的anchor的形状。为了进行与位置无关的转换,本文应用了一个3x3的可变形卷积NT来增强分支,首先得到anchor 形状预测分支的偏移量,然后利用原始的feature map结合offset获得新的特征fi’,在新得到的特征上可以进行接下来的分类及回归操作。
训练过程
为了训练锚框定位分支,每张图都需要一个二元label图,其中1表示一个放置锚框的有效位置,否则是0.用gt来帮助生成二元label图。
为了训练anchor定位分支,对于每张图片需要获得一张binary label map,1代表可以放置anchor的有效位置,否则为0,本文利用ground truth来生成binary label map。希望在一个目标物的中心附近尽可能多的安置anchors,其很少有距离中心很远的。首先,将ground truth bounding box的映射到相应的feature map大小,用R代表中心为(x,y)大小为wxh的矩形区域。anchor被期望放到距离ground truth object中心较近的位置来得到更高的初始IOU,因此,本文针对每个box定义三种类型的矩形区域。如下图
gray zone曾用作平衡采样的方法,但只作用在单分辨率的feature map上,本文利用FPN得到多层次的feature map,因此,需要考虑相邻feature map的影响。因此,每个层次的Feature map只能对应特定尺寸的目标物。如果feature map与目标物的尺寸相互匹配,则分配CR。而相同区域的相邻层次被设置为IR区域如上图所示,由于CR只占很少的一部分,因此使用Focal Loss来训练定位分支。
Anchor shape targets
锚框匹配在常规方法中是通过匹配候选锚框到gtbbox来生成最大iou值进行的。但是本文并没有预设锚框大小,所以不能用该方法来进行锚框匹配。
其中,IoUnormal为经典的IOU定义,w,h为变量,但对于任意位置的anchor与ground truth,对vIOU进行明确的表示是困难的,也不利于有效的潜入到end-to-end网络中,给定(x0,y0),本文采样了一些w,h常用值,用于列举w,h。计算采样的anchor与ground truth IOU,并选取最大的IOU作为vIOU的近似。本文采样了9对不同尺寸及比例的(w,h)。然后,本文并不直接回归anchor的宽及高,损失函数与原始的近似相同,但本文由于anchor的位置是固定的,因此只优化w,h,而不是(x,y,w,h)。
就是对于某个 anchor,应该优化和哪个 ground truth 的 IoU,也就是说应该把这个 anchor 分配给哪个 ground truth。对于以前常规的 anchor,我们可以直接计算它和所有 ground truth 的 IoU,然后将它分配给 IoU 最大的那个 gt。但是很不幸现在的 anchor 的 w 和 h 是不确定的,是一个需要预测的变量。我们将这个 anchor 和某个 gt 的 IoU 表示为 [公式] 。当然我们不可能真的把所有可能的 w 和 h 遍历一遍然后求 IoU 的最大值,所以采用了近似的方法,也就是 sample 一些可能的 w 和 h。理论上 sample 得越多,近似效果越好,但出于效率的考虑,我们 sample 了常见的 9 组 w 和 h。我们通过实验发现,最终结果对 sample 的组数这个超参并不敏感,也就是说不管 sample 多少组,近似效果已经足够。
相比GA-RPN存在两个明显的优点:(1)正proposals的数量更多。(2)高IOU的proposals的比例更有用。但将RPN换作GA-RPN效果提升不大。据实验观察,使用高质量proposal的先决条件是根据proposals的分布来进一步调整训练样本的分布。因此,相比RPN,训练GA-RPN时使用更高的阈值来使用更少的样本来进行训练。
训练超参
延伸思考:
yolo的自适应anchor的方法的改进:多聚类几次求均值
考虑每个点去多学习几个anchor
Feature Adaption的关键在于用anchor shape来predict offset,我们试过加一个普通的 3x3 conv,或者3x3 deformable conv来refine,提升都很有限。只有显式地让bbox或者anchor的shape来指导feature refine才能让feature和anchor更好地match,从而有比较明显的提升。
中心点偏移了导致performance降低的现象,你理解的原因是什么?
因为有了anchor之后,随后的分类和回归是feature map上的一个pixel来对应着一个anchor,如果anchor中心点偏移了,相当于feature和anchor有missalignment,用这个feature来做预测自然效果会差一些,如果用feature map上某个点的feature来表示一个中心不在这个点上的anchor,自然是会有误差,应该是用anchor中心点所在地方的feature来表示。
参考链接
https://zhuanlan.zhihu.com/p/55854246