目录
一、速度和检测效果
二、yoloX的改进点
2.1 Decoupled Head(解耦头)
2.2数据增强:Mosaic + MixUp
2.3 Anchor Free
2.4 Label Assignment(样本匹配)
作者尝试了3种正样本选择方式:
SimOTA优点:
simOTA(Optimal Transport Assignment)整体代码逻辑:
☆dynamic top-k 的计算过程:
yoloX的精度指标
1、YOLOX-L和YOLOv4-CSP、YOLOv5-L有差不多参数量的情况下,YOLOX-L在COCO上取得50.0%AP(比YOLOv5-L高出1.8%的AP),且YOLOX-L在单张Tesla V100上能达到68.9FPS。
2、YOLOX-Tiny和YOLOX-Nano(只有0.91M参数量和1.08G FLOPs)比对应的YOLOv4-Tiny和NanoDet3分别高出10% AP和1.8% AP
3、在Streaming Perception Challenge (Workshop on Autonomous Driving at CVPR 2021) 只使用YOLOX-L模型取得第一名。
将网络分类头和回归头解耦。
yoloX解耦了分类头和回归头1)解耦头的好处:
2)解耦时控制计算量:
为了权衡速度和性能,使用 1个1x1 的卷积先进行降维,并在分类和回归分支里各使用了 2个3x3 卷积,最终调整到仅仅增加一点点参数。
YOLOX继续给baseline增加了Mosaic和Mix-up两个数据增强手段。在训练的最后15个epoch,这两个数据增强会被关闭掉。
1)Mosaic增强:Mosaic 经过 YOLOv5 和 v4 的验证,证明其在极强的 baseline 上能带来显著涨点。
2)MixUp:用在目标检测中大概的方式是:两张图以一定的比例对rgb值进行混合,同时需要模型预测出原本两张图中所有的目标。目前MixUp在各大竞赛、各类目标检测中属于稳定提点的策略。
3)Mosaic 配上 Copypaste,依然有不俗的提升;
将原有一个特征图预测3组不同尺寸anchor减少成只预测1组,直接预测4个值(左上角xy坐标和box高宽)。减少了参数量和GFLOPs,使速度更快,且表现更好。
Anchor Free 的优点:
1)只将物体中心点所在的位置认为是正样本,一个gt最多只会有一个正样本。AP达到42.9%。
2)Multi positives:将中心3*3区域都认为是正样本,即从策略1中每个gt有1个正样本增长到9个正样本。且AP提升到45%,已经超越U版yolov3的44.3%AP。
3)SimOTA
OTA(Optimal Transport Assignment):在目标检测中,有时候经常会出现一些模棱两可的anchor,如图3,即某一个anchor,按照正样本匹配规则,会匹配到两个gt,而retinanet这样基于IoU分配是会把anchor分配给IoU最大的gt,而OTA作者认为,将模糊的anchor分配给任何gt或背景都会对其他gt的梯度造成不利影响,因此,对模糊anchor样本的分配是特殊的,除了局部视图之外还需要其他信息。因此,更好的分配策略应该摆脱对每个gt对象进行最优分配的惯例,而转向全局最优的思想,换句话说,为图像中的所有gt对象找到全局的高置信度分配。(和DeTR中使用使用匈牙利算法一对一分配有点类似)
1、确定正样本候选区域。
2、计算anchor与gt的iou。
3、在候选区域内计算cost(损失)。
4、使用iou确定每个gt的dynamic_k。
5、为每个gt取cost排名最小的前dynamic_k个anchor作为正样本,其余为负样本。
6、使用正负样本计算loss。
1)判断grid是否在gt-box的内部,如果在则为正样本fg_mask;
2)同时判断grid在不在gt-box中心点2.5个像素点区域内(论文是3个像素点)
3)如果上面两个条件同时满足则用is_in_boxes_and_center 表示,这一步是一个筛选的过程选更靠近gt的grid为正样本。
cost = (
pair_wise_cls_loss # Lcls
+ 3.0 * pair_wise_ious_loss # λ*Lreg,实际代码中把λ设置为了3
+ 100000.0 * (~is_in_boxes_and_center) # 把不在考虑范围内的anchor置为很大的数值
)
1)代码中pair_wise_cls_loss和pair_wise_ious_loss是通过fg_mask选取的gird与gt的分类loss和IoU loss;
2)代码第3项可以看到cost 里面有100000.0 * (~is_in_boxes_and_center)的计算,发现当grid不在is_in_boxes_and_center 里面的代价cost是非常大的值。
1)获取与当前gt的IoU值前10的预测结果,将这top10的IoU值相加的总和值,就为当前gt的dynamic_k。dynamic_k最小值为1,保证一个gt至少有一个正样本。
由于前期模型预测不准,导致iou基本比较小,因此模型训练前期dynamic_k大多为1。
2)取cost排名最小的前dynamic_k个anchor作为gt的正样本,其余为负样本。
参考链接:
https://zhuanlan.zhihu.com/p/394392992
https://zhuanlan.zhihu.com/p/392221567