YOLOX是以YOLOv3-SPP作为baseline,主要从三个方面进行改进。参考https://zhuanlan.zhihu.com/p/392221567。
其中SPP的结构如图所示:(实现不同尺度的特征融合)
anchor(也被称为anchor box)是在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标主要分布的长宽尺度。在推理时生成的特征图上由这些anchor滑动提取n个候选矩形框再做进一步的分类和回归(详细叙述请参考提出anchor思想的fasterRCNN一文)。也就是传统目标检测算法中,在图像金字塔上使用的那个m*n的滑窗。只不过传统方法中特征图是不同尺度的,滑窗一般是固定大小的;而类似于fasterRCNN算法中特征图是固定的,anchor是多尺度的。
相比较于非解耦的端到端方式,解耦能带来4.2%AP提升,并加快收敛速度。
模型结构:
yolov3中,针对coco80类的检测任务,每一个anchor会对应产生hw85维度的预测结果,其中cls(区分是前景背景)占用1个通道,reg(坐标)占用4个通道,obj(预测是80类中的哪一个类)占用80个通道。
而YOLOX首先使用11卷积将原本不同channel数的特征图先统一到256(主要目的是降维),然后使用两个平行分支,两个分别两个使用33卷积,同时regression分支里还添加了IoU分支。
添加Mosaic和MixUp,但在最后15epochs时关闭(笔者认为最后15轮关闭的原因可能是怕数据增强过度)
Mosaic最先在U版的yolov3中使用,现在已经广泛用于各大目标检测器。U版yolov3代码网址:https://github.com/ultralytics/yolov3
MixUp用在目标检测中大概的方式是:两张图以一定的比例对rgb值进行混合,同时需要模型预测出原本两张图中所有的目标。目前MixUp在各大竞赛、各类目标检测中属于稳定提点的策略。
作者颠覆性发现:使用强大的数据增强后,ImageNet预训练模型无益,所有后续模型都是随机初始化权重。
同时论文最后提到,在训练比较小的模型时候,例如YOLOX-S, YOLOX-Tiny,YOLOX-Nano网络,剔除mixup,弱化mosaic效果,表现要比使用好。
yolov3使用Anchor-based的方法,在yolox中将Anchor-free引入。Anchor-free和Anchor-based区别在于有没有利用anchor提取候选目标框。
3.1 anchor存在的问题:
①使用anchor时,为了调优模型,需要对数据聚类分析,确定最优锚点,缺乏泛化性。
②anchor机制增加了检测头复杂度,增加了每幅图像预测数量(针对coco数据集,yolov3使用416416图像推理, 会产生3(1313+2626+52*52)*85=5355个预测结果)。
使用ancho-free可以减少调整参数数量,减少涉及的使用技巧。从原有一个特征图预测3组anchor减少成只预测1组,直接预测4个值(左上角xy坐标和box高宽)。减少了参数量和GFLOPs,使速度更快,且表现更好。
3.2 分析:
作者:旷视科技
链接:https://www.zhihu.com/question/473350307/answer/2021031747
来源:知乎
为什么 Anchor Free 现在可以上 YOLO ,并且性能不降反升,这与样本匹配有密不可分的联系。与 Anchor Free 比起来,样本匹配在业界似乎没有什么关注度。但是一个好的样本匹配算法可以天然缓解拥挤场景的检测问题( LLA、OTA 里使用动态样本匹配可以在 CrowdHuman 上提升 FCOS 将近 10 个点),缓解极端长宽比的物体的检测效果差的问题,以及极端大小目标正样本不均衡的问题。甚至可能可以缓解旋转物体检测效果不好的问题,这些问题本质上都是样本匹配的问题。在我们的认知中,样本匹配有 4 个因素十分重要:
3.3 作者在正样本选择方式做过以下几个尝试:
①只将物体中心点所在的位置认为是正样本,一个gt最多只会有一个正样本。AP达到42.9%。
②Multi positives。(笔者感觉这就是暴力美学,策略简单直接)将中心3*3区域都认为是正样本,即从上述策略每个gt有1个正样本增长到9个正样本。且AP提升到45%,已经超越U版yolov3的44.3%AP。
③SimOTA
OTA:(运筹学中的供应商和需求者问题)
在目标检测中,有时候经常会出现一些模棱两可的anchor,如图,即某一个anchor,按照正样本匹配规则,会匹配到两个gt,而retinanet这样基于IoU分配是会把anchor分配给IoU最大的gt,而OTA作者认为,将模糊的anchor分配给任何gt或背景都会对其他gt的梯度造成不利影响,因此,对模糊anchor样本的分配是特殊的,除了局部视图之外还需要其他信息。因此,更好的分配策略应该摆脱对每个gt对象进行最优分配的惯例,而转向全局最优的思想,换句话说,为图像中的所有gt对象找到全局的高置信度分配。(和DeTR中使用使用匈牙利算法一对一分配有点类似,但是the Hungarian algorithm针对一对一分配,OTA以及SimOTAz设计为一对多分配)。
下面讲述下SimOTA。首先看一个公式:
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 L i j c l s L_{ij}^{cls} Lijcls和 L i j r e g L_{ij}^{reg} Lijreg分别计算groundtruth g i g_i gi 和prediction p j p_j pj的分类和回归loss。
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。
一个优秀的回归定位损失一般考虑三个因素:
1. 重叠面积
2. 中心点的距离
3. 长宽比
添加两个额外的conv,one-to-one label assignment和stop gradient,但造成了略微的性能降低和推断速度降低,所以在最终模型中没有选用。
如果二分图里的某一个匹配包含的边的数量,在该二分图的所有匹配中最大,那么这个匹配称为最大匹配(Maximum Matching)。
However, keep in mind that the inference speed of the models in this table is often uncontrolled, as speed varies with software and hardware. 模型inference的速度和软硬件均有关系。
In object detection, the conflict between classification and regression tasks is a well-known problem. 目标检测中分类和回归(预测框)之间存在trade-off。
The Focal Loss is designed to address one-stage object detection scenario in which there is an extreme imbalance between foreground and background classes during training(e.g.1:1000).
下图说明Focal Loss相比于CrossEntropy Loss,它能够降低易分样本的损失贡献(蓝色行和红色行为易分样本,公式中的 α \alpha α取 1 r a t e \frac{1}{rate} rate1,绿色行为难分样本 )。
当然,相应的缺点为易受噪音的影响。