首页 > 其他分享 >Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)

时间:2022-10-06 16:00:24浏览次数:64  
标签:Yolo 匹配 框架 检测 YOLO YOLOX 样本 源代码 Anchor

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_目标检测

计算机视觉研究院专栏

作者:Edison_G

YOLOX在YOLO系列的基础上做了许多有意思的工作,其主要贡献在于:在YOLOV3的基础上,引入了“Decoupled Head”,“Data Augmentation”,“Anchor Free” 和“SimOTA样本匹配”的方法,构建了一种anchor-free的端到端目标检测框架,并且达到了顶级的检测水平。


Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_02

公众号ID|ComputerVisionGzq





Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_目标检测_03




1

 前言


YOLOX在YOLO系列的基础上做了许多有意思的工作,其主要贡献在于:在YOLOV3的基础上,引入了“Decoupled Head”,“Data Augmentation”,“Anchor Free” 和“SimOTA样本匹配”的方法,构建了一种anchor-free的端到端目标检测框架,并且达到了顶级的检测水平。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_04

以在大量模型中获得最先进的结果:对于YOLONano仅0.91M参数和1.08G FLOPs,研究者在COCO上获得25.3%AP,超过NanoDet 1.8%AP;对于业界应用最广泛的检测器之一YOLOv3,在COCO上将其提升至47.3% AP,比当前最佳实践高3.0% AP;对于参数量与YOLOv4-CSP、YOLOv5-L大致相同的YOLOX-L,研究者在Tesla V100上以68.9FPS的速度在COCO上实现了50.0% AP,比YOLOv5-L高出1.8% AP。此外,研究者使用单个YOLOX-L模型赢得了Streaming Perception Challenge(CVPR 2021自动驾驶研讨会)的第一名。


2

 背景




我们是在去年底萌生优化YOLO系列的想法的,那时候我们组刚完成了AutoAssign,LLA,DeFCN,IQDet,OTA等工作,在基础检测尤其是Anchor Free和Label Assignment方向有一些自己的理解。而那时候的YOLO系列还停留在Anchor Based阶段,样本匹配也采用的是基于几何先验的一对一或一对N的方案上。而随后出现的各项工作也基本是在往大输入分辨率和大模型的方向走。基于这样的大背景,我们决定启动YOLOX项目,想知道学术研究与工程落地到底能碰出什么样的火花。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_05



——摘自于《链接:https://www.zhihu.com/question/473350307/answer/2021031747》

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_计算机视觉_06

用于YOLOX和其他最先进目标检测器的精确模型(顶部)和移动设备上lite模型的尺寸精度曲线(底部)的速度-精度权衡。

YOLOX的设计,在大方向上主要遵循以下几个原则:

  • 所有组件全平台可部署
  • 避免过拟合 COCO,在保持超参规整的前提下,适度调参
  • 不做或少做稳定涨 点但缺乏新意的工作(更大模型,更多的数据)

所以大家可以看到,首发的YOLOX没有deformable conv,没有用额外数据做pretrain,没有momentum=0.937。回到YOLOX设计的具体细节上,认为与之前YOLO最大的区别在于Decoupled Head,Data Augmentation,Anchor Free和样本匹配这几个地方。下面将从这几个方面展开聊。


3

 YOLOX-新框架




Decoupled Head




Decoupled Head是学术领域一阶段网络一直以来的标准配置(RetinaNet,FCOS等)。相比于它朴素的实现方法,“解耦头”这个词显得有些高大上。研究者一开始并没有计划对检测头进行解耦,而是在将YOLOX推进到“端到端(无需NMS)”时发现,不论调整损失权重还是控制梯度回传,End2end的YOLOX始终比标准的YOLOX低4~5个点( 如下表 ),这与在DeFCN里获得的认知不符。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_计算机视觉_07

偶然间研究者把原始的YOLO Head换成decoupled head,发现这里的差距又显著缩小了,这样的现象说明当前YOLO Head的表达能力可能有所欠缺。于是将decoupled hea 应用到了非End2End的YOLO上,结果就如下图的所示:不仅在峰值的性能有所提升,收敛速度也明显加快。结合之前End2end的实验,这两个现象充分说明YOLO系列一直以来使用的检测头可能是不合理的。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_08

