首页 > 其他分享 >YOLOX 笔记

YOLOX 笔记

时间:2022-10-13 19:23:46浏览次数:79  
标签:YOLO 样本 笔记 目标 YOLOX anchor Anchor

笔记来源:https://www.bilibili.com/video/BV1jo4y1D7CF/?vd_source=2ed6e8af02f9ba8cb90b90e99bd4ccee

近年来,目标检测的工程应用研究中,YOLO系列以快速响应、高精度、结构简单以及容易部署的特点备受工程研究人员的青睐。同时,YOLO系列存在需要手工设定样本正负导致模型泛化能力较差的问题。为了解决此类问题,旷视科技研究院BaseDetection组结合学术界先进成果和工程实践的要求,提出了YOLOX。

本期,来自旷视科技研究院BaseDetection组的刘松涛,对YOLO近两年的关键技术进行了梳理,同时介绍了YOLOX在这些方向上的关键改进,以及一些实际训练和调优的经验。

image

主讲人:刘松涛,旷视研究院BaseDetection组研究员,本科和博士均毕业于北京航空航天大学,主要研究方向为计算机视觉中的目标检测、行人检测问题。他在CVPR、ECCV、ICCV等国际计算机视觉顶级会议中发表了近10篇文章,并获得了CVPR 自动驾驶比赛WAD 2021中Streaming Perception Challenge 双赛道冠军。代表作品包括RFBNet,AdaptiveNMS, ASFF和YOLOX等。


内容目录

一、 YOLO简介

二、 YOLO系列关键技术发展

2.1 Anchor Free发展

2.2 样本匹配(Label Assignment)发展

三、 YOLOX介绍

3.1 YOLOX核心部件介绍

3.2 YOLOX实验结果

3.3 YOLOX使用建议

3.4 YOLOX开源与部署


一、 YOLO简介

image

YOLO 系列高性能:速度快,精度高,方便部署(工业界)。

YOLO系列发展至今主要包含了v1、v2、v3、v4和v5以及针对每个版本的改进系列。YOLOv1源于Joseph Redmon,主要贡献在于:开发出实时高性能目标检测的one-stage检测框架,只需要将图像一次性输入到网络中即可预测出图像中目标的位置,具有速度快;检测精度高和方便部署等优点。

YOLOv2吸收了当时学术界最新的成果,性能持续提升,主要的改进之处在于:1)采用Darknet-19作为特征提取网络,增加了批量标准化(Batch Normalization)的预处理;2)YOLOv2吸收了Fast RCNN的做法,引入anchor方法。

YOLOv3同样吸收了当时学术界的最新成果,在v2的基础上借鉴了残差网络(ResNet)思想,使用了darknet-53,解决梯度消失或者梯度爆炸的问题。

image

YOLOv3之后,原作者Joseph Redmon认为YOLO系列存在一些非学术应用会产生不利的影响,所以退出YOLO在视觉方面的研究,但是后人在原来的基础上继续研究,成功发布了YOLOv4,v5。

YOLOv4由俄罗斯独立研究员Alexey Bochkovskiy继承了YOLO系列后开发,集百家之长,不断尝试优化。

YOLOv5的命名有一些争议,但作者也一直在维护和改进代码,其性能也一直在持续提升。作者提出了 masic 增强。

同时,这两年的YOLO系列与学术领域的发展是相对独立的。YOLOv4、YOLOv5的性能提升主要来自模块优化和调参,依旧使用了 Anchor based 和手工匹配规则等策略。

二、 YOLO系列关键技术发展

近两年来,Anchor free 和 label assignment 是学术界对于目标检测的主要进展内容。

image

2.1 从 Anchor based 到 Anchor free

Anchor based主要用在Faster RCNN以及YOLOv2和3等网络中,当学习某个目标的坐标时,得到相对坐标,比如预测bouding box 的坐标时,有一个原点坐标,当原点坐标不是一个点而是一个框的时候,该部分便称为 Anchor。faster Rcnn 时候出现的 Anchor,所谓的相对坐标是针对 anchor 的伸缩变换。 Anchor based 一般需要设置原点坐标和框的大小,预测时需要用 Anchor based 平移来完成预测。

Anchor free 相对于Anchor based更加灵活,只需要先定义预测框目标的中心点作为原点(零点),然后基于原点确定四个顶点作为预测过程(实际上也是 anchor ,不过是 anchor point ),取代了 Anchor based 预测时需要平移边框的过程。

Anchor free 的优势:

  • (1)降低了手工设定Anchor的调参压力;预定义的 Anchor 的大小和长宽比跟数据分布高度相关,设定不好否则会影响性能,实际中需要调休 anchor 的设定。Anchor free 不需要设定这些 anchor box,网络可以学习到从一个点出发预测该目标,所以不需要调参。
  • (2)模型后处理更加简单高效。两个方面:1:

2.2 label assignment 发展

标签分配或者正负样本的分配( label assignment )是 Anchor free 之后又一重要技术。在 Dense prediction 中输出针对全图且输出远多于目标数,故而需要研究目标和输出结果的正负样本划分问题,用以确定哪些输出对应哪个目标以训练网络

