最近被旷视的YOLOX刷屏了!
论文主要信息
- 标题:YOLOX: Exceeding YOLO Series in 2021
- 作者:Zheng Ge,Songtao Liu,Feng Wang,Zeming Li,Jian Sun
- 机构:Megvii Technology
- 链接:https://arxiv.org/abs/2107.08430
- 代码:https://github.com/Megvii-BaseDetection/YOLOX
文章概要
- 集成decoupled head、SimOTA、anchor-free、NMS-free等strategy
- 比赛第1名:仅使用YOLOX-L,获得CVPR2021的Workshop on Autonomous Driving的第1名,详见原paper
- 部署代码:ONNX、TensorRT、NCNN和Openvino
背景
YOLOv5性能最优:48.2% AP on COCO at 13.7 ms
过去两年的major advance
方向 方法 anchor-free detectors FCOS、CenterNet、CornerNet advanced label assignment strategies Freeanchor、ATSS、PAA、Autoassign、IQDet、OTA end-to-end (NMS-free) detectors DETR、End-to-end object detection with fully convolutional network、PSS 问题:过去两年的major advance未被集成到YOLO系列,YOLOv4和v5仍然是anchor-based、训练时仍使用hand-crafted assigning rules
insight:对于anchor-based pipeline,YOLOv4和v5可能有点over-optimized
baseline:YOLOv3-SPP(Darknet53)
YOLOX-DarkNet53
实现细节
consistent settings:从baseline到final model的训练设置mostly一致
epoch:300个epoch,5个epoch的warm up
数据集:COCO train2017
优化器:SGD,momentum 0.9
weight decay:0.0005
学习率:lr×BatchSize/64(linear scaling),lr=0.01,cosine lr schedule
batch size:128 for 8-GPU
input size:448 to 832 with 32 strides
inference setting:FP16-precision,batch=1,single Tesla V100
YOLOv3 baseline
- baseline:YOLOv3-SPP
- 改动:添加EMA weights updating、cosine lr schedule、IoU loss、IoU-aware branch(这些trick和YOLOX带来的improvement是orthogonal的,因此把这些trick放在baseline中)
- 数据增强:使用RandomHorizontalFlip、ColorJitter、multi-scale,放弃RandomResizedCrop(因为它和mosaic augmentation有些重合)
- 性能:COCO val上AP达到38.5%,详见消融实验
笔者认为,在选baseline的时候,应该具备至少两点:性能还不错,用的trick还少。像常用的RetinaNet,基本就是随手造的一个普通模型,纯为focal loss服务的,几乎没加太多trick,这样的工作就很适合用来验证我们自己改进出来的东西是否好用。
有的时候trick用得太多,自己的东西加上去不但不涨点,还掉点。但要注意,这个时候不一定是你的东西有问题,很可能是和哪一个trick冲突了。
——引自《目标检测》-第24章-YOLO系列的又一集大成者:YOLOX! - 知乎 (zhihu.com)
这篇知乎文章不错,建议再次阅读。
Decoupled head
- 问题:在OD中,classification任务和regression任务之间存在conflict
实验
以下2个实验说明,coupled head会损害性能:
- 使用decoupled head替换coupled head会提高收敛速度,如下图(图3)所示
- decoupled head对end-to-end版本的YOLO很重要,如下表(表1)所示。如果使用coupled head,从YOLO转为End-to-end YOLO后AP下降4.2,而如果使用decoupled head则AP只下降0.8
思路
YOLO在FPN自顶向下路径上的3个level(P5、P4、P3,通道数分别为1024、512、256)上进行detection
- coupled head:通过卷积直接得到最终的1个输出,形状为
[H, W, n_anchor×(C+4+1) ]
,其中cls(预测是C个类别中的哪一个类)占用C个通道、reg(坐标)占用4个通道、obj(区分是前景背景)占用1个通道。 - decoupled head:先用1个1×1卷积层把通道数减少到256,然后用2个并行分支(每个分支包括2个3×3卷积层)分别进行regression和classification,并在regression分支上添加一个IoU分支。3个分支(cls、reg、IoU)输出的形状分别为
[H,W,C]
、[H,W,4]
、[H,W,1]
cls分支只计算正样本分类loss。简而言之cls用于分类但不用于划分正负样本,正负样本交给obj branch做了。另外使用SimOTA之后,FCOS样本匹配阶段的FPN分层就被取消了,匹配(包括分层)由SimOTA自动完成
————《目标检测》-第24章-YOLO系列的又一集大成者:YOLOX! - 知乎 (zhihu.com)一文中paper原作者的评论
story
我们一开始并没有计划对检测头进行解耦,而是在将 YOLOX 推进到“端到端( 无需NMS )”时发现,不论调整损失权重还是控制梯度回传,End2end 的 YOLOX 始终比标准的 YOLOX 低 4~5 个点( 如 Table1 ),这与我们在 DeFCN 里获得的认知不符。偶然间我们把原始的 YOLO Head 换成 decoupled head,发现这里的差距又显著缩小了,这样的现象说明当前 YOLO Head 的表达能力可能有所欠缺。于是我们将 decoupled head 应用到了非 End2End YOLO 上,结果就如 Fig.3 的所示:不仅在峰值的性能有所提升,收敛速度也明显加快。结合之前 End2end 的实验,这两个现象充分说明 YOLO 系列一直以来使用的检测头可能是不合理的。
————如何评价旷视开源的YOLOX,效果超过YOLOv5? - 知乎 (zhihu.com)中paper原作者的回答
Strong data augmentation
- 设置:使用Mosaic(ultralytics-YOLOv3提出)和MixUp,在最后15个epoch停止
- 发现:在使用strong data augmentation之后,作者发现ImageNet预训练不再有益,因此之后的model都是train from scratch。(如何理解“之后”一词?见表2,可知作者是一个个迭代增加模块或trick的)
- 实验:见消融实验
Anchor-free
- anchor机制的问题
- 聚类:在训练前需要通过聚类生成anchor,这些anchor是domain-specific and less generalized
- complexity:增加了detection head的complexity;每张image中prediction的数量也增加了,而在设备间(比如从NPU到CPU)移动大量prediction的耗时可能会是个瓶颈
- anchor-free的优点:减少了需要heuristic tuning和Anchor Clustering 、Grid Sensitive等trick的参数的数量,使得decoder的training和decoding相对更简单
- anchor-free YOLO:
- location:每个location只预测1个box并直接预测4个值(相对于网格左上角的2个offset、box的高度和宽度)
- 正样本:将每个object的center location作为正样本
- scale range:按照FCOS那样,预定义1个scale range,根据每个object的size将每个object分配到对应的FPN level
- 实验:见消融实验
multi positives
- 问题:对于每个object,如果只将其center location视为正样本,那就只有1个正样本而忽略了其它高质量的prediction。
- 潜力:对这些高质量prediction进行优化,可能带来beneficial gradient,这可能会缓解training过程中正/负采样的极端不平衡
- center sampling:如FSOS的center sampling,本文将每个object的center region(3×3)中的所有location作为正样本
- 实验:见消融实验
SimOTA
label assignment应满足的4点
- loss/quality aware
- center prior
- 每个GT的positive anchor的数量应该是动态的(简化为dynamic top-k)。注:“anchor”在anchor-free detector中指“anchor point”,在YOLO中指“grid”
- global view
OTA:
- 作者:该方法之前就由旷视提出
- 思路:OTA从global视角分析label assignment并将其formulate为1个Optimal Transport (OT)问题
- 效果:SOTA
Sinkhorn-Knopp:使用Sinkhorn-Knopp算法解决OT问题会增加25%的训练时长,这对于300个epoch来说非常expensive。因此将其简化为dynamic top-k策略,命名为SlimOTA
SlimOTA:
- pair-wise matching degree:首先计算pair-wise matching degree(通过每个prediction-GT pair的cost或quality来表征),SlimOTA中GT \(g_i\)和prediction \(p_j\)之间的cost \(c_{ij}\)如上所示
- 对于GT \(g_i\),在1个固定的center region中选择cost最小的top-k predictions作为positive sample。注:对于每个GT,k的值是不同的,详见OTA中的Dynamic k Estimation
- 最后,这些positive prediction对应的grid被指定为positives,其余grid被指定为negatives
实验:见消融实验
End-to-end(NMS-free) YOLO
- end-to-end:按照PSS,添加了2个额外的卷积层、one-to-one label assignment和stop gradient,这使得detector变成end-to-end
- optional module:这稍微降低了preformance和inference speed,因此并不将其纳入本文的final module,而是将其作为一个optional module
- 实验:见消融实验
消融实验
- decoupled head稍微增加了模型size
- 除了NMS-free,其它strategy都有效涨点并且没有成本/成本很小
性能对比
除了darknet53,YOLOX在其它不同size的backbone上同样实现了improvement
这张图中不同方法的软硬件差异是somewhat controlled
YOLOX-L
- backbone:采用YOLOv5的backbone以进行对比,包括modified CSPNet、SiLU activation、the PAN head
- scaling rule:按照YOLOv5的scale rule,得到YOLOX-S、YOLOX-M、YOLOX-L和YOLOX-X
- 性能:AP提高1%到3%,时间稍稍增加(因为decoupled head)
YOLOX-Tiny & YOLOX-Nano
- YOLOX-Tiny:
- 思路:通过shrink模型而得到(没说怎么shrink的)
- 性能:AP提高9%,而模型size差不多
- YOLOX-Nano:
- 思路:采用depth wise convolution
- 性能:模型size更小,但AP却高出1.8%
Model size V.S. Data augmentation
本文的mixup:mixup with scale jittering
- heavier:本文的mixup实现比原版heavier
- 思路:受Copypaste启发,本文在mixup两张图片之前会按随机比例抖动2个图像
- 效果:Copypaste需要instance mask annotation,而mixup不需要,但两者的AP差不多
- 作用:当没有instance mask annotation时,mixup with scale jittering可以作为Copypaste的替代品
不同size的模型适用的augmentation不同
- large model:适合增强augmentation
- YOLOX-L:应用MixUp可以将AP提高0.9%
- small model:适合减少或弱化augmentation
- YOLOX-Nano:弱化mosaic(scale range从[0.1, 2.0]到[0.5, 1.5])并移除mixup,AP提高1.3%
- large model:适合增强augmentation
SOTA
- 注:因为软硬件差异,上表(表6)中inference speed通常是uncontrolled
- 补充:
- Scale-YOLOv4、YOLOv5-P6等模型性能更高,但size更大
- Transformer based detector将accuracy-SOTA推高到了∼60 AP
参考链接
本笔记的参考链接,都很不错,特别是第2篇,建议阅读!
最近被旷视的YOLOX刷屏了!的更多相关文章
- 旷视研究院Detection组负责人
http://www.skicyyu.org/ https://zhuanlan.zhihu.com/p/61910297 俞刚,旷视研究院Detection组负责人.2014年博士毕业于新加坡南洋理 ...
- 旷视科技 -- Face++ 世界最大的人脸识别技术平台
旷视科技 -- Face++ 世界最大的人脸识别技术平台: https://www.megvii.com/
- 旷视等Oral论文提出GeoNet:基于测地距离的点云分析深度网络
基于网格曲面的几何拓扑信息可以为物体语义分析和几何建模提供较强的线索,但是,如此重要的连接性信息在点云中是缺失的.为此,旷视西雅图研究院首次提出一种全新的深度学习网络,称之为 GeoNet,可建模点云 ...
- ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正
全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕,旷视科技有多篇论文被此 ...
- ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解
全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...
- 入职9月,旷视孙剑106分钟讲述CV创业科研的5大区别
雷锋网按:本文为旷视科技首席科学家孙剑日前在 CCF-ADL上做的题为<如何在大公司和创业公司做好计算机视觉研究>的分享,主要介绍了近期计算机视觉的发展现状,ResNet基本原理和设计,旷 ...
- 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...
初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...
- 旷视MegEngine核心技术升级
旷视MegEngine核心技术升级 7 月 11 日,旷视研究院在 2020 WAIC · 开发者日「深度学习框架与技术生态论坛」上围绕 6 月底发布的天元深度学习框架(MegEngine)Beta ...
- 旷视MegEngine数据加载与处理
旷视MegEngine数据加载与处理 在网络训练与测试中,数据的加载和预处理往往会耗费大量的精力. MegEngine 提供了一系列接口来规范化这些处理工作. 利用 Dataset 封装一个数据集 数 ...
随机推荐
- 无网络的win10电脑之间实现相互共享文档
产生需求的原因: 之前做过在有网的情况下,两台win10的电脑怎么在不使用任何第三方软件的情况下实现两者之间的文件共享,但是在完成之后,我猛然间想到一种情况,那就是如果两台wiin10的电脑如果没有网 ...
- SpringBoot基础系列之自定义配置源使用姿势实例演示
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
- 692. 前K个高频单词
2021-05-20 LeetCode每日一题 链接:https://leetcode-cn.com/problems/top-k-frequent-words/ 标签:堆.字典序.哈希表 题目 给一 ...
- JAVA面向对象详细总结
面向对象概念 所有操作基于对象进行操作实现 面向对象的三大特征 封装.继承.多态 类:具有相同特征和行为物体的统称 在java中类的定义语法: [修饰符] class 类名{ 属性 ...
- 八、Nginx的TCP/UDP调度器
nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...
- centos 7 能ping通但是telnet 22 不通解决方法
试过关闭Linux防火墙,打开sshd服务,修改ens33为enth0.发现不好使. 经过不断的努力我发现,windows系统里面的VMware Network Adapter VMnet8设置的ip ...
- 循序渐进BootstrapVue,开发公司门户网站(3)--- 结合邮件发送,收集用户反馈信息
在我们公司门户网站里面,如果有需要,我们可以提供一个页面给用户反馈信息,以便获得宝贵的用户信息反馈或者一些产品咨询的记录,一般这个结合邮件发送到负责人的邮箱即可.本篇随笔结合后端发送邮件的操作,把相关 ...
- Redis的数据安全与性能保障
1.持久化选项 Redis提供了2种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里.另一种方法叫只追加文件(appen ...
- Redis的bitmap从基础到业务
1. 位与字节 1个字节(byte)等于8个位(bit).(计算机常识). 2. string与bitmap Redis里的bitmap是属于string这个数据类型里的.可以help进行查看bit相 ...
- 乘风破浪,下载安装体验Adobe XD流程,全新的引导和安装体验设计
简介 Adobe XD是一款适用于网站和应用程序等的快速且功能强大的UI/UX设计解决方案.可实现设计.线框.动画制作.原型创建.协作和共享等,功能一应俱全. https://www.adobe.co ...