实验表明,解耦合检测头能加快模型收敛速度、提高检测精度,同时也会带来一点额外的参数量和计算成本:

  • 用一个解耦的头部代替YOLO的头部,大大提高了收敛速度,如上图所示。
  • 分离的头部对于End-to-End的YOLO是必不可少的。从上表可以看出:耦合头的End-to-End YOLO检测性能AP降低了4.2%,而解耦头的YOLO降幅仅减小到0.8%AP。因此,用一个如下图所示的轻型解耦头替换了YOLO检测头。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_09

  • 将检测头解耦会增加运算的复杂度,但经过权衡速度和性能上的得失,研究者使用1个1x1 的卷积先降维,并在分类和回归分支里各使用了2个3x3卷积,最终调整到仅仅增加一点点参数,YOLOX在s,m,l,x模型速度上的轻微下降也全源自于此。在下表中展示了V100上Batch=1的推理时间,Decoupled Head带来了1.1%的性能提升。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_10

表面上看,Decoupled Head提升了YOLOX的性能和收敛速度,但更深层次的,它为YOLO与检测下游任务的一体化带来可能:例如,YOLOX+Yolact/CondInst/SOLO,可实现端侧的实例分割;YOLOX + 34层输出,实现端侧人体的 17 个关键点检测。

以往或许已经有一些这方面的工作,但这些领域的SOTA依然拥有他们特殊的结构设计,使得该领域无法直接享用到YOLO系列发展的成果。如今一个打开了枷锁的检测头,我们认为会让YOLO与检测的下游任务更深层次的结合,为检测与下游任务的端到端一体化带来一些变化。




Data Augmentation




Data Augmentation里面需要强调的一点是:要在训练结束前的15个epoch关掉Mosaic 和Mixup ,这对于YOLOX非常重要。可以想象,Mosaic+Mixup生成的训练图片,远远脱离自然图片的真实分布,并且Mosaic大量的crop操作会带来很多不准确的标注框,见下图:

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_11

当模型容量足够大的时候,相对于先验知识(各种 tricks,hand-crafted rules ),更多的后验(数据/数据增强)才会产生本质影响。通过使用 COCO 提供的 ground-truth mask 标注,作者在 YOLOX 上尝试了 Copypaste,下表表明,在 48.6mAP 的 YOLOX-Large 模型上,使用 Copypaste 带来0.8%的涨点。

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_计算机视觉_12

但是Copypaste的实现依赖于目标的mask标注,而mask标注在常规的检测业务上是稀缺的资源。而由于MixUp和Copypaste有着类似的贴图的行为,还不需要mask标注,因此作者在Mixup上进行了修改,实现了在原理上更接近Copypaste的Mixup数据增强方式。




Anchor Free




Anchor Free的好处是全方位的:

  • Anchor Based 检测器为了追求最优性能通常会需要对anchor box 进行聚类分析,这无形间增加了算法工程师的时间成本;
  • Anchor 增加了检测头的复杂度以及生成结果的数量,将大量检测结果从NPU搬运到CPU上对于某些边缘设备是无法容忍的。当然还有;
  • Anchor Free 的解码代码逻辑更简单,可读性更高。

至于为什么Anchor Free现在可以上YOLO ,并且性能不降反升,这与样本匹配有密不可分的联系。与Anchor Free比起来,样本匹配在业界似乎没有什么关注度。但是一个好的样本匹配算法可以天然缓解拥挤场景的检测问题( LLA、OTA里使用动态样本匹配可以在CrowdHuman上提升FCOS将近10个点),缓解极端长宽比的物体的检测效果差的问题,以及极端大小目标正样本不均衡的问题。甚至可能可以缓解旋转物体检测效果不好的问题,这些问题本质上都是样本匹配的问题。

  1. loss/quality/prediction aware :基于网络自身的预测来计算 anchor box 或者 anchor point 与 gt 的匹配关系,充分考虑到了不同结构/复杂度的模型可能会有不同行为,是一种真正的 dynamic 样本匹配。而 loss aware 后续也被发现对于 DeTR 和 DeFCN 这类端到端检测器至关重要。与之相对的,基于 IoU 阈值 /in Grid(YOLOv1)/in Box or Center(FCOS) 都属于依赖人为定义的几何先验做样本匹配,目前来看都属于次优方案。
  2. center prior : 考虑到感受野的问题,以及大部分场景下,目标的质心都与目标的几何中心有一定的联系,将正样本限定在目标中心的一定区域内做loss/quality aware样本匹配能很好地解决收敛不稳定的问题。
  3. 不同目标设定不同的正样本数量(dynamic k):我们不可能为同一场景下的西瓜和蚂蚁分配同样的正样本数,如果真是那样,那要么蚂蚁有很多低质量的正样本,要么西瓜仅仅只有一两个正样本。Dynamic k的关键在于如何确定k,有些方法通过其他方式间接实现了动态k,比如ATSS、PAA ,甚至RetinaNet ,同时,k的估计依然可以是prediction aware的,我们具体的做法是首先计算每个目标最接近的10个预测,然后把这个10个预测与GT的iou加起来求得最终的k,很简单有效,对10这个数字也不是很敏感,在5~15调整几乎没有影响。
  4. 全局信息:有些anchor box/point处于正样本之间的交界处、或者正负样本之间的交界处,这类anchor box/point的正负划分,甚至若为正,该是谁的正样本,都应充分考虑全局信息。

