论文主要信息

文章概要

  • 集成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%

SOTA

  • 注:因为软硬件差异,上表(表6)中inference speed通常是uncontrolled
  • 补充:
    • Scale-YOLOv4、YOLOv5-P6等模型性能更高,但size更大
    • Transformer based detector将accuracy-SOTA推高到了∼60 AP

参考链接

本笔记的参考链接,都很不错,特别是第2篇,建议阅读!

最近被旷视的YOLOX刷屏了!的更多相关文章

  1. 旷视研究院Detection组负责人

    http://www.skicyyu.org/ https://zhuanlan.zhihu.com/p/61910297 俞刚,旷视研究院Detection组负责人.2014年博士毕业于新加坡南洋理 ...

  2. 旷视科技 -- Face++ 世界最大的人脸识别技术平台

    旷视科技 -- Face++ 世界最大的人脸识别技术平台: https://www.megvii.com/

  3. 旷视等Oral论文提出GeoNet:基于测地距离的点云分析深度网络

    基于网格曲面的几何拓扑信息可以为物体语义分析和几何建模提供较强的线索,但是,如此重要的连接性信息在点云中是缺失的.为此,旷视西雅图研究院首次提出一种全新的深度学习网络,称之为 GeoNet,可建模点云 ...

  4. ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕,旷视科技有多篇论文被此 ...

  5. ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...

  6. 入职9月,旷视孙剑106分钟讲述CV创业科研的5大区别

    雷锋网按:本文为旷视科技首席科学家孙剑日前在 CCF-ADL上做的题为<如何在大公司和创业公司做好计算机视觉研究>的分享,主要介绍了近期计算机视觉的发展现状,ResNet基本原理和设计,旷 ...

  7. 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...

    初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...

  8. 旷视MegEngine核心技术升级

    旷视MegEngine核心技术升级 7 月 11 日,旷视研究院在 2020 WAIC · 开发者日「深度学习框架与技术生态论坛」上围绕 6 月底发布的天元深度学习框架(MegEngine)Beta ...

  9. 旷视MegEngine数据加载与处理

    旷视MegEngine数据加载与处理 在网络训练与测试中,数据的加载和预处理往往会耗费大量的精力. MegEngine 提供了一系列接口来规范化这些处理工作. 利用 Dataset 封装一个数据集 数 ...

随机推荐

  1. 我的N年软件测试感悟

    1.前言 大家好!我是Meng前段时间,很荣幸被一合作伙伴邀请发表一篇文章,主题为"这些年,我所从事软件测试的一些感悟",正好趁着这个机会,我也好好总结一下. 2.测试培训 对于软 ...

  2. mybatis中必须使用@param注解的四种情况

    一.方法有多个参数 例如: 接口方法: @Mapper public interface UserMapper { Integer insert(@Param("username" ...

  3. 【C++】秒级时间戳,毫秒级时间戳

    时间戳,秒级 测试代码: #include <iostream> #include <time.h> #include <windows.h> using name ...

  4. 点分治&cdq分治 总结

    游荡的孤高灵魂不需要羁绊之处. 洛谷题单 点分治 前置芝士 树的重心 树分治 例题略解 P3806 [模板]点分治1 板子题,先暴力找到整棵树的重心,然后先求出重心到各点的距离,进而算出他所在树的各个 ...

  5. csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」

    题目是古埃及神话??? A. 天空龙 傻逼模拟,看来没有滑天下之大稽QAQ,也没有打错快读(大雾...) B. 巨神兵 难度爆增,一脸懵比..... 60分状压: 因为是求有向图,关于有向图好像拓扑用 ...

  6. 关于kubernetes的十七个实验(一)

    实验综述 Kubernetes用来管理云平台上的容器化应用,这里从 https://www.katacoda.com/courses/kubernetes 学习Kubernetes的使用,对Kuber ...

  7. 时光卷轴,Microsoft大事记

    Our mission is to empower every person and every organization on the planet to achieve more. 2021年6月 ...

  8. 温故知新Docker概念及Docker Desktop For Windows v3.1.0安装

    Docker 简介 什么是Docker? Docker是一个开放源代码软件项目,项目主要代码在2013年开源于GitHub.它是云服务技术上的一次创新,让应用程序布署在软件容器下的工作可以自动化进行, ...

  9. 16、lamp的搭建

    搭建web02服务器作为web01的负载均衡服务器: httpd和nginx配置比较相似,也有虚拟主机,一个http服务需要配置多个站点,基于ip(基本用不到).端口(内部网站).域名(外部网站): ...

  10. 【重学Java】可变参数

    可变参数 可变参数[应用] 可变参数介绍 可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了 方法的参数类型已经确定,个数不确定,我们可以使用可变参数 可变参数定义格式 修饰符 ...