YOLOX:Anchor-free的YOLO检测器.
- paper:YOLOX: Exceeding YOLO Series in 2021
- arXiv:link
作者针对YOLO系列检测器进行经验性改进,构造了YOLOX模型,将YOLO调整为anchor-free的形式并集成了一些检测技巧,取得SOTA的性能:
- YOLOX-L和YOLOv4-CSP,YOLOv5-L参数量接近,前者AP准确率比YOLOv5-L高出1.8%,且在单张Tesla V100上能达到68.9FPS。
- YOLOX-Tiny和YOLOX-Nano(只有0.91M参数量和1.08G FLOPs)比对应的YOLOv4-Tiny和NanoDet3分别高出10% AP和1.8% AP。
- 在Streaming Perception Challenge(Workshop on Autonomous Driving at CVPR 2021)只使用YOLOX-L模型取得第一名。
- 源码提供了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}$。
损失函数中类别cls和obj使用BCE loss,位置回归使用IoU loss。
数据增强使用了mosaic,RandomHorizontalFlip(作者发现RandomResizedCrop和mosaic有冲突,所以丢弃了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
作者使用了Mosaic和MixUp数据增强,但在最后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)。作者在正样本选择时做过以下几个尝试:
- 只将物体中心点所在的位置认为是正样本,即一个目标最多只会有一个正样本(42.9% AP)。
- Multi positives:将物体中心$3×3$区域认为是正样本,即一个目标具有$9$个正样本(45.0% AP)。
- simOTA:对预测正样本进行标签分配,采用OTA(Optimal Transport Assignment)方法。作者改进了简化版的simOTA,能够自动决定每个gt标签对应的正样本位置和数量(47.3% AP)。
simOTA的主要流程如下:
- 对每个gt标签确定正样本的候选区域(属于哪个特征图);
- 计算每个anchor与该gt的交并比IoU,并进一步计算cost;
- 为该gt取cost排名最小的前dynamic_k个anchor作为正样本,其余为负样本;
- 根据正负样本计算损失。
○ 更多实验
除了DarkNet53,作者还选取了其他backbone如CSPNet进行实验(CSPNet是YOLOv5中的版本,包括CSPNet,SiLU激活函数和PAN检测头),仅需较少的额外推理时间,获得性能的提升: