YOLOX 学习笔记

news/2024/5/18 15:04:56/文章来源:https://blog.csdn.net/hymn1993/article/details/127339291

笔记来源: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 预测时需要平移边框的过程。

19年后,开始 Anchor free 的优势:

  • (1)降低了手工设定Anchor的调参压力;预定义的 Anchor 的大小和长宽比跟数据分布高度相关,设定不好否则会影响性能,实际中需要调优 anchor 的设定。Anchor free 不需要设定这些 anchor box,网络可以学习到从一个点出发预测该目标,所以不需要调参。
  • (2)模型后处理更加简单高效。两个方面:1:一个 anchor 框 只代表一种分布,所以一个位置上往往有多个 anchor 框去预测不同长宽比、大小的目标。anchor free 只需要预测一个 weight, 输出的样本数量就会成倍的减少,后处理上会更加高效。2:decode 时候 相对简单。

2.2 label assignment 发展

image

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

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

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

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

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

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

2.2.1 FCOS/CenterNet

image

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

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

2.2.2 Free Anchor/ATSS

image

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

2.2.3 PAA/AutoAsign

image

Free Anchor/ATSS的基础上,又出现了更加高效的自适应动态匹配方法,如PAA/AutoAsign策略,之前样本应该分配多少个,应该按什么阈值分,还是需要人为规则。而这类方法的标签匹配全部由网络决定,不再需要手工设定参数

2.2.4 IQDet/OTA

image

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

这里所谓的中心先验:就是真实框的中心区域作为正样本。

所谓的 Loss aware 的 动态匹配策略:就是根据 预测的框和真实框的 loss 来动态的分配正负样本。

三、 YOLOX介绍

image

3.1 YOLOX 核心部件介绍

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

image

YOLOX 的设计路线主要为:以 YOLOv3 作为模型的 baseline( YOLOv3 网络中使用的算子更加简单,应用范围更加广)。YOLOv4、v5 在 anchor-based 方法上做了大量优化,这些优化不知道对 anchor-free 是否有效不知道。

YOLOv3 U 版优化已经很好,YOLOX 设计 Decoupled Head、Data Aug(用的v5的)、Anchor Free 以及 SimOTA 部件

3.1.1 Decoupled Head

image

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

Decoupled Head 结构图中的左下角可以看到采用了Decoupled Head后,网络的收敛速度在训练早期要明显快于 YOLO head 。性能有一点提升,也可能是加的两层 conv 导致的。

右下角,普通的 YOLO 性能有一点提升,也可能是加的两层 conv 导致的。End2End YOLO(不需要做NMS,输出就是检测框),解耦 head 掉的更少,说明很合理。加了 1ms 时间。

3.1.2 Data Aug

image

在 Data Aug 中,masic 将先选择一张图然后再随机选择三张图再将其四张图拼接成一张,然后进行 scale 适量的放缩。Mixup 将两张图覆盖到一起。

谷歌 copy-past 论文中,将目标按分割图抠出来,然后粘贴到图像中,会对目标进行一定的缩放。YOLOX 中的 Mixup 相对于原始的 Mixup 也带 scale 缩放,相对原版 Mixup 更强。

YOLOX中,在训练的最后 15 epoch 会关闭 masic+Mixup,带来性能的提升。原因:增强后的图片和真实中的不一样,关闭后在自然场景下让模型收敛。

3.1.3 Anchor Free & Label Assign

image

从原来 YOLO系列 的 anchor based 方法切换到 anchor free 的操作是比较简单的(把 anchor 去掉,让预测从 anchor point 出发做直接预测)。

但是, anchor free 的方法的性能 对于 label assign 的策略选取非常相关。

  1. 中心先验:选择目标中心区域当正样本
  2. 动态匹配:根据 loss 动态分配正负样本,loss 越小,说明这个样本对于目标预测的效果更好,应该是正样本。
  3. 不同目标设定不同数量的正样本。不同类的目标可能需要的正样本数目不一样,比如蚂蚁很小,可能需要的正样本就少。这也是动态的。
  4. 处理歧义的样本,全局信息。

我们根据自己的经验和积累,最终在 OTA 方法(CVPR 2021) 的基础上(训练速度会变慢)进行了简化,提出了 SimOTA 的标签分配策略。

SimOTA

image

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 前三步 一样,第 4,5 步做了简化,没用做全局的优化求解。因此比 OTA 的运算速度更快,训练时间更短,不需要额外的优化参数步骤,同时保证了精度在绝大多数数据集(比如COCO 这种遮挡不严重的)下和 OTA 区别不大。

3.2 YOLOX实验结果

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

image

image

  • 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。

image

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

3.3 YOLOX使用建议

image

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

  • (1)需要针对自己的数据集,选取合适的模型;
  • (2)需要加载COCO预训练模型;
  • (3)训练优化参数时,可以先用默认设定跑一次,看情况优先调整 lr 和 max epoch;
  • (4)调整Aug的参数时:小模型要 弱化Aug的强度,大模型可以继续 加强Aug

3.4 YOLOX开源与部署

image

最后,作者介绍了 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_23969.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3. HDFS分布式文件系统

3.1 HDFS简介 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布…

CloudlaC是什么?

目录1. CloudIaC的简介2. 部署安装2.1 下载并解压安装包2.2 安装并启动Docker2.3 安装并启动Mysql2.4 安装并启动 Consul2.5 编辑配置文件2.6 初始化MySQL2.7 安装iaC服务2.8 启动 IaC 服务2.9 拉取 ct-worker 镜像2.10 下载前端部署包并解压2.11 安装nginx并配置2.12 访问web页…

【笔试刷题训练】day_04

选择题 C/C中各种进制的表示方法 二进制:在数字的末尾加b,如101010b 八进制:在数字前面加数字0,如0123 十进制:数字本身,如123 十六进制:数字前面加0x 或者 数字后面加h,如0x123、12…

字节跳动C++云原生二面(65min)

字节跳动C云原生二面(65min) 面试问题 HTTP1.0 、1.1和2.0 的区别和差异是什么 《HTTP1.0和1.1的区别》HTTP1.1 默认开启长连接(keep-alive) 而HTTP1.0需要添加参数,在一定程度上减少了建立和关闭连接的消耗和延迟HT…

AntDesign-Vue Table 查询与分页

前言 之前的增删改查小 Demo 已经快要进行到最后一步了,这节的任务是将请求数据的方式改为 分页,并且增加 分页条件查询 的功能。 页面布局 <a-table:data-source="dataSource":columns="columns":pagination="pagination" > <!-- ↑…

02 docker安装

这里写目录标题CenterOS安装使用远程镜像仓库安装设置yum远程仓库第二步&#xff1a;安装docker安装第三步&#xff1a;docker镜像加速器debian/Ubuntu安装docker官网&#xff1a;https://www.docker.com/ docker镜像库&#xff1a;https://hub.docker.com/ Docker CE&#xf…

truffle安装问题-无法加载文件

在powershell 下输入以下命令 set-executionpolicy remotesigned问题解决搜索 复制

【C语言】文件版本通讯录

文章目录文件版本通讯录一、test.c&#xff08;通讯录主干&#xff09;1.通讯录菜单的实现2.创建通讯录&#xff0c;初始化通讯录3.通讯录功能的调用二、contact.c(函数的实现)1.通讯录初始化2.查看联系人是否存在函数实现3.单个修改联系人各项的信息函数实现4.修改联系人信息目…

【PyTorch深度学习项目实战100例】—— 基于Transformer实现Twitter文本隐喻二分类 | 第43例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

[Vue] TodoList 案例

