- notes: yolox测试,速度与yolov5相比没有优势,主要是由于添加了解耦的head,只是精度比yolov5高, tiny和nano版本确实gpu占用率比较小,但是速度也没有明显优势; 代码的话比较模块化,之后有空可以看看
- 使用yolox-nano训练新数据,416x416size,转trt之后大概2.3ms左右,占gpu利用率7%(640也是一样), 转trt之前是8/9ms左右,gpu占用率为12%
在DarkNet53+SPP的结构基础上(YOLOv3+SPP):
- EMA
- 余弦退火
- IoU loss
- IoU-aware分支
- cls和obj使用BCE loss
- RandomHorizontalFlip
- ColorJitter
- multi-scale
将检测头的分类与定位解耦,分开。 解耦结构对比图如图2所示。 !图2
使用两个并行的3x3的conv分支,在V100上,batchsize=1: 解耦的检测头会带来1.1ms的额外推理耗时 (11.6 ms vs 10.5 ms)
- Mosaic
- Mixup 在训练的最后15个epoch关闭mosaic和mixup; 且由于使用的更强的数据增强,所有模型都从头开始训练;
- anchor-based方法的问题
- anchor-based方法是domain-specific的,泛化性更差
- anchor机制会增加检测头的计算量
- 添加anchor-free
- 将每个location的预测从3减少到1,直接预测四个值(左上角-宽高)
- 与FCOS一样,选择目标中心的一个范围的区域为正样本
- 按照FPN尺度分类样本
这些改进减少了参数和GFLOPs,提高了检测器的速度,且拥有更高的精度,如表2所示
为了和YOLOv3保持标签分配的规则一致,上述的anchor-free改进,每个目标仅仅选择了一个正样本;
和FCOS的center sample一样,选取目标中心点的一个范围作为正样本,3x3的范围,实现了更好的精度,如表2
- loss/quality aware
- center prior
- 为每个GT选择动态数量的anchors(动态的top k)
- global view
OTA虽然效果很好,但是使用Sinkhorn-Knopp算法会带来25%额外的训练时间,所以作者提出SimOTA,SimOTA就是OTA的简化版,动态的选择top k策略,得到一个近似解;
SimOTA不仅减少了训练时间,而且避免了OTA中Sinkhorn-Knopp算法额外的超参数; 结果如图2所示
按照PSS的做法,添加了两个额外的卷积层,one-label-one 标签分配,stop gradient; 由于降低了模型的精度,所以End-to-End YOLO是作为一个可选择的选项;
采用了YOLOv5的backbone,激活函数,和neck,相同的模型缩放规则,得到了YOLOX-S,YOLOX-M,YOLOX-L,YOLOX-X模型
- 较小的模型使用更弱的数据增强
- 较大的模型使用更强的数据增强