YOLOX:Anchor-free的YOLO检测器.

作者针对YOLO系列检测器进行经验性改进,构造了YOLOX模型,将YOLO调整为anchor-free的形式并集成了一些检测技巧,取得SOTA的性能:

  1. YOLOX-LYOLOv4-CSP,YOLOv5-L参数量接近,前者AP准确率比YOLOv5-L高出1.8%,且在单张Tesla V100上能达到68.9FPS
  2. YOLOX-TinyYOLOX-Nano(只有0.91M参数量和1.08G FLOPs)比对应的YOLOv4-TinyNanoDet3分别高出10% AP1.8% AP
  3. Streaming Perception Challenge(Workshop on Autonomous Driving at CVPR 2021)只使用YOLOX-L模型取得第一名。
  4. 源码提供了ONNX, TensorRT, NCNN 和 Openvino版本的推理模型。

作者使用YOLOv3作为baseline(38.5% AP),采用DarkNet53加空间金字塔池化层SPP作为backbone

在训练阶段使用指数滑动平均,余弦退火调整学习率,添加IoU-aware分支,在COCO train2017数据集上训练$300$轮(包括$5$轮warm up),使用SGD算法,在$8$个GPU上设置batch为$128$,学习率设置为$0.01×\frac{\text{batch}}{64}$。

损失函数中类别clsobj使用BCE loss,位置回归使用IoU loss

数据增强使用了mosaic,RandomHorizontalFlip(作者发现RandomResizedCropmosaic有冲突,所以丢弃了RandomResizedCrop),ColorJitter和多尺度($448$以步长$32$过渡到$832$)。

baseline的基础上,YOLOX额外使用了一些技巧,下面介绍这些技巧。

○ Decoupled Head

YOLO系列使用耦合(coupled)检测头,即针对COCO 80类的检测任务,每一个anchor会对应产生$H×W×85$维度的预测结果,其中cls(区分前景和背景)占用$1$个通道,reg(检测框坐标)占用$4$个通道,obj(预测是$80$类中的哪一类)占用$80$个通道。

作者通过实验发现耦合检测头可能会损害性能,因为其中的分类任务和回归任务会产生冲突。因此作者将预测分支解耦(decoupled),极大的改善收敛速度。

YOLOX首先使用$1×1$卷积进行降维,获得$256$通道的特征图,然后使用两个$3×3$卷积的平行分支分别进行分类和回归,同时回归分支还添加了IoU分支。

○ Strong Data Augmentation

作者使用了MosaicMixUp数据增强,但在最后15 epochs时关闭,防止数据增强过度。

使用强大的数据增强后,ImageNet预训练模型无益,因此所有后续模型都是随机初始化权重并从头开始训练。

在训练比较小的模型时候,例如YOLOX-S, YOLOX-Tiny,YOLOX-Nano网络,剔除mixup,弱化mosaic效果,会有更好的表现。

○ Anchor-Free

YOLO系列是基于anchor的检测器,anchor机制增加了检测头的复杂度,使得每张图具有较多的预测数量,如COCO数据集中YOLOv3使用尺寸为$416×416$的图像推理, 会产生$3×(13×13+26×26+52×52)×85=5355$个预测结果。

使用anchor时,为了调优模型,通常需要对数据集的目标框进行聚类分析,确定最优的anchor设置,而这一步缺乏泛化性。 使用anchor-free可以减少调整参数的数量,减少引入的特殊技巧。

YOLOX从原有特征图的每一个栅格位置预测$3$组anchor减少为只预测$1$个目标,从而可以直接预测目标框的$4$个值(左上角xy坐标和box高宽),从而减少了参数量和GFLOPs,使速度更快,且表现更好。

○ 标签分配

特征图的每一个栅格位置预测$1$个目标,即对该位置设置一个预测正样本(positives)。作者在正样本选择时做过以下几个尝试:

  1. 只将物体中心点所在的位置认为是正样本,即一个目标最多只会有一个正样本(42.9% AP)。
  2. Multi positives:将物体中心$3×3$区域认为是正样本,即一个目标具有$9$个正样本(45.0% AP)。
  3. simOTA:对预测正样本进行标签分配,采用OTA(Optimal Transport Assignment)方法。作者改进了简化版的simOTA,能够自动决定每个gt标签对应的正样本位置和数量(47.3% AP)。

simOTA的主要流程如下:

  1. 对每个gt标签确定正样本的候选区域(属于哪个特征图);
  2. 计算每个anchor与该gt的交并比IoU,并进一步计算cost
  3. 为该gtcost排名最小的前dynamic_kanchor作为正样本,其余为负样本;
  4. 根据正负样本计算损失。

○ 更多实验

除了DarkNet53,作者还选取了其他backboneCSPNet进行实验(CSPNetYOLOv5中的版本,包括CSPNet,SiLU激活函数和PAN检测头),仅需较少的额外推理时间,获得性能的提升: