小白读论文-YOLOX(2021年6.8)
YOLOXYOLOX摘要YOLOXYOLOx-DarkNet53other Backbones论文地址:https://arxiv.org/pdf/2107.08430.pdf代码地址:https://github.com/Megvii-BaseDetection/YOLOXYOLOX摘要亮点:1.采用anchor-free的方式2.解耦头部3.采用SimOTA结果:YOLONano为0.91M、
论文地址: https://arxiv.org/pdf/2107.08430.pdf
代码地址: https://github.com/Megvii-BaseDetection/YOLOX
YOLOX摘要
亮点:
1.采用anchor-free的方式
2.解耦头部
3.采用SimOTA
结果:
YOLONano为0.91M、1.08G Flops,超过NanoDet 1.8%AP
比YOLOv3高3%AP
相较于YOLOv4CSP、YOLOv5-L,速度为68.9FPS,超过YOLOv5-L 1.8%AP。
总结:主要是将anchor-free、SIMOTA、无NMS的检测器融入YOLO中。
YOLOX
YOLOx-DarkNet53
YOLOX是以YOLOv3-DarkNet53为基线进行的。(注意,这里的YOLOv3是加入了SPP的)
基线调整
同时adding EMA weights updating, cosine lr schedule, IoU loss and IoU-aware branch.
总结:
相较于YOLOv3-SPP做出了如下改动:
1.加入EMA权重更新
2.余弦lr调度
3.加入IoU损失
4.加入IoU感知分支
使用BCE损失,用于训练cls和obj分支,将IoU损失用于训练reg分支。
数据增强方面:
只进行RandomHorizontalFlip、ColorJitter和多尺度数据增强,并放弃RandomResizedCrop策略,因为我们发现RandomResizedCrop与计划的镶嵌增强有点重叠。
解耦头部
为解决分类和回归的冲突问题,提出使用解耦头部的方式。实验验证了耦合探测头会损害性能。
解耦头部的优点:
1.使用解耦的头部可以提高收敛速度。
2.解耦头部对于端对端的YOLO而言,必不可少。该结构组成:由一个1×1的卷积层减少通道数,后面跟着两个平行分支结构。
图2:说明YOLOv3耦合和建议的结构头部之间的差异。对于每一级FPN特征,我们首先采用1 × 1 conv层将特征通道减少到256个,然后添加两个平行分支,每个分支有两个3 × 3 conv层,分别用于分类和回归任务。在回归分支上增加了IoU分支。
图3:带有YOLOv3头或去耦头的检测器的训练曲线。我们每10个时代在COCO val上评估一次AP。显而易见,解耦磁头比YOLOv3磁头收敛得更快,最终获得更好的结果
总结::
1.采用解耦头部有诸多优点。(上面讲解了)
2.实验验证了解耦头部的收敛速度更快,效果更好。
数据增强
强大的数据增强我们在增强策略中加入了Mosaic和MinUP,以提升YOLOX的性能。Mosaic是ultralytics-YOLOv3提出的一种有效的扩增策略。然后,它被广泛用于YOLOv4、YOLOv5和其他检测器。MixUp 最初是为图像分类任务而设计的,但在对象检测训练中,MixUp的任务是很复杂的。我们在模型中采用了MixUp和Mosaic实现,并在过去15个时代关闭了它,在Tab 2中实现了42.0%的AP。在使用强大的数据增强后,我们发现ImageNet预训练并没有更多的好处,我们因此我们从头开始训练以下所有模型。
总结,本文使用了Mosaic和MixUP,但是验证发现,使用该强大的数据增强后,采用ImageNet的预训练模型没有益处,因此从头训练。
anchor-free
锚机制的缺点:
1.原始的YOLO都是基于锚的原则,泛化效果差
2.采用锚机制会增加检测头的复杂性,以及每个图像的预测量数量。
在一些边缘人工智能系统中,在设备之间移动如此大量的预测(例如,从NPU到中央处理器)可能会成为总延迟的潜在瓶颈。
无锚机制的好处:
无锚探测器在过去两年中发展迅速。这些工作表明,无锚探测器的性能可以与基于锚的探测器相媲美。无锚机制显著减少了需要启发式调整的设计参数数量和涉及的许多技巧(例如,锚聚类,网格敏感)。)为了获得良好的性能,使检测器,尤其是其训练和解码阶段变得相当简单。
如何切换到无锚机制?
将YOLO切换到无锚模式非常简单。我们将每个位置的预测从3减少到1,并使它们直接预测四个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。我们将每个物体的中心位置指定为正样本,并预先定义一个标度范围,如(Zhi Tian, Chunhua Shen, Hao Chen, and Tong He. Fcos:Fully convolutional one-stage object detection. In ICCV,2019. 1, 2, 3, 4)中所做的,以指定每个物体的FPN水平。这种修改减少了检测器的参数和GFLOPs,使其更快,但获得了更好的性能-42.9%的AP,如表2所示。
Multi positives
为了与YOLOv3的分配规则一致,上述无锚版本只为每个对象选择一个positive样本(中心位置),同时忽略其他高质量预测。然而,优化那些高质量的预测也可能带来有益的梯度,这可能缓解训练期间正/负采样的极端不平衡。我们简单地将中心3×3区域指定为阳性,在FCOS也称为“中心采样”。检测器的性能提高到45.0% AP,如表1所示。2,已经超过了ultralytics-YOLOv3的当前最佳实践(44.3% AP2)。
SimOTA
OTA的研究:(优秀的label assignment应该具备的特征:)
1.Los/quality aware
2.center prior
3.dynamic number of positive anchors for each ground-truth
4.global view
OTA满足上面4个条件,但是考虑到训练时间问题,使用SimOTA
PS:
在实践中我们发现通过sinkorn-Knopp算法解决SOTA问题会带来25%的额外训练时间,这对于训练300个epoch来说是相当昂贵的。因此,我们将其简化为动态top-k策略,命名为SimOTA,以获得近似解。
具体公式可以看论文讲解哦
端到端YOLO
实现方法:
1.加入两层额外卷积层
2.加入一一映射的label assignment
3.加入stop gradient
other Backbones
模型大小和数据增强的关系
实验发现,不同大小的模型与采用数据增强的强弱有关系,如MixUP中,YOLOX-L使用MixUP是可以增强0.9%的AP,但是对于YOLOX-Nano这样的小型的模型而言,效果比较差,当削弱MixUP的增强效果时,效果最好。
因此,在训练小型模型时,去掉了MixUP,弱化了mosaic,发现效果更好了。
发现在训练大型模型时,增强数据增强,效果更好。
模型比较:
总结下:
1.使用无锚的anchor-free
2.使用解耦头部
3.使用SimOTA(原文提出的)
4.使用强大的数据增强后,采用ImageNet的预训练模型没有益处,因此从头训练。
5.发现模型大小与数据增强有关系,使用小模型时,减弱数据增强,得到的效果更好,使用大模型时,增强数据增强,效果更好
最后加一个在知乎上看到的图。
参考:https://blog.csdn.net/qq_42322191/article/details/118936680
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)