Anchor-Free系列之YOLOX:Exceeding YOLO Series in 2021

Yolo系列目标检测算法知识点总结_程大海的博客-CSDN博客_yolo系列目标检测算法

Anchor-Free系列之CenterNet:Objects as Points_程大海的博客-CSDN博客

Anchor-Free系列之FCOS:A Simple and Strong Anchor-free Object Detector_程大海的博客-CSDN博客

Anchor-Free系列之YOLOX:Exceeding YOLO Series in 2021_程大海的博客-CSDN博客

YOLOX训练自有数据集_程大海的博客-CSDN博客


参考:如何评价旷视开源的YOLOX,效果超过YOLOv5? - 知乎 

参考:深入浅出Yolo系列之Yolox核心基础完整讲解 - 知乎

参考:深入浅出Yolox之自有数据集训练超详细教程 - 知乎

参考:YOLOX深度解析 - 知乎

        YoloX是在YoloV3、YoloV5的基础上,配合最近几年目标检测领域比较有效的方法,如Head Decoupled、Data Augmentation、Anchro-Free、Label Assign等。

YoloX技术要点:

1、Head Decoupled(单头 -> 多头)

decoupled-head实验结论:

使用decoupled-head可以带来两个方面的好处:

  1. 加快模型的收敛速度,如下图蓝色曲线
  2. 当进行端到端(不使用NMS)预测时,模型的性能更好,个人理解,这个实验结果表明使用decoupled-head之后,目标检测预测输出的概率置信度更高,bounding box框更准确,预测输出的False Positive更少,只是个人理解,欢迎批评指正。


         这里插播一下关于目标检测使用单个预测头、多个预测头、预测头使用FC还是使用卷积的相关研究,我主要看了下面这篇论文:

 《Rethinking Classification and Localization for Object Detection》

起因

        作者经过深入分析发现,对于目标检测算法通常使用的基于全连接层的预测头fc-head,基于卷积层的预测头conv-head,在处理分类任务和坐标回归任务时,表现的效果相反。Fc-head的预测头更适用于预测输出目标的类别置信度,conv-head的预测头更适用于预测输出目标的bounding box坐标框。

        鉴于上述观察结果,作者设计了具有双预测头的目标检测算法Double-Head,其中fc-head主要负责预测目标的类别概率置信度,conv-head主要负责预测目标的bounding box坐标。并在此基础上进一步演化出了Double-Head-Ext算法,让fc-head在主要负责预测输出类别概率的同时,辅助预测目标的bounding box,让conv-head在主要负责预测输出目标bounding box坐标的同时,辅助预测目标的类别置信度。

Backbone: 使用FPN网络作为backbone,上层使用RPN网络生成proposal,在proposal的基础上使用RoIAlign(详见Mask-RCNN),将每个proposal的区域生成7x7x256的feature map,然后分别送入fc-head和conv-head,经过fc-head和conv-head之后,最终输出1024位的特征向量,然后在特征向量上预测输出每个proposal的类别置信度和bounding box

fc-head:在proposal经过RoIAlign之后得到的256x7x7的feature map上,使用两个全连接层,输出得到1024维的特征向量

conv-head:在proposal经过RoIAlign之后得到的256x7x7的feature map上,堆叠使用多个residual block残差模块,最后使用avg pooling,输出得到1024维的特征向量

损失函数:

Double-Head预测结果融合:

        基于fc-head和conv-head预测输出的目标类别置信度,综合得到最终的置信度。

效果:


好了, 继续回到YOLOX的技术要点上来。

2、Data Augmentation(数据增强)

Mixup:数据增强之MixUp_程大海的博客-CSDN博客_数据增强mixup代码

Mosaic:关于马赛克数据增强方法,可以参考“江大白”的YOLO系列讲解,讲的非常好。

备注:关于Mixup和Mosaic数据增强方法,作者在论文中说要在训练的最后15个epoch关闭Mixup和Mosaic,关于这个问题,在旷视科技官方知乎账号上给出了如下解释:

         以上回答意思就是说,当使用了Mixup和Mosaic数据增强方法,会对输入的原始图片进行较大的变化(叠加、裁剪、粘贴等),导致输入到网络模型的图片数据与真实场景的图片数据偏差较大,导致数据的分布不一致,影响模型的泛化性能。关于这个问题,我自己在实际使用Mixup方法,以及使用自有数据集训练YOLOX时也有如下两点发现:

        1、使用Mixup数据增强训练分类模型时,Loss值和Accuracy震荡很厉害,模型的Loss很快就基本上不下降了

        2、在使用YOLOX训练自有数据集时,在最后15个epoch关闭Mixup和Mosaic之后,验证集上的mAP指标直线上升4-5个百分点。如下图所示:

         所以在训练的最后阶段,关闭Mixup和Mosaic确实可以提升模型性能。让模型在前期经历各种磨难(Mixup+Mosaic),努力学习去做各种难题、怪题,在后期学有所成之后,开始接触真正的三年模拟,五年真题,在真实战场上一展身手。

        

3、Anchor-Free(无锚框)

