目标检测 YOLO 系列:你有我无 YOLOX

目标检测 YOLO 系列:你有我无 YOLOX

作者:Zheng Ge
发表时间:2021
Paper 原文:YOLOX: Exceeding YOLO Series in 2021

1. 概览

那边 YOLOv5 还在不断更新,这边旷世 YOLOX 又开了新头了,真是一幅百舸争流啊。。。当然作为一名工业界的搬运工,还是很兴奋的,又有新的砖可以搬了。YOLOX 一出,各种公众号“吊打一切”,“秒天秒地” 的声音就出来了,真有这么神?作为一名搬运工,我觉得单从工业应用的角度,吸引力没有那么大,因为精度提升不大(一两个点的提升),推理速度相比 YOLOv5 同级网络还略有下降。

当然这不妨碍 YOLOX 中那些发光点。论文作者在知乎上也亲自上台推广 YOLOX,做了比较全面的梳理。所以如果不想看论文,看论文作者的科普应该好过看那些二道贩子的公众号:论文作者自述 YOLOX。我觉得这些发光点里最吸引我的还是 Anchor Free,所以我 YOLOX 最大的两点是你有(Anchor)我无 (Anchor)。另外 YOLOX 还直接做好了各个平台(trt, ncnn, openvino)的移植配套,真是贴心啊。特别对于移动端(板子)推出了轻量化模型 YOLOX-Nano, YOLOX-Tiny。

  • Anchor Free
  • Decoupled Head
  • SimOTA
  • End2End(最终没有采用)

2. 网络结构

作者尝试了多种 backbone,最好的还是 Modified CSP 效果最好。关于 网络结构这一块,推荐参考江大白的 深入浅出Yolo系列之Yolox核心基础完整讲解

在这里插入图片描述
在这里插入图片描述
以上面的 YOLOX-Darknet53 的结构为例。YOLOX-Darknet53 的 Backbone(Darknet 53) 和 Neck(FPN) 部分和 YOLOv3 是一致的,变化比较大的是 Prediction 部分。

2.1 Decoupled Head

Decoupled Head 的结构如下所示。Decouple 指的是把 reg,obj 和 cls 分开处理,然后 concate。
在这里插入图片描述
作者通过实验发现 Decoupled Head 效果更好,但是增加了计算量,因此采用一个 1*1 的卷积降维减少计算量。
在这里插入图片描述

网络(在 COCO 数据集上)最后的输出维度为 85*8400 ,相比 YOLOv5 的输出 3*(20*20+40*40+80*80)*85,减少了 2/3 。

3. 网络原理

相比前面的 YOLOv3~5,由于采用了 Anchor Free,所以回有所不同。关于训练时标签分配的问题,对于标签分配这一块,江大白的 深入浅出Yolo系列之Yolox核心基础完整讲解 中也要图文并茂的讲解。

4. Loss

bbox 的位置损失函数是 IoU loss, 可以选择普通的 iou_loss 或者是 giou_loss。

obj_loss 和 cls_loss 都是采用的 BCE loss。

另外,江大白的文章中有提到,他在自己的数据集上尝试把 obj_output Loss 函数从原文中的 BCELoss 修改为 FocalLoss 后长点明显,这个可以作为一个尝试。

4. 后处理

YOLOX 的后处理相对于 YOLOv5 更为简洁。整理如下。需要注意的是在 YOLOX 的 head 部分,已经对预测的结果进行了部分处理,将 xywh 的值映射到了相对于输入图像尺寸的尺度(详细处理见下面的公式)。
在这里插入图片描述

参考


版权声明:本文为kuweicai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。