YOLOx
问题
- 从YOLOv2开始,yolo一直使用基于anchor的方法。但近几年基于anchor-free、标签分配策略、端到端(NMS-free)检测技术并没有整合到YOLO中,包含yolov4和v5;
方案
- 以YOLOV3-SPP为baseline,因为v4和v5都是基于anchor做的改进。训练策略微小改动,添加了EMA权重更新、余弦学习率训练方案、IOU loss、IOU-aware分支。使用BD=CE用于训练分类和obj分支,IOU loss训练回归分支,只使用RandomHorizontalFlip和ColorJitter 以及multi-scale进行数据增广,忽略RandomResizedCrop,因其与mosaic重复。遵循以上设置,得到baseline在coco上为38.5%AP;
- 以解耦头部、数据增广、anchor-free、multi positives、SimOTA等技术对baseline进行改进.
实现
-
Decoupled head
-
一些研究表明,分类和回归任务在某种程度上是矛盾的,但YOLO中的分类和回归头部是耦合的;
-
作者通过实验表明,使用解耦头替换yolo中的head,极大地改善了收敛速度;
-
解耦头部对实现端到端的yolo很重要
在使用耦合头的情况下,端到端的Yolo性能降低了4.2%,但是使用解耦头则仅仅下降0.8%;
-
使用简单的解耦头部替换yolo的耦合头部,包含一个 1 × 1 1\times 1 1×1的卷积和两个 3 × 3 3\times 3 3×3的卷积,结构如下:
-
polo
-
-
Strong data augmentation
- 添加mosaic和mixup数据增广方法;
- 在最后15个epoch关闭这两个数据增广方案;
- 使用数据增强之后,没有必要使用ImageNet预训练模型;
-
Anchor-free
- anchor机制的弊端:泛化性不强,需要对训练数据进行聚类;anchor机制增加了检测头的复杂度和每张图片的预测数量;
- anchor-free机制的优势:性能与anchor-base相当;可有效减少启发式(如聚类,grid sensitive)超参数设计;
- 切换yolo到anchor-free模式:将每个位置的预测从3减少到1,直接预测该位置的两个偏移量和宽高;将每个中心位置作为正样本;
- 以上改进可将性能提到42.9%;
-
Multi positives
- 上述的anchor-free版本使用一个正样本,忽略了其他的高质量预测。然而,使用这些高质量的预测进行优化,会得到有益的梯度信息,有助于缓解采样过程中的正负样本不平衡;
- 将 3 × 3 3\times 3 3×3的中心位置处样本作为正样本进行采样,可将性能替身到45%;
-
SimOTA
- 基于OTA,为标签分配构建四个insights:
- loss/quality aware;
- center prior;
- dynamic number of positive anchors4 for each ground-truth (abbreviated as dynamic top-k);
- global view;
- 通过 Sinkhorn-Knopp算法解OT(Optimal Transport)问题会花费较多的训练时间,因此简化为动态的top-k个anchor作为正样本;
- 计算每个预测和gt对的匹配度,表示为cost,如 g t i gt_i gti和 p j p_j pj的匹配度为: c i j = L i j c l s + λ L i j r e g c_{ij}=L_{ij}^{cls}+\lambda L_{ij}^{reg} cij=Lijcls+λLijreg。使用固定中心位置区域内排名前k的预测作为正样本。最后,对应的正的预测的grids被分配为正样本,剩下的则为负样本;k值随着gt的不同而不同;
- 该方案将yolo在coco上的AP提升到了47.3%;
- polo
- 基于OTA,为标签分配构建四个insights:
-
End-to-end YOLO
- 添加两个额外的卷积层,一对一的标签分配,和stop gradient技术,使得检测器能够端到端地执行(参考论文《Object detection made simpler by eliminating heuristic nms》);
- 但会带来轻微地性能损失;