下期我们简单再说说YOLOX的部署支持及端到端!


4

 实验



Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_目标检测_13


在COCO数据集上的速度及精度比较

© THE END 

转载请联系本公众号获得授权

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_解耦_14


计算机视觉研究院学习群等你加入!


计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

Yolo的巅峰框架:高效更精确的目标检测框架(附源代码)_计算机视觉_15

扫码关注

计算机视觉研究院

公众号ID|ComputerVisionGzq

标签:Yolo,匹配,框架,检测,YOLO,YOLOX,样本,源代码,Anchor
From: https://blog.51cto.com/u_15726357/5733799

相关文章

  • 前端程序员学习 Golang gin 框架实战笔记之二分析 context
    上一节:前端程序员学习Golanggin框架实战笔记之一开始玩gin之前讲到了如何使用gin,这一节我们来分析和调试一下它的代码。New()第一行的gin.New(),其实还有一种......
  • Vue.js框架:自定义组件全局挂载,避免每个用到的页面需要重复导入问题
    一、打包组件可以建立一个打包工具类,将所有的需要全局挂载的自定义组件进行打包封装,避免main.js过于杂乱。importgbInputfrom'../components/gbInput/gbInput'/......
  • MaskRCNN-Benchmark框架训练自己的数据集
    文章目录​​一、数据集准备​​​​二、配置文件​​​​三、训练与测试​​​​3.1报错与解决​​FacebookAIResearch开源了FasterR-CNN和MaskR-CNN的PyTorch......
  • 全功能测试框架 - Carina
    Carina是一个基于Java的测试自动化框架,它将所有测试层结合在一起:移动应用程序(web、本机、混合)、web应用程序、REST服务和数据库。github:https://github.com/zebrunner/ca......
  • gRPC框架学习:4、proto文件编译
    gRPC框架学习:4、proto文件编译文章目录​​gRPC框架学习:4、proto文件编译​​​​1.前言​​​​2.编译器总的地址​​​​3.具体语言编译器地址​​1.前言通过前面的学......
  • A Unified Generative Framework for Aspect-Based Sentiment Analysis 基于方面的情
    摘要基于方面的情感分析(ABSA)旨在识别方面术语、相应的情感极性和观点术语。ABSA中有七个子任务。大多数研究只关注这些子任务的子集,这导致了各种复杂的ABSA模型,但很难在统......
  • Flask 框架:运用Echarts绘制图形
    echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Echarts绘图库同样可以与Flask结合,前台使用echart......
  • WPF-UI框架MahApps.Metro使用教程
    一,MahApps.Metro安装1,项目中引用“MahApps.Metro.dll”【失败】我是在网上下载了一个dll,不知道是不是版本问题,使用时一直报错2,在NuGet中安装最新版本的dll右击项目-->......
  • java框架——Spring(二)
    AOP简介AOP(AspectOrientedProgramming)面向切面编程,一种编程范式,指导开发者如何组织程序结构OOP(ObjectOrientedProgramming)面向对象编程作用:在不惊动原始设计的基......
  • (新人)关于我是如何使用Jeesite框架的
    第一步由于jeesite官网的源码包是在码云上的,所以咱们下载之前必须拥有自己的码云账号并且登录。第二步登录码云账号后,我们通过此链接https://jeesite.com/来到jeesite官......