YOLOX简析

原文地址https://arxiv.org/pdf/2107.08430.pdf
相对于YOLOv5,YOLOX主要创新点有如下两点:

  • Decoupled head
  • Anchor-free
  1. Decoupled head
    为什么称为Decoupled head(解耦头)呢,可以理解成将yolo head将原始的(N,13,13,255)中的255(4(先验框的调整参数)+1(先验框内是否包含物体)+80(先验框的种类))给分离开了。
    作者实验发现耦合检测头可能会损害性能。共有两点改进:
    ①将预测分支解耦极大的改善收敛速度。
    ②相比较于非解耦的端到端方式,解耦能带来4.2%AP提升。
    在这里插入图片描述
    模型结构:

yolov3中,针对coco80类的检测任务,每一个anchor会对应产生hw85维度的预测结果,其中cls(区分是前景背景)占用1个通道,reg(坐标)占用4个通道,obj(预测是80类中的哪一个类)占用80个通道。
而YOLOX首先使用11卷积将原本不同channel数的特征图先统一到256(主要目的是降维),然后使用两个平行分支,两个分别两个使用33卷积,同时regression分支里还添加了IoU分支。
2. Anchor-free
使用anchor带来的问题
①使用anchor时,为了调优模型,需要对数据聚类分析,确定最优锚点,缺乏泛化性。

②anchor机制增加了检测头复杂度,增加了每幅图像预测数量(针对coco数据集,yolov3使用416416图像推理, 会产生3(1313+2626+52*52)*85=5355个预测结果)。

使用ancho-freer可以减少调整参数数量,减少涉及的使用技巧

从原有一个特征图预测3组anchor减少成只预测1组,直接预测4个值(左上角xy坐标和box高宽)。减少了参数量和GFLOPs,使速度更快,且表现更好。
作者在正样本选择方式做过以下几个尝试:
①只将物体中心点所在的位置认为是正样本,一个gt最多只会有一个正样本。AP达到42.9%。

②Multi positives。(笔者感觉这就是暴力美学,策略简单直接)将中心3*3区域都认为是正样本,即从上述策略每个gt有1个正样本增长到9个正样本。且AP提升到45%,已经超越U版yolov3的44.3%AP。
很简单,之前只考虑中心点所在的网格,这会改成以中心点所在的网格的3x3邻域,都作为正样本,直观上来看,正样本数量增加至9倍。每个grid都去学到目标中心点的偏移量和宽高,此时,显然这个中心点偏移量不再是01了,这一点细节的变化需要留意一下。
③SimOTA

这里不得不提到OTA(Optimal Transport Assignment,Paper: https://arxiv.org/abs/2103.14259),这里简单解释一下,后续计划出个专栏来解释OTA。在目标检测中,有时候经常会出现一些模棱两可的anchor,如图,即某一个anchor,按照正样本匹配规则,会匹配到两个gt,而retinanet这样基于IoU分配是会把anchor分配给IoU最大的gt,而OTA作者认为,将模糊的anchor分配给任何gt或背景都会对其他gt的梯度造成不利影响,因此,对模糊anchor样本的分配是特殊的,除了局部视图之外还需要其他信息。因此,更好的分配策略应该摆脱对每个gt对象进行最优分配的惯例,而转向全局最优的思想,换句话说,为图像中的所有gt对象找到全局的高置信度分配。(和DeTR中使用使用匈牙利算法一对一分配有点类似)
在这里插入图片描述
下面讲述下SimOTA。首先看一个公式:
在这里插入图片描述

SimOTA不仅减少训练时间,而且避免额外的参数。

SimOTA将AP从45.0%提升到47.3%。
simOTA流程:

1、确定正样本候选区域。

2、计算anchor与gt的iou。

3、在候选区域内计算cost。

4、使用iou确定每个gt的dynamic_k。

5、为每个gt取cost排名最小的前dynamic_k个anchor作为正样本,其余为负样本。

6、使用正负样本计算loss。

注:作者刚开始使用过无nms的情况,参考FCOS,但是发现会掉点,因此没有采用

猜你喜欢

转载自blog.csdn.net/weixin_43850171/article/details/123054387