原文:https://arxiv.org/abs/2007.08103
代码:https://link.csdn.net/?target=https%3A%2F%2Fgithub.com%2Fkkhoot%2FPAA
这篇文章主要是针对当下anchor-based 中anchor标签的分配问题加以改进,传统方法是利用anchor产生的bbox与标定的gt框之间的IOU,设置阈值,大于正阈值则为正样本,小于负阈值则为负样本.正样做直观简单,却忽略了相交区域的实际内容,该相交区域可能包含嘈杂的背景,附近的对象或要检测的目标对象的少量有意义的部分.
根据模型的训练状态基于高斯混合模型提出以概率的形式自适应地为anchor分配正负样本标签,
提出了训练和测试之间的差异,目标检测模型存在训练(最小化分类和回归损失)与测试(仅依赖于分类得分的非极大值抑制)不一致的情况。,引入一个预测iou的分支将交并比乘以分类得分作为衡量检测框质量的最终标准。
通过混合高斯分布对正负样本进行建模,可解释性强。
丢掉了IOU阈值,正样本数目等超参数,模型更稳定。
通过修改网络结构对box与GT的IOU进行预测,训练阶段有真实的IOU作为label,测试阶段可以预测IOU,使得训练和测试阶段保持一致。
将三个关键的因素考虑进整个流程中
首先,使用模型来衡量Anchor的质量;
其次,自适应的方式将Anchor划分正负性;
最后,分配策略基于概率最大化。
Scls-分类得分
Sloc-定位得分
fθ-带有参数θ的model
a-anchor;
g-ground_truth;
λ-控制Scls与Sloc的贡献情况的权重
也就是说这个得分公式其实是和model的参数有关的。
分类得分很容易算(就是分类分支的输出),定位得分通过IOU计算.
于是得到了,分类损失和定位损失,前者通过二元交叉熵损失计算,后者通过IOU损失计算(1-IOU).
为了使得模型能够以概率的方式来判断某个Anchor是否属于正样本,做法是对于某个gt对Anchor的分数建模,然后基于概率将Anchor划分为正负。由于目的是将一组Anchor划分为正样本和负样本两类,论文使用高斯混合模型GMM:
w1, m1, p1, w2, m2, p2分别表示两个高斯函数的权重、均值和精度。
最基本的一维二元高斯混合模型,给定一组anchor的分数,这个GMM的可能性可以使用期望最大化(EM)算法进行优化.所以这里简单写一下步骤:
输入一组anchor,他们各自有个分数,给negative,positive的高斯模型分别初始化参数。
计算每个anchor的分数分别属于negative,positive分布的概率
利用EM方法对GMM算法优化完成后,既可以通过不同的方法设置,确定anchor对应的bbox到底是正样本还是负样本了.
算法流程如下
很容易看懂,这里第8行是找到第k个最高得分的anchor,而第九行是取前k个最高得分的anchor,一个是单个,一个是一个集合,需要注意下.
由于在训练和测试过程中均需要使用交并比来衡量预测框的质量,论文提出将模型扩展为直接预测边界框与之对应真实框的交并比,通过添加一个卷积层针对每个Anchor输出一个标量值。则最终的损失函数还需要加上这一分支的结果:
添加后模型的结构如下
在推理过程中,直接将预测的交并比作为最后非极大值抑制的阈值。
这里引入了一个稍作改进的后处理的方法,当然对于one-stage算法,train阶段是不需要后处理的,这里只是测试阶段可以使用。
所谓的得分投票,就是根据bbx自身和她的邻居给bbx重新计算出一个新的x,y,w,h,作者也验证了这样做确实有好处( si 是上面公式计算出的bbx的得分)。
这部分原理出自cvpr2019的文章,不细看了.
1.高斯混合模型(GMM)
2.【机器学习】EM——期望最大(非常详细)
3.paa解读1
4.paa解读2
5.投票机制