label分配主要是为了计算Loss,这篇文章使得gt内部的所有点同时具有前景和背景类标签和置信度,因为作者认为gt内部的所有点并不应该都认为是正样本,因为有很多背景点
结构跟FCOS是一样的:
(1)center weighting先验分支
一个分支,根据gt的位置,得到gt框在不同level上的feature(仅仅为了存放权重),并根据高斯分布生成权重,作为中心先验
(2)positive weight map
对于gt框内部的点,根据每个点的分类、回归loss,生成权重map
1.根据回归loss生成回归置信度
2.根据分类loss生成分类置信度
就是ImpObj分支*分类分支
3.正样本置信度=分类置信度*回归置信度
4.再加个指数函数,让置信度变化更剧烈
5.与center weighting先验相乘
6.每个点的正样本权重=这个点的置信度/gt框内所有点的置信度的和
注意:Sn是所有Level上的所有点,所以最后权重会指示到level级别,有的Level上权重高,别的level上权重就低,这就是作者说的scale和Spatial维度的自动Assign
(3)Negative weight map
1.对于gt外的点,负样本权重设置为1
2.对于gt内的点,负样本权重为该anchor和所有gt的max iou的函数
并且f(iou)被归一化到[0,1]
Loss计算
gt框内所有点的正样本权重*正样本置信度+所有点的负样本权重*负样本置信度(这里有个1-)
正样本置信度包含分类、回归Loss,负样本置信度只包含分类Loss。
分类Loss用GIoU Loss,回归Loss用Focal Loss。
最终实际可视化效果却没有达到作者最开始的设想:
实际:
可以看到spatial和scale的自动Assign是实现了,但是这个圆却并不太好看,看起来用混合高斯比这种单高斯会好,这就是IQDet的内容了