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

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

视频回放链接:https://event.baai.ac.cn/activities/158

主讲人简介

刘松涛,旷视研究院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开源与部署

01

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,解决梯度消失或者梯度爆炸的问题。

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

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

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

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

02

YOLO系列关键技术发展

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

2.1 从Anchor based到Anchor free

 

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

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

Anchor free的优势:

(1)降低了手工设定Anchor的调参压力;

(2)模型后处理更加简单高效。

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/CenterNet,FCOS设定中心点附近的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在全局的角度上规划目标的归属。

03

 YOLOX介绍

3.1  YOLOX核心部件介绍

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

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

3.1.1 Decoupled Head

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的标签分配策略。

3.1.4 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的danamic_k,danamic_k,最小保证为1。此外,作者发现iou取前10个数字对结果影响较小,并且在5-15之间取值,结果的影响差距比较小。

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

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

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

3.2 YOLOX实验结果

 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-Tiny和YOLOX-Nano对比,YOLOX在参数量很小的条件下(只有0.91M参数量和1.08G FLOPs)比对应的YOLOv4-Tiny和NanoDet3分别高出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


欢迎加入智源社区「计算机视觉」交流群

(更多活动信息将在交流群中同步)

YOLOX:高性能目标检测的最新实践 | 报告详解相关推荐

  1. 青源LIVE第22期|旷视刘松涛:YOLOX,高性能目标检测的最新实践

    在目标检测领域中,YOLO系列以其一贯以来的高速度.高精度和算子简单.易部署的特性,在工业界中得到广泛的好评和应用. 近两年来,学术界在Anchor Free和样本匹配(Label Assignmen ...

  2. 目标检测特殊层:PSROIPooling详解

    1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...

  3. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  4. 深度学习之目标检测(十一)--DETR详解

    深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...

  5. onestage方法_目标检测——One-stage和Two-stage的详解

    目标检测--One-stage和Two-stage的详解 发布时间:2019-01-15 14:16, 浏览次数:2784 , 标签: One stage Two 二.Two-stage类别的目标检测 ...

  6. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

  7. 【目标检测】Fast RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51036677 Girshick, Ross. "Fast r-cnn.&q ...

  8. 目标检测 /yolo算法原理的详解

    前言 谈到计算机视觉时,我们都会联想到图像分类,图像分类是计算机视觉最基本的任务之一,在图像分类的基础上,我们还有更复杂的任务,比如目标检测,物体定位,图像分割等,本文主要讲目标检测,目标检测是分类与 ...

  9. Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解

    Torchvision更新到0.3.0后支持了更多的功能,其中新增模块detection中实现了整个faster-rcnn的功能.本博客主要讲述如何通过torchvision和pytorch使用fas ...

最新文章

  1. Efficient local alignment discovery amongst noisy long reads
  2. 权威报告丨2018-2019 新型互联网生态研究报告摘要
  3. rz sz命令_5分钟学linux命令之split
  4. 暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
  5. 用Tableau画3D模型之四(放弃篇)
  6. Oracel 修改约束命令
  7. USTC English Club Note20171023(2)
  8. 扫描文件夹_按下苹果手机这个键,立马变身成为扫描仪,你不会还不知道吧?...
  9. Android之解决PC浏览器上传表单文件到手机服务器read数据错误导致有时候下载到手机的文件打开文字错乱问题
  10. cocos2dx 实现简单的文件上传到php服务器的demo
  11. 2018-06-13 pymssql 访问 SQL Server 2017 或 pyodbc 访问支持 ODBC 的数据库
  12. SVN源码泄露漏洞总结
  13. 安徽计算机技术学院蚌埠,安徽蚌埠技师学院2021年招生简章
  14. arcgis离线地图Java_ArcGIS API For Android离线地图的实现
  15. linux下的mysql调优_MySQL调优三步曲(慢查询、explain profile)
  16. 目前最火的Java主流技术栈及开发工具
  17. 实现button按钮的内容为图片
  18. python常用写法
  19. 理解 word2vec
  20. python文件的打开模式有几种_以下选项中,不是Python打开文件模式的是( )_学小易找答案...

热门文章

  1. 14、Kubernetes持久化存储
  2. html多列显示,html – CSS3多列列表
  3. java 正则 反向引用_正则之反向引用
  4. tomcat 连接oracle重连,JSP+Tomcat连接Oracle数据库
  5. 损失函数的意义和作用_哈佛CASTER | 基于化学子结构表征预测药物相互作用
  6. PTA 基础程序编程集 7-2 然后是几点 C语言
  7. 打印正方形和各种三角形
  8. phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句
  9. sql增删改查_增删改查!sql2pandas方法手册
  10. ant Table td 溢出隐藏(省略号)