RetinaNet 中,根据 anchor 和 目标 的IOU 确定正负样本,通过计算 anchor 的形状和目标点之间的趋近程度得到目标的IOU,然后用IOU的大小确定样本的正负,所以调整anchor的大小,就可以控制 label assignment 的质量。

FCOS等使用了 Anchor free 方法的网络中,label assignment 通过计算目标中心区域和目标的尺度之间的趋近程度确定样本的正负。再加上 FPN 的多尺度测量,通过框的尺度大小划分其在FPN的哪一个层,即尺度大的在最顶层,尺度小的在最底层的位置。

目前的 label assignment 主要需要在两个维度上涉及分配的策略:

  • 一个是空间维度,主要用于划分每个空间区域对应的目标;
  • 一个是在FPN中的尺度维度,通过在多尺度输出层面上的计算,确定目标对应的尺度层。

通过对 label assignment 的研究,得到了 FCOS/CenterNet、Free Anchor/ATSS、PAA/AutoAsign 和 IQDet/OTA 等一系列的成果。

2.2.1 FCOS/CenterNet

最开始使用 Anchor free 时,研究人员使用 手工设定分配规则(中心先验)

FCOS/CenterNetFCOS 设定中心点附近的 3 X 3 邻域为正样本CenterNet 只设定中心点为正样本,其他区域为负样本等。手工设置的方式十分高效,但是该方法存在泛化能力较差的问题当网络需要预测的目标物属于新目标或者网络的结构发生变化时,网络的性能会大幅度下降。

2.2.2 Free Anchor/ATSS

Free Anchor/ATSS 方法为了解决手工设定分配规则的问题,采用了动态匹配策略(Loss aware),使用每个样本对目标做一个预测,然后评判该预测的结果和真实结果之间的差距。Loss的结果越小时,预测的质量会越高 ,以此来判断样本是否为正样本。该方法的好处主要有可以根据网络的分配进行自适应调整;同时,当检测不同目标时也具备一定的自适应能力。

2.2.3 PAA/AutoAsign

Free Anchor/ATSS的基础上,又出现了更加高效的自适应动态匹配方法,如PAA/AutoAsign策略,这类方法的标签匹配全部由网络决定,不再需要手工设定参数工序。

2.2.4 IQDet/OTA

PAA/AutoAsign之后,还出现了 IQDet/OTA,对 label assignment做出了进一步的完善。PAA/AutoAsign及之前的匹配方法是针对单一目标的,但是当多个目标之间的重叠部分较多时,预测框会出现在两个目标的中间区域或者歧义区域,这时候需要全局的动态匹配,所以出现了OTA,OTA在全局的角度上规划目标的归属

三、 YOLOX介绍

3.1 YOLOX 核心部件介绍

YOLOX 的目标是在 YOLO系列 的基础上吸收近年来目标检测学术界的最新成果,同时继承YOLO系列容易部署的特点。同时需要在避免过拟合COCO的基础上,适度调参,以及在参数设置公平的条件下和YOLO系列做对比。

YOLOX的设计路线主要为:以YOLOv3作为模型的原始框架( YOLOv3 网络中使用的算子更加简单,应用范围更加广),然后设计Decoupled Head、Data Aug、Anchor Free 以及 SimOTA 部件

3.1.1 Decoupled Head

原来的YOLO系列都采用了一个耦合在一起的检测头,同时进行分类、回归的检测任务。YOLOX在结构上采用了 Decoupled Head将特征平行分成两路卷积特征,同时为了降低参数量提前进行了降维处理,其好处在于:在检测的过程中 分类需要的特征 和 回归所需要的特征不同,所以在 Decoupled Head 中进行解耦处理后学习的过程会变得更加简单。(就是学得快,收敛快)

Decoupled Head 结构图中的左下角可以看到采用了Decoupled Head后,网络的收敛速度在训练早期要明显快于 YOLO head 。

3.1.2 Data Aug

在 Data Aug 中,原来版本将先选择一张图然后再随机选择三张图再将其四张图拼接成一张,然后进行适量的放缩。在YOLOX中,作者使用了Mosaic+MixUP 的方法对图片进行增强比原版的 MixUP 效果更好。

3.1.3 Anchor Free & Label Assign

从原来 YOLO系列 的 anchor based 方法切换到 anchor free 的操作是比较简单的,但正如刚刚讲到的,anchor free 的方法对于 label assign 的策略选取就有很大的空间。我们根据自己的经验和积累,最终在 OTA方法 的基础上进行了简化,采用了SimOTA的标签分配策略。

SimOTA

SimOTA的流程如下:

  • (1) 确定正样本候选区域(使用中心先验)在空间尺度上,先选定每一个中心的区域作为候选区域);

  • (2) 计算每个样本对每个GT的 Reg+Cls loss(loss aware),计算候选区域的样本和GT之间的loss,作为loss aware的计算过程,得到 Reg+Cls loss的结果;

  • (3) 使用每个 GT 的预测样本确定它需要分配到的正样本数(Dynamic_k)中的 k 值等于多少,其中操作为:获取于当前GT的iou前10的样本;将这top10的样本的iou求和取整,为当前GT的 dynamic_k,dynamic_k,最小保证为1。此外,作者发现iou取前10个数字对结果影响较小,并且在5-15之间取值,结果的影响差距比较小。

  • (4) 舍去全局优化求解过程,只为每个 GT 取loss最小的前 dynamic_k 个样本作为正样本;

  • (5) 人工去掉同一个样本被分配到多个 GT 的正样本的情况(全局信息)。