关于anchor-based目标检测方法的一些缺点,可以参考Anchor-Free系列之FCOS:A Simple and Strong Anchor-free Object Detector_程大海的博客-CSDN博客

  1. Yolov3-Yolov5是基于anchor的检测算法,anchor在模型训练前使用1-IoU作为距离度量的kmean聚类得到,这样得到的anchor高度适用于训练集,泛化效果就会差一些。
  2. 大量的anchor增加了预测输出的复杂度,每个anchor都会输出一个预测结果,并且要配合NMS来过滤无效的预测结果,大量的anchor会带来更大的运算量
  3. Anchor会产生大量的negative,导致训练正负样本不均衡

        参考CornerNet、CenterNet等anchor-free方法,YoloX放弃使用anchor,在输出特征图上的每个位置直接预测4个数值结果,用来确定相对于当前位置,目标的top-left和bottom-right corner的偏移量offset

4、Multi positives

        YoloX放弃使用anchor,然后将目标的中心点位置作为唯一的positive,其余均为negative,这样会导致大量的正负样本不均衡(CornetNet和CenterNet中采用Focal Loss),同时也会忽略那些预测结果稍微不完美(预测的中心点稍微偏离)的结果,参考CornerNet、CenterNet、FCOS等anchor-free的方法,YoloX在目标的中心划定一个范围,范围内的位置均代表目标的中心,都是positive,这样可以将AP从42.9%大幅提升到45%

5、Label Asign(标签分配)

参考:CVPR 2021论文解读Vol.4 | OTA: 依靠最优传输理论提升标签分配质量的一阶段目标检测算法 - 知乎

参考:YOLOX深度解析(二)-simOTA详解 - 知乎

参考:目标检测: 一文读懂 OTA 标签分配_大林兄的博客-CSDN博客_ota目标检测

常见目标检测算法采用的标签分配方式:

Two-Stage:

Faster RCNNFaster RCNN中,计算anchor boxground truth之间的IoU来确定anchor box归属于那个ground truthIoU > 0.7positiveIoU<0.3negative,其余的舍弃,当一个anchor box同时两个ground truth满足IoU>0.7时,选择IoU值大的那个ground truth

One-Stage:

RetinaNet/YoloV3: 每个anchor按照与ground truthIoU值分配一个label,与Faster R-CNNRPN不同的是,由于是一阶段的目标检测方法,此处的anchor与具体的类别标签相关联,Faster R-CNN中的RPNanchor只是被简单的分类为前景、背景。

Anchor-Free:

CornerNet:

  1. 对于每个corner,在图片上只有一个positive corner,其余位置的corner均为negative,这就导致了正负样本的不均衡,所以论文采用了Focal Loss损失函数来消除正负样本不均衡带来的影响。
  2. 在模型训练阶段,并不是对所有的negative都一视同仁,划定在positive corner一定半径范围内的negative corner,表明这个corner虽然不完美,但是足够精确了,所以这部分negative corner带来的损失权重就小一些,其他在positive corner半径之外的negative corner的权重是一样的

CenterNet:

  1. CornerNet的处理方式类似,CenterNet在目标的中心位置确定一个positive,同时在positive的周围也划定了一个范围,在范围内的预测结果虽然不够完美,但是也已经很不错,很准确了,所以这部分结果产生的损失就应该小一些,通过对负样本的损失进行加权处理来实现。同时,因为对于一个目标只有一个positive location,其余的全是negative,这就导致了正负样本的极度不均衡,所以CenterNet也采用了Focal Loss损失函数来消除正负样本不均衡的问题。

FCOS:

  1. FCOS在ground truth的中心位置(cx, cy)的周围划定一个矩形范围(cx-rs, cy-rs, cx+rs, cy+rs),落在矩形范围内的点均为positive,落在范围之外的位置为negative。这些positive位置都可以负责预测输出目标。那么对于同一个目标,可能会被矩形范围内的多个positive预测输出结果,FCOS想优先保留预测结果靠近目标中心的结果,center-ness就是设计了一种方法来衡量这些预测结果离目标的中心点的远近程度。对于矩形范围内的positive点,每个positive都有一个回归目标(l*,t*,r*,b*),通过这组回归目标计算这个positive点与目标中心点的偏离程度,并归一化到0-1之间。

        当一张图片上的两个目标之间存在重叠时,目标的center location中心点相互靠近,经过multi-positive之后,在那两个目标的中心点附近都选了一组positive,由于两个目标中心离的很近,就导致选择的两组positive之间存在重合的情况,那么如何确定重合的positive位置到底属于哪个目标?如何对重合的positive进行划分?在Faster RCNN等算法是选择IoU更大的那个,FCOS算法是将positive用来预测box面积小的那个目标,并且FCOS算法对FPN的每个层级特征图负责预测目标的大小做了限制,这样就显著降低了在一张图片上两个重叠的目标出现在FPN同一层级特征上的概率,通过这种方式来缓解positive分配的问题。

        相比于Faster RCNN和FCOS等方法中比较简单粗暴的处理方式,在YOLOX中使用一种更严谨的方法SimOTA从全局来考虑anchor box的标签分配问题,来确定positive负责预测哪个目标。可以天然缓解拥挤场景的检测问题,缓解极端长宽比的物体的检测效果差的问题(在实际使用中,比如检测长条形的物体10x200大小,亲测yolov5 AP50只有30%-40%,YOLOX对于这类目标检测的AP50可以达到80%以上),以及极端大小目标正样本不均衡的问题。

        在前面的Multi-positive步骤中,在每个GT的中心点的一个矩形(3x3)范围内的点都初步设置为positive,然后使用SimOTA方法重新对这些positive所归属的GT进行分配。OTA和SimOTA的计算过程具体可以参考前面给出的参考文档,写的相当棒。

YOLOX实验效果:

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值