旷视研究院 · 2021年09月01日

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

image.png

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

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

视频回放链接: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,解决梯度消失或者梯度爆炸的问题。

image.png

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

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

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

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

image.png

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)模型后处理更加简单高效。

image.png

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

image.png

最开始使用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核心部件介绍

image.png

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

image.png

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

3.1.1 Decoupled Head

image.png

Decoupled Head结构图

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

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

3.1.2 Data Aug

image.png
在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

image.png

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实验结果

image.png

image.pngYOLOX 检测结果图

在实验部分,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的比赛中,取得了良好的成绩。

image.png

3.3  YOLOX使用建议
image.png

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

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

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

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

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

3.4 YOLOX开源与部署

image.png

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


首发:智源社区
作者:马瑞军

专栏文章推荐

欢迎关注旷视研究院极术社区专栏,定期更新最新旷视研究院成果
加入旷视:career@megvii.com
推荐阅读
关注数
7707
内容数
164
专注旷视研究院学术论文解读推送,涵盖计算机视觉,文字识别等
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息