SimOTA 与 OTA 相比在第四步和第五步做了简化,因此比 OTA 的运算速度更快,训练时间更短,不需要额外的优化参数步骤,同时保证了精度在绝大多数数据集下几乎没有影响。

3.2 YOLOX实验结果

在实验部分,YOLOX与YOLO系列在参数公平的条件下进行了对比,实验结果如图所示。可以发现:

1)YOLOX-L 和当前YOLO系列最先进的 YOLOv5-L 相比,二者参数量大概相当的条件下,YOLOX-L 在COCO上取得50.0%AP(比YOLOv5-L高出1.8%的AP),且YOLOX-L在单张Tesla V100上能达到68.9FPS。同时,YOLOX-TinyYOLOX-Nano对比,YOLOX在参数量很小的条件下(只有0.91M参数量和1.08G FLOPs)比对应的YOLOv4-TinyNanoDet3分别高出10% AP和1.8% AP。

此外,YOLOX还在 2021 Streaming Pereception Challenge 的比赛中,取得了良好的成绩。

3.3 YOLOX使用建议

用户在使用YOLOX模型时,应该注意:

  • (1)需要针对自己的数据集,选取合适的模型;

  • (2)需要加载COCO预训练模型;

  • (3)训练优化参数时,可以先用默认设定跑一次,看情况优先调整 lr 和 max epoch ;

  • (4)调整Aug的参数时:小模型要弱化Aug的强度,大模型可以继续加强Aug。

3.4 YOLOX开源与部署

最后,作者介绍了 YOLOX 的代码目前已经支持MegEngine、TensorRT、ONNX、OpenVino和ncnn的部署,其中以MegEngine表现最好,FP32的推理速度相比TensorRT、ncnn可以达到平均快7%-8%的优异表现。

MegEngine版:https://github.com/MegEngine/YOLOX
Pytorch版:https://github.com/Megvii-BaseDetection/YOLOX

参考:

https://blog.csdn.net/Megvii_tech/article/details/120030518

标签:YOLO,样本,笔记,目标,YOLOX,anchor,Anchor
From: https://www.cnblogs.com/odesey/p/16787435.html

相关文章

  • 《CUDA C 编程指南》学习笔记
    CUDA是什么?  CUDA(ComputeUnifiedDeviceArchitecture),是显卡厂商NVIDIA推出的运算平台。是一种通用并行计算架构,该架构使GPU能够解决复杂的计算问题。说白了就是我......
  • 开工大吉 | 一图读懂《自动化工控工程师笔记本电脑使用现状》
    1关注到在《知乎》上每隔一段时间都会出现一个关于“自动化及相关专业笔记本电脑选择的问题”。为此我们调动圈内资源,发起了一次《自动化工控工程师笔记本电脑使用现状》的......
  • 【笔记】最大公约数的一些性质
    裴蜀定理\[\foralla,b\in\mathbb{Z},\existsx,y\in\mathbb{Z},ax+by=\gcd(a,b)\]证明对于\(a_1=a_2=\cdots=a_n=0\),可以构造\(x_1=x_2=\cd......
  • docker容器整理笔记
    2022-10-091、docker学习1)性能更高,没有模拟层那个环节2)创建速度快只需要几秒钟,虚拟机创建至少好几分钟3)只能基于系统之上创建相同的容器系统2、很多软件安装在同一个系统......
  • AlexNet-文献阅读笔记
    论文介绍ImageNetClassificationwithDeepConvolutionalNeuralNetworks-AlexKrizhevsky,IlyaSutskever,andGeoffreyE.Hinton该论文是ImageNetLarge-Scale......
  • Python 学习笔记
    代码编写过程中的需要注意事项1.PEP是PythonEnhancementProposal的缩写,通常翻译为“Python增强提案”2.类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写,类......
  • k8s笔记2(Harbor)
    1、安装官方文档通过Helm部署Harbor(​​Harbordocs|DeployingHarborwithHighAvailabilityviaHelm(goharbor.io)​​)----->nodePort方式暴露服务;----->按提示填写c......
  • 221013初学C语言笔记
    把Test()强制类型转换成int(*)() 函数指针,再解引用而Test()函数本身就是int型而Test函数名是一个指针。......
  • [学习笔记]拉格朗日插值
    对于拉格朗日插值的了解始于知乎上的数列问题:问:\(1,3,5,7\)的下一项是什么啊?答:根据拉格朗日插值公式,可以显然地构造函数\[\largef(x)=\dfrac{18111}{2}x^4-90555x^3+......
  • SQL封装库学习笔记1.0
    自用学习写的封装库使用方法:Nuget中搜索HNGYSql1.查询数据方法publicstringCommandSelect(stringconnectionString,stringcommandString)connectionString:所连......