ECCV 2020 的一篇文章
论文地址:https://arxiv.org/abs/2007.08103
目录
PAA表示(Probabilistic Anchor Assignment),仍然是anchor分配机制(这几年目标检测的一个热点方向)。近年来已经证实anchor分配策略可以很大影响一个模型的性能。
本文提出的策略可以根据模型的学习状态自适应地将锚点分配给对应gt的正样本和负样本,从而使模型能够以概率的方式对分配进行推理。
此外,本文还研究了训练阶段和测试推理阶段的gap(训练的时候要同时优化分类和定位,但是测试的时候只根据分类得分来选择bbox),并且提出了在测试阶段加入预测IoU来衡量定位的精度,最后用分类得分乘IoU的预测值来当NMS的依据,弥补训练和测试的gap,如下图所示(Post-Processing=后处理,表示推理阶段)。这种方法在RetinaNet的baseline上只额外增加了一层卷积层,因此十分高效。
最后,还提出了一种得分投票的方法来提高精度

已在mmdetection里实现,详见configs/paa/
已有的一些anchor分配策略一般考虑anchor跟gt的IoU,如果IoU超过给定的阈值,那么就被指定为正样本。但是这种策略没有考虑到相交区域里的实际内容,可能里面包含了很多带噪声的背景、其他object以及只包含了对应object里少量有意义的部分。
在本文提出以前已经有一些工作提出了新的anchor分配策略,本文进一步拓展了相关思想,提出了一种新的anchor分配策略PAA(PAA具体操作见简介)。思路是分配过程要跟模型相关,不同的模型产生的正样本也不同;哪怕没有一个anchor跟gt的iou高,也要分配一些anchor作为正样本进行训练,即,只要模型推理出这个anchor跟gt相关,没必要看iou高不高;另外只要满足条件,都可以成为正样本,没必要限制固定的数量;最重要的是,需要评估这些anchor的质量来反映模型的状态。
本文的目的是为了设计出一个Anchor分配策略, 要求是实现三个功能:
具体来说,定义一个anchor的质量分数,用来反映出这个anchor对于离它最近的gt的bbox预测输出的质量,可以简单设计为定位得分乘分类得分,其中定位得分是IoU


注:文中w.r.t =with regard to 的缩写,意思是“关于”
然后对这个评分进行相关操作后拓展成一个评分损失函数:

我们把这个anchor对于给定GT的得分看成是从一个分布中采样得到的,然后用最大似然的方法来估计这个分布的参数。由于要将anchor分为正样本和负样本,因此我们用GMM(高斯混合模型),用两个高斯分布来建模这个anchor的得分分布。

只要给定一组anchor的得分,就可以用EM(期望值最大化)来估计上面这个高斯分布的参数。
得到概率分布后,进行区分正负样本的方法有很多种,如下图所示,都行。

具体算法伪代码如下图所示:

为了计算anchor的分数,首先把anchor分配给IoU最高的那个gt(第3行)。为了让EM算法更加高效,我们从每个特征level上选择了top k个anchor(5-11行),然后进行EM的估计(12行),top k之外的anchor被分配为负样本(16行)。
测试的时候,只需要加入一个额外的卷积层,用sigmoid进行激活,预测得到合理范围内的IoU的预测,训练目标现在变成:
![]()
实验证明可以提高精度。
在后处理阶段提出了一个trick:在NMS之后,对每个留下来的预测框b,根据其中si计算得到的分数si将b更新为b_hat

候,只需要加入一个额外的卷积层,用sigmoid进行激活,预测得到合理范围内的IoU的预测,训练目标现在变成:
![]()
实验证明可以提高精度。