YOLO系列的最新高性能探测YOLOX
YOLOX: Exceeding YOLO Series in 2021
github开源代码
领导给了篇论文说很好理解……
结果哈哈哈哈确实英文很好懂,名词一个都不认识,解耦,anchor-free,OTA
太难啦
新知识点
AP (Average Precision)
为平均精度,使用积分的方式来计算PR曲线与坐标轴围成的面积
计算出AP之后,对所有的类别的AP求平均就可以得出整个数据集上的mAP(mean Average Precision)
AP与mAP含义:目标检测指标
COCO数据集的 全称是Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。COCO通过在Flickr上搜索80个对象类别和各种场景类型来收集图像,其使用了Amazon Mechanical Turk (AMT)
COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), 和image captions(看图说话),使用JSON文件存储。
FLOPS:
是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标FLOPs:
注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度
模型计算力(flops)和参数(parameters)
EMA 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。
BCE损失函数
loU损失函数
解耦 Decoupled 和鲁棒性一样是个一头雾水的名词
低耦合高内聚,模块之间低耦合,模块之内高内聚,以追求消耗最小的能量,软件系统的可重用和易维护。
解耦通俗地说就是两个东西原来互相影响,现在让他们独立发展。少用全局变量。
解藕的本质就是模块化,将两者有关系的东西通过一个固定通道(即接口)进行结合,而通道的两边可以自由定义。
知乎上关于解耦
解耦的专栏
Anchor机制的缺点有:
- 正负样本不均衡
- 超参难调,Anchor 需要数量、大小、宽高等多个超参,这些参数对检测的召回率和速度等指标有很深的影响。
- 训练阶段耗时严重,为了确定每个 Anchor 是正样本还是负样本,通常要将每个 Anchor 与所有的标签进行 IoU 的计算,这会占据大量的内存资源与计算时间
OTA 最佳传输分配 (Optimal Transport Assignment)
具体来说,OTA 从全局角度分析标签分配,并将分配过程制定为最优传输 Optimal Transport (OT) 问题
Paper: OTA
对比
对于 YOLO-Nano(0.91M , 1.08G FLOPs)在 COCO 上获得了 25.3% 的 AP,超过 NanoDet 1.8% 的 AP;
对于 YOLOv3,业界最广泛使用的探测器之一,我们在COCO上提升了 47.3%,比当前最佳实践高 3.0% AP;
对于 YOLOX-L,参数量与 YOLOv4-CSP、YOLOv5-L 大致相同,我们在 COCO 上以 68.9 FPS 的速度在 Tesla V100 上实现了 50.0% AP,超过 YOLOv5-L 1.8% AP。
YOLOX-DarkNet53
选择 YOLOv3和 Darknet53 作为baseline。用随机梯度下降(SGD)进行训练。用lr×BatchSize/64(线性缩放)的学习率,初始 lr=0.01和余弦lr调度。权重衰减 weight decay为 0.0005,SGD 动量为 0.9。对于典型的 8-GPU 设备,批处理大小默认为 128。其他批量大小(包括单 GPU 训练)也运行良好。输入大小从 448 到 832 以 32 步均匀绘制。
YOLOv3 baseline
采用了 DarkNet53 的backtone 和 SPP 层的架构
添加了一些训练策略:
- EMA 权重
- cosine lr schedule
- IoU 损失函数
- IoU-aware
用 BCE 损失函数训练 cls 和 obj 的分支,用 IoU 损失函数训练 reg的分支。
使用的数据增强方法:
- Random Horizontal Flip
- ColorJitter
- multi-scale
Decoupled head
分析实验表明耦合检测头可能会损害性能。
- 将YOLO的头部换成解耦的头部大大提高了收敛速度
- 耦合头的端到端属性降低了 4.2% AP,而解耦头只降低了 0.8% AP。
Strong data augmentation
增加了Mosaic 和 MixUp 增强策略,以提高 YOLOX 的性能。训练了大概15个epoch,实现了 42.0% 的 AP
Mosaic 是 Ultralytics-YOLOv32 提出的一种有效的增强策略。被广泛用于 YOLOv4、YOLOv5和其他检测器。
MixUp 最初是为图像分类任务而设计的,但后来在 BoF中进行了修改,用于对象检测训练。
使用强数据增强后,作者发现 ImageNet 预训练变得没有效果,并且接下来的所有模型都是从头开始训练。
Anchor-free
首先,为了达到最优的检测性能,需要在训练前进行聚类分析,确定一组最优的anchors。
其次,anchor mechanism 增加了检测的复杂性,以及每个图像的预测数量。
将 YOLO 切换为anchor机制非常简单。
将每个图像的预测从 3 组anchor 减少到 1组,直接预测4个值,即网格左上角的xy值,以及预测框的高度和宽度。
同时只为每个对象选择一个处于中心位置的正样本,这可能会缓解训练过程正负样本极端不平衡。
Multi positives
简单地将中心 3×3 的区域指定为正样本,在 FCOS 中也称为“中心采样”。检测器的性能提高到 45.0% AP,算是一种暴力手段。
SimOTA
高质量标签对物体检测效果影响颇丰,主要为以下四个点:
1)loss/quality aware
2)center prior 先验中间
3)dynamic number of positive anchors 4 for each ground-truth (abbreviated as dynamic top-k) 每个ground-truth的动态正锚数量为4(缩写为动态 top-k)
4)global view 全球视野。
OTA 满足上述所有四个规则,因此选择它作为候选标签分配策略。然而,在实验中发现通过 Sinkhorn-Knopp 算法解决 OT 问题带来了 25% 的额外训练时间。
因此,我们将其简化为动态 top-k 策略,命名为 SimOTA。
介绍simOTA是真的理解不动了
与其他模型的对比
就是AP提升
结论
YOLOX 是igh-performance anchor-free detecto。
配备了Decoupled head、Anchor-free和 advanced label assigning strate。
YOLOX 比其他同类产品在速度和准确性之间实现了更好的权衡。
但是YOLOv3 在 COCO 上获得的 47.3% AP,超过YOLOX最佳状态的 3.0% AP,YOLOv3 依旧是YYDS(笑
词汇
Random Horizontal Flip 随机水平翻转
ColorJitter 颜色抖动 pytorch transforms 库
multi-scale 多尺度目标检测
Decoupled head 解耦头