ATSS论文详解
代码地址:https://github.com/sfzhang15/ATSS
现有目标检测的主流算法中,主要分为两阶段和一阶段。而一阶段的算法中,又分为基于anchor和anchor-free的算法。在FCOS(一种anchor-free的目标检测算法,想详细了解请看《FCOS算法详解》论文实验证明,该方法比retinanet(一种基于anchor的算法,想详细了解请看《Focal Loss for Dense Object Detection论文详解》)结果要好。也就是说基于anchor的方法结果和anchor-free的方法结果存在一定的差异。本文做的就是探索为什么存在这种差异,以及如何解决这种差异。
一、anchor-based 方法与anchor-free方法结果差异的原因分析
这里的差异要明确的是,分别用FCOS方法与retinanet方法来代表anchor-free的方法和anchor-based的方法。
为了更好的理解下面的分析,要统一一个概念,就是在FCOS方法中,是每个FPN层输出的featuremap的像素来测一个框,而在Retinanet中是每个FPN层输出的featuremap中的像素对应多个anchor,也就是每个像素输出多个框。为了更好做对比试验,这样规定每个像素只对应一个正方形的anchor,这样就将两种方法在预测数量上等价了。这里Retinanet的anchor大小为对应5层的fpn输出中的featuremap对应的正方形anchor边长大小为8S,S对应的featuremap的stride。
遵循上述规定的retinanet,下文都称为retinanet(#A=1)。Retinanet(#A=1)再采用与FCOS训练类似的优化方法可以得到下面表格:
1.png
可以看出即使采用一样的策略,retinanet方法还是与FCOS存在0.8的差异。
上述实验中anchor-based Retinanet(#A=1)与anchor-free FCOS还是有两个不同的地方,一个是二者的正负样本定义不一致,一个是回归任务不一致(一个通过回归anchor box,一个是回归点到四条边的距离)。
1.1 分类任务
首先来回顾一下两种算法选择正负样本的方法,如下图所示
2.png
对于Retinanet来说,如上图a所示,当anchor与标注框的IoU大于某个阈值时,该anchor为正样本,当anchor与标注框的IoU小于某个阈值时,该anchor为负样本,其它anchor不参与训练
对于FCOS来说,如上图b所示,首先将在标注框内部的像素点作为正样本的候选,然后通过一些尺度规则将样本分配给不同的fpn层作为正样本(具体查看《Focal Loss for Dense Object Detection论文详解》),没有选入正样本的作为负样本。
通过下表,这里做了两个实验,一个是Retinanet(#A=1)采用FCOS选择正负样本的方式训练,一个是FCOS采用Retinanet(#A=1)选择正负样本的方式训练。可以看出只要采用了非IoU,也就是FCOS的方式,结果都有提升,反之亦然。通过这个实验,文章得到的启示就是正负样本的选择对于网络的结果很重要。
4.png
1.2 回归任务
两种算法的回归任务如下图所示,图中蓝色点和蓝色框是标注框的中心和标注框,红色点和红色框表示的是anchor的中心和anchor框。b表示的是Retinanet的回归方式,它是从anchor框开始回归。c表示的是FCOS的回归方式,它是从点开始回归。
3.png
但是从1.1部分的表可以看出,只要选择正负样本的方式相同,回归方法不同,但是结果也接近,说明回归的起始状态并不会很大的影响最终结果。
二、自适应选择训练样本(Adaptive Training Sample Selection)
通过第一部分可以看出,两种方法结果差异主要是训练样本选择方法引起的,这部分就是解决如何更好的选择训练样本的问题,也是本文重点。选择样本的伪代码如下:
5.png
下面描述一下这个流程:
- 对于一个标注框g来说,先从FPN输出的featuremap中,每层选取k个anchor boxes,如果输出L层的话,那总共就有个正样本候选。选取是根据anchor box的中心与标注框的中心的L2距离,每层选最近的k个
- 计算候选正样本与标注框g的IoU,这些IoU组成的集合用表示。
- 计算集合的均值和方差
- 将均值和方差的和作为一个阈值,记为
- 如果集合中,大于阈值,且正样本在标注框内部,则这些候选点就是训练时用到的正样本
- 不为正样本的anchor点,则为负样本
ATSS的算法就这些,至于上述有些操作为什么要那样做,文中也给出了解释。
- 按照anchor中心与标注框中心距离来获取候选框,文中认为离中心越近的候选质量越高,对训练越有帮助
- 使用均值和方差的和作为阈值选择,也是为了选择高质量的训练样本
- 限制训练样本中心在标注框内,也是为了选择高质量的训练样本
到这里原理就介绍完了,详细实验结果可以查看原文