YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO

论文地址:https://arxiv.org/abs/2107.08430

YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO_第1张图片

1. 动机

yolo系列一直以来都是目标检测领域最火的方法. 从yolo2开始, yolo系列就一直是Anchor-based的检测器, 而近年来Anchor-free类的方法发展迅猛, 已经可以达到甚至超越Anchor-based的方法了. 但是yolo4和yolo5依然沿用了Anchor-based架构. 于是, 作者将Anchor-free引入到yolo中, 并使用了各种最新技术(如: decoupled head, SimOTA等), 从而形成了一个全新的yolo检测--YOLOX.

2. 方法

2.1. Baseline and backbone

考虑到yolo4和yolo5可能会在anchor-based pipline上过拟合, 以及yolo3的通用性, 于是作者采用yolo3-SPP作为yolox的baseline.

backbone方面,作者采用了3套:

  • yolo3中的DarkNet53, 用于和yolo3进行对比;
  • yolo5中的CSPNet, 用于达到较高的性能;
  • Tiny 和 Nano, 用于轻量化检测;

2.2. Decoupled Head

在目标检测领域, 分类和回归之间的矛盾是一个众所周知的问题. 解耦头(Decoupled Head)是一个很好的解决方案, 但yolo还未将此方案纳入其中. 作者设计了两个实验,验证了Decoupled Head能够提升yolo的性能:

  • 1).  将yolo原有的head替换为Decoupled Head可以极大加速收敛;
  • 2). Decoupled Head对于end2end是十分必要的(可降低性能下降的幅度);

于是,作者设计了一个轻量级的解耦头, 结构如图2所示:

YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO_第2张图片

从图2可以看出: 对于FPN输出的feature maps, 先经过一个1*1卷积层进行通道降维; 然后经过两个并行的分支, 每个分支有两个3*3卷积层;最后,再经过1*1卷积, 得到三个分支(Cls, Rge, IoU)。

2.3. Strong Data Augmentation

作者使用Mosaic和Mixup作为yolox中的数据增强策略, 并在最后15个epochs关闭。使用了这种强数据增强策略后,作者发现Imageet预训练就不再起作用了,因此,yolox是train from scratch的。

2.4. Anchor Free

yolo4和yolo5都延续了yolo3的anchor-based pipline,然而,anchor机制有很多已知的问题:

  • 首先,为了达到最优性能,需要在训练前对数据集做聚类分析,来生成一组最优的anchors;这些anchors是特定于该数据集的,因此泛化性不佳;
  • 其次,anchor机制增加了检测头的复杂度,以及每个图像中的预测数量;这对一些边缘AI设备不友好;

而anchor-free近些年发展迅猛,已经能够达到anchor-based方法的性能,且其显著减少了手工设计的内容以及各种tricks,从而使得训练和解码阶段得以简化。

将yolo切换到anchor-free也相当简单:

将每个位置预测个数从3减少到1,并直接预测四个值(即:到网格的左上角的偏移量和box的高宽);同时,将中心点设为正样本,并预设了一个尺度范围为每个对象指定FPN级别。

如此一来,检测器的参数量和GFLOPS大大降低,速度更快,性能更好。

2.5. Multi Positives

上面的anchor-free版本为了和yolo3保持一致,只为每个对象分配一个正样本(中心点)。但其实其他高质量预测的位置同样又用,可以有利于梯度更新并缓解训练过程中正负样本不均衡的问题。这里采用了FCOS中的中心点采样方法,将中心点3*3邻域的位置都设为正样本。

2.6. SimOTA

先进的标签分配是近年来目标检测领域的另一个重大进展。基于旷视自家的OTA,作者总结了先进的标签分配的四个关键见解:1)损失/质量感知;2)中心点先验;3)每个ground-truth具有动态正anchor数量(dynamic top-k);4)全局视野。OTA满足上面四条规则,因此作者选其作为标签分配策略。

具体的,OTA从一个全局视角分析了标签分配,并将分配过程表示为最优运输(Optimal Transport,OT)问题,在现有的分配策略中产生SOTA性能。然而,作者发现在使用Sinkhorn-Knopp算法解决OT问题时会带来25%的训练时间,这对于300个epochs的训练过程来讲是非昂贵。因此,作者将其简化为了dynamic top-k策略,命名为SimOTA,从而能得到近似解。

这里简要介绍SimOTA:

  • 首先,对于每个“预测-GT”对,计算其成对匹配度,表示为代价或者质量:

c_{i j}=L_{i j}^{c l s}+\lambda L_{i j}^{r e g}   (1)

        其中,\lambda表示平衡系数,L_{i j}^{c l s}L_{i j}^{r e g}分别表示GT与预测之间的分类损失和回归损失。

  • 然后,对于每个GT,在其固定邻域内,选择top-k个代价最小的预测作为其正样本。
  • 最后,这些正预测所对应的网格就分配为正例,而其他的则为负例。

需要注意,top-k中的k值随着GT而变化,这是动态的。

SimOTA不仅减少了训练时间,而且避免了Sinkhorn-Knopp算法中的额外超参。

2.7. NMS-Free

作者尝试了end2end:增加了两个卷积层,一对一标签分配,以及梯度停止。这使得检测器可以端到端执行,但会轻微降低性能和推理速度。因此,最终模型并没有使用该策略。

2.8. 其他的backbone

除了DarkNet53,作者还在其他不同尺寸的backbone上进行了改进,且都能达到提升性能的效果。作者修改了yolo5的CSPNet,并设计了Tiny和Nano版的yolox,改进效果分别如表3表4所示:

YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO_第3张图片

 2.9. 模型尺寸和数据增强策略

作者发现,对于不同模型大小,调整不同的数据增强策略有助于提高性能,具体如表5所示:

YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO_第4张图片

3. 实验结果

YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO_第5张图片

你可能感兴趣的:(目标检测,论文笔记,yolox,anchor,free,end,to,end,Decoupled,head,SimOTA)