前言 系列文章目录&#xff1a; [Vue]目录 老师的课件笔记&#xff0c;不含视频 https://www.aliyundrive.com/s/B8sDe5u56BU 笔记在线版&#xff1a; https://note.youdao.com/s/5vP46EPC 视频&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 文章目录前言1. 组件…

《uni-app》一个非canvas的飞机对战小游戏实现-敌机模型实现

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

行业大洗牌,软件测试饱和了?到底怎样才能走出职场困境......

人生三大emo瞬间&#xff1a;工作不顺&#xff0c;薪资不涨&#xff0c;求职被拒。 都说成年人的世界里没有容易二字&#xff0c;这句话在职场里体现地淋漓尽致&#xff1a; 工作5年&#xff0c;还没来得及升职&#xff0c;薪资被倒挂&#xff0c;岗位被优化&#xff1b;晚上…

无代码 AI 概览(Levity)

介绍 在构建我们自己的平台时&#xff0c;我们一直密切关注无代码 AI 领域。 我们意识到非技术人员构建定制的人工智能解决方案和人工智能驱动的流程自动化是多么困难。 虽然无代码市场作为一个整体正在成熟&#xff08;Dreamweaver 和 MS Frontpage&#xff0c;最早的 WYSIWYG…

开源在线客服系统源码(支持PC/H5/公众号/小程序)基于golang的网页在线客服系统

近年来市面上出现了越来越多的在线客服系统,还不断有新的在线客服企业加入,这让刚接触在线客服系统的人挑得眼花缭乱,那到底应该怎么选择一个适合企业使用的在线客服系统呢 我先给大家介绍下在线客服发展的历史,然后介绍下客服系统都有哪些功能,最后我们根据各类条件来筛选…

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

24. 两两交换链表中的节点 本题是一道模拟过程的题目。搞清楚两两交换的步骤之后,写出对应的代码也就不是难题了。不过在学习题解的过程中发现,两两交换的步骤也有很多种实现方式。自己在做题目的时候使用的思路如下:进行两两交换之前,设置三个指针,分别指向dummy,head和…

记录一下java生产环境CPU占用过高实例

背景&#xff1a;今天还是像往常一样下班后坐公交车回家&#xff0c;突然工作微信群里发来一个截图&#xff0c;我点开一看是我之前上线的服务占用CPU过高了导致程序直接卡死。记录分享一下我的解决思路希望可以帮到你们。 目录 1. top【先查看监控里每个逻辑cpu情况】 2. jm…

python题库刷题训练软件

未来教育 全国计算机等级考试 (qq.com)https://mp.weixin.qq.com/s?__bizMzkyNjQwODc2MA&mid2247483676&idx1&sn96daf350e5cb0542bbab621cbc8434b5&chksmc236884bf541015d868736e488791c4c90c06eb04339fb3923f02fc36fc5732b248f176c9bcd#rd 1、下列叙述中正确…

Linux/Ubuntu高级命令(二)

一、获取管理员权限相关命令 sudo命令 sudo&#xff1a;以管理员权限执行某个命令可以在命令前加上sudo&#xff0c;用于单次临时操作sudo -s&#xff1a;切换到root用户&#xff0c;获取管理员权限&#xff0c;用于大量操作whoami&#xff1a;查看当前用户exit&#xff1a;退…

【PostgreSQL】Linux离线安装psql

文章目录一、前言二、查询postgre版本三、查询服务器信息四、下载对应的安装包五、解压与设置环境变量六、验证一、前言 psql命令行交互式客户端工具。PostgreSQL、Greenplum都可以使用psql命令导入数据。 二、查询postgre版本 在客户端执行SQL查询版本信息 select version…

德州仪器的繁荣周期仍在继续

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 影响德州仪器的半导体周期 从表面上看&#xff0c;半导体行业是一个很好的行业&#xff0c;随着技术的进步&#xff0c;将需要越来越多的半导体和芯片。此外&#xff0c;德州仪器&#xff08;TXN&#xff09;是一家稳定的公…