论文地址:https://arxiv.org/abs/2107.08430
yolo系列一直以来都是目标检测领域最火的方法. 从yolo2开始, yolo系列就一直是Anchor-based的检测器, 而近年来Anchor-free类的方法发展迅猛, 已经可以达到甚至超越Anchor-based的方法了. 但是yolo4和yolo5依然沿用了Anchor-based架构. 于是, 作者将Anchor-free引入到yolo中, 并使用了各种最新技术(如: decoupled head, SimOTA等), 从而形成了一个全新的yolo检测--YOLOX.
考虑到yolo4和yolo5可能会在anchor-based pipline上过拟合, 以及yolo3的通用性, 于是作者采用yolo3-SPP作为yolox的baseline.
backbone方面,作者采用了3套:
在目标检测领域, 分类和回归之间的矛盾是一个众所周知的问题. 解耦头(Decoupled Head)是一个很好的解决方案, 但yolo还未将此方案纳入其中. 作者设计了两个实验,验证了Decoupled Head能够提升yolo的性能:
于是,作者设计了一个轻量级的解耦头, 结构如图2所示:
从图2可以看出: 对于FPN输出的feature maps, 先经过一个1*1卷积层进行通道降维; 然后经过两个并行的分支, 每个分支有两个3*3卷积层;最后,再经过1*1卷积, 得到三个分支(Cls, Rge, IoU)。
作者使用Mosaic和Mixup作为yolox中的数据增强策略, 并在最后15个epochs关闭。使用了这种强数据增强策略后,作者发现Imageet预训练就不再起作用了,因此,yolox是train from scratch的。
yolo4和yolo5都延续了yolo3的anchor-based pipline,然而,anchor机制有很多已知的问题:
而anchor-free近些年发展迅猛,已经能够达到anchor-based方法的性能,且其显著减少了手工设计的内容以及各种tricks,从而使得训练和解码阶段得以简化。
将yolo切换到anchor-free也相当简单:
将每个位置预测个数从3减少到1,并直接预测四个值(即:到网格的左上角的偏移量和box的高宽);同时,将中心点设为正样本,并预设了一个尺度范围为每个对象指定FPN级别。
如此一来,检测器的参数量和GFLOPS大大降低,速度更快,性能更好。
上面的anchor-free版本为了和yolo3保持一致,只为每个对象分配一个正样本(中心点)。但其实其他高质量预测的位置同样又用,可以有利于梯度更新并缓解训练过程中正负样本不均衡的问题。这里采用了FCOS中的中心点采样方法,将中心点3*3邻域的位置都设为正样本。
先进的标签分配是近年来目标检测领域的另一个重大进展。基于旷视自家的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:
(1)
其中,表示平衡系数,和分别表示GT与预测之间的分类损失和回归损失。
需要注意,top-k中的k值随着GT而变化,这是动态的。
SimOTA不仅减少了训练时间,而且避免了Sinkhorn-Knopp算法中的额外超参。
作者尝试了end2end:增加了两个卷积层,一对一标签分配,以及梯度停止。这使得检测器可以端到端执行,但会轻微降低性能和推理速度。因此,最终模型并没有使用该策略。
除了DarkNet53,作者还在其他不同尺寸的backbone上进行了改进,且都能达到提升性能的效果。作者修改了yolo5的CSPNet,并设计了Tiny和Nano版的yolox,改进效果分别如表3表4所示:
作者发现,对于不同模型大小,调整不同的数据增强策略有助于提高性能,具体如表5所示: