YOLO v6:一个硬件友好的目标检测算法

这篇具有很好参考价值的文章主要介绍了YOLO v6:一个硬件友好的目标检测算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文来自公众号“AI大道理”

YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。

YOLOv6支持模型训练、推理及多平台部署等全链条的工业应用需求,并在网络结构、训练策略等算法层面进行了多项改进和优化,在 COCO 数据集上,YOLOv6 在精度和速度方面均超越其他同体量算法。

YOLOv6是如何改进的呢?


 

YOLO v6:一个硬件友好的目标检测算法

一、YOLOV6的改进

1、backbone:RepBlock+结构重参数化(小型模型)、CSPStackRep Block(大型模型)

2、neck:Rep PAN

3、head:Decoupled Head

4、标签分配:TAL

5、anchor-free

6、损失函数:VariFocal Loss+SIOU

7、Self-distillation  

8、量化+RepOpt-VGG+RepOptimizer+梯度重参数化

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

 1、EfficientRep backbone

小模型:

在训练中使用 Rep block,如图 3a。

在推理时使用 RepConv,3x3 卷积 + ReLU 堆积而成的结构,如图 3b。

大模型:

使用 CSPStackRep block 来得到中/大模型,如图 3c,3 个 1x1 conv + 2 个 RepVGG(训练) / RepConv(测试) + 1 个残差通道。

YOLO v6:一个硬件友好的目标检测算法

受到硬件感知神经网络设计思想的启发,基于 RepVGG style 设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 。

YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet 搭建,采用了多分支的方式和残差结构。对于 GPU 等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。

YOLOv6引入了 RepVGG style 结构。

结构重参数化。

RepVGG Style 结构是一种在训练时具有多分支拓扑,而在实际部署时可以等效融合为单个 3x3 卷积的一种可重参数化的结构。通过融合成的 3x3 卷积结构,可以有效利用计算密集型硬件计算能力。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

2、Rep PAN

Rep-PAN 基于 PAN 拓扑方式,用 RepBlock 替换了 YOLOv5 中使用的 CSP-Block,同时对整体 Neck 中的算子进行了调整。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

3、Decoupled Head

YOLOv6 采用了解耦检测头(Decoupled Head)结构,并对其进行了精简设计。

原始 YOLOv5 的检测头是通过分类和回归分支融合共享的方式来实现的,而 YOLOX 的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的 3x3 的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。

YOLOv6对解耦头进行了精简设计,同时综合考虑到相关算子表征能力和硬件上计算开销这两者的平衡,采用 Hybrid Channels 策略重新设计了一个更高效的解耦头结构,在维持精度的同时降低了延时,缓解了解耦头中 3x3 卷积带来的额外延时开销。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

4、anchor-free

采用Anchor-free 无锚范式,也就是 box regression 分支是预测 anchor point 到 bbox 的四个边的距离。

YOLOv6 采用了更简洁的 Anchor-free 检测方法。由于 Anchor-based检测器需要在训练之前进行聚类分析以确定最佳 Anchor 集合,这会一定程度提高检测器的复杂度;

同时,在一些边缘端的应用中,需要在硬件之间搬运大量检测结果的步骤,也会带来额外的延时。

而 Anchor-free 无锚范式因其泛化能力强,解码逻辑更简单,在近几年中应用比较广泛。

YOLO v6:一个硬件友好的目标检测算法

5、标签分配

为了获得更多高质量的正样本,YOLOv6 引入了 SimOTA 算法动态分配正样本,进一步提高检测精度。

YOLOv5 的标签分配策略是基于 Shape 匹配,并通过跨网格匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法,并不会随着网络训练的过程而调整。

近年来,也出现不少基于动态标签分配的方法,此类方法会根据训练过程中的网络输出来分配正样本,从而可以产生更多高质量的正样本,继而又促进网络的正向优化。

例如,OTA通过将样本匹配建模成最佳传输问题,求得全局信息下的最佳样本匹配策略以提升精度,但 OTA 由于使用了Sinkhorn-Knopp 算法导致训练时间加长,而 SimOTA算法使用 Top-K 近似策略来得到样本最佳匹配,大大加快了训练速度。

故 YOLOv6 采用了SimOTA 动态分配策略,并结合无锚范式,在 nano 尺寸模型上平均检测精度提升 1.3% AP。

SimOTA定义的计算公式如下:

YOLO v6:一个硬件友好的目标检测算法

对于每一个预测框,分别计算其与真实框的IOU和类别损失,然后加权得到总体损失。然后将各个框和真实框的iou排序,将所有框的iou相加取整,得到正样本的类别个数。
比如,下图中,取整后的结果为2,那就选取前两个作为正样本。

YOLO v6:一个硬件友好的目标检测算法

不同的 label assignment 方法的效果对比,实验基于 YOLOv6-N:

YOLO v6:一个硬件友好的目标检测算法

Task alignment learning  任务对齐学习(TAL)首次在TOOD 中提出,其中设计了一个统一的分类分数和预测框质量的统一度量。用此度量替换IoU以分配对象标签。

在一定程度上,缓解了任务(分类和预测框回归)的错位问题。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

6、VariFocal Loss

YOLO v6:一个硬件友好的目标检测算法

YOLOv6选择VariFocal Loss作为分类损失。

Focal Loss改进了传统的交叉熵损失,解决了正负样本或硬易样本之间的类不平衡问题。

为了解决训练和推理之间质量估计和分类使用不一致的问题,Quality Focal Loss(QFL)进一步扩展了Focal Loss,并将分类评分和定位质量联合表示出来进行分类监督。

而VariFocal Loss (VFL)来源于Focal Loss,但它不对称地处理正样本和负样本。

通过考虑不同重要程度的正样本和负样本,它平衡了来自两个样本的学习信号。

Poly Loss将常用的分类损失分解为一系列加权多项式基。它在不同的任务和数据集上调整多项式系数,通过实验证明了其优于交叉熵损失和焦点损失。

 YOLOv6最终采用了VFL 。

YOLO v6:一个硬件友好的目标检测算法

7、SIOU

 YOLOv6选择SIoU /GIoU 损失作为回归损失。

为了进一步提升回归精度,YOLOv6 采用了 SIoU边界框回归损失函数来监督网络的学习。

目标检测网络的训练一般需要至少定义两个损失函数:分类损失和边界框回归损失,而损失函数的定义往往对检测精度以及训练速度产生较大的影响。

近年来,常用的边界框回归损失包括IoU、GIoU、CIoU、DIoU loss等等,这些损失函数通过考虑预测框与目标框之前的重叠程度、中心点距离、纵横比等因素来衡量两者之间的差距,从而指导网络最小化损失以提升回归精度,但是这些方法都没有考虑到预测框与目标框之间方向的匹配性。

SIoU 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度。

SIOU应用于YOLOv6-N和YOLOv6-T,而其他的则使用GIoU。

YOLO v6:一个硬件友好的目标检测算法

8、Self-distillation  

为了进一步提高模型的准确性,同时不引入太多额外的计算成本,YOLOv6采用经典的知识蒸馏技术来最小化教师模型和学生模型之间预测的KL散度。

通过限制教师模型是预先训练的学生模型,因此称之为自我蒸馏。

kl-散度通常用于度量数据分布之间的差异。然而,在目标检测中有两个子任务,其中只有分类任务可以直接利用基于kl-散度的知识精馏。

由于DFL损失,我们也可以在预测框回归上执行它。

知识蒸馏损失可以表述为: 

YOLO v6:一个硬件友好的目标检测算法

其中

YOLO v6:一个硬件友好的目标检测算法

和分别为教师模型和学生模型的类别预测,因此和为预测框回归预测。总体损失函数现在可以表述为: 

YOLO v6:一个硬件友好的目标检测算法

其中,Ldet是用预测和标签计算出的检测损失。

引入超参数α来平衡两个损失。在训练的早期阶段,从教师模型那里得到的软标签更容易学习。随着训练的继续,学生模型的表现将与教师模型相匹配,这样硬标签将对学生更有帮助。

在此基础上,将余弦权值衰减应用于α,以动态调整来自教师的硬标签和软标签的信息。

为了解决在训练和推理过程中假量化器的不一致性问题,有必要在重新优化器上建立QAT。此外,在YOLOv6框架内采用了通道蒸馏(后来称为CW蒸馏),这也是一种自蒸馏的方法,其中教师网络是在fp32精度上的学生模型。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

学生网络前期侧重学习软标签,后期学习硬标签。

YOLO v6:一个硬件友好的目标检测算法

9、量化

YOLO v6:一个硬件友好的目标检测算法

YOLov6的量化问题:

yolov6在结构中大量使用了重参数结构,导致数据分布过差,PTQ精度急剧下降。另外,重参数化结构网络无法直接使用QAT进行微调提升量化性能。

因为Deploy部署的模型无BN,不利于训练;Train模式进行QAT之后无法进行分支融合。

YOLOv6又是怎么做的呢?

一、RepOpt-VGG 网络+梯度重参数化

思路一:RepVGG推理的时候由于速度的要求采用单路网络,训练的时候能否将推理模型的单路网络训练的效果拔高呢?(Deploy部署的模型无BN,仅仅是不利于训练,还是能训练,能否从这里进行改善。看起来可行。)

YOLOv6用了RepOpt-VGG 网络,这个工作与 RepVGG 相当于是两个不同的改进方向,一个是单网络变多分支来提高训练效果,另一个则是还是单网络通过训练手段提高训练效果。即:

RepVGG + 常规的优化器=VGG  + RepOptimizer。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

RepOPT结果改善了数据分布,有效提升了PTQ量化精度。

梯度重参数化。

将先验信息用于修改梯度数值,称为梯度重参数化,对应的优化器称为RepOptimizer。

YOLO v6:一个硬件友好的目标检测算法

RepOpt 步骤:

步骤1:将架构的先验知识转移到你的优化器中。

步骤2:通过超搜索获得超参数。

步骤3:使用 RepOpt 进行训练。

二、PTQ-敏感度分析与部分量化

找到敏感的层,直接跳过。

如何寻找?

四种方法:mAP、MSE、SNR、Cosine

进行各层敏感性排序,进行逐层量化误差分析,查找最敏感的层进行跳过,实现部分量化。

三、QAT-量化节点插入

RepOPT的train/deploy模型结构一致,天然适合于QAT方法的使用。

YOLO v6:一个硬件友好的目标检测算法

四、CWD自蒸馏

FP32模型为teacher,int8模型为student。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

10、总结

缘起:VGG中3*3的卷积结构,可以有效利用计算密集型硬件计算能力(比如 GPU),同时也可获得 GPU/CPU 上已经高度优化的 NVIDIA cuDNN 和 Intel MKL 编译框架的帮助。基于硬件友好的考虑,从模型推理出发,YOLOv6采用单路网络推理。

问题1:然而,单路网络训练的效果不佳。

解决1:结合resnet的想法,扩展为RepVGG的多分支结构用于训练。

问题2:多分支网络训练的参数无法直接应用到单路网络中进行推理,且多分支网络推理效果低,速度慢。

解决2:将训练模型和推理模型用结构重参数化方法结合起来,使得RepVGG多分支网络训练的参数可用于单路网络进行推理。

问题3:然而结构重参数化的网络无法进行量化,准确的说量化后无法进行分支融合,也就无法应用于单路推理模型。

解决3:因将训练的网络又从新改为单路,回到了起点。

网络的参数由网络结构获得,若能找到网络和参数的联系,类似结构重参数化一样的转化,岂不是可以从简单的网络得到复杂的参数?

RepOpt-VGG就是以单路网络为出发点,进行梯度重参数化来达到RepVGG网络的训练效果。

YOLO v6:一个硬件友好的目标检测算法

YOLO v6:一个硬件友好的目标检测算法

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

 

—————————————————————

投稿吧   | 留言吧文章来源地址https://www.toymoban.com/news/detail-451425.html

到了这里,关于YOLO v6:一个硬件友好的目标检测算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 揭秘YOLO:深入理解目标检测的神奇算法

    目标检测,就像电影中的侦探找寻线索,让计算机能够发现并识别图像中的物体。在目标检测领域,YOLO(You Only Look Once)算法犹如一位神奇的探险家,通过一瞥就能洞察图像的奥秘。本篇博客将深入解析YOLO算法,让我们一同揭秘这场目标检测的冒险之旅。 首先,让我们认识

    2024年02月21日
    浏览(37)
  • OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法

    2012年,随着深度学习技术的不断突破,开始兴起基于深度学习的目标检测算法的研究浪潮。 2014年,Girshick等人首次采用深度神经网络实现目标检测,设计出R-CNN网络结构,实验结果表明,在检测任务中性能比DPM算法优越。同时,何恺明等人针对卷积神经网络(Convolutional Neura

    2024年02月13日
    浏览(57)
  • YOLO目标检测算法轻量化改进的过程记录

          本文主要记录了在毕设期间关于将目标检测算法部署至嵌入式设备(jetson nano)上的过程及对YOLO算法轻量化及精度提升的一些修改策略(改的并不多,基本都是重复组合,毕竟我是个菜鸡)。       注意!仅对于被论文折磨必须要有一丢丢创新点的人来说有点看的意

    2023年04月12日
    浏览(42)
  • 【1】从零开始学习目标检测:YOLO算法详解

    在过去的十年中,深度学习技术的发展引起了极大的关注,并成为人工智能领域中不可或缺的技术之一。深度学习在计算机视觉领域的应用越来越广泛,其中目标检测是备受关注的领域之一。目标检测是指在图像或视频中检测出目标的位置和边界框,然后对目标进行分类或识

    2023年04月15日
    浏览(44)
  • 目标检测YOLO算法,先从yolov1开始

    有一套配套的学习资料,才能让我们的学习事半功倍。 yolov1论文原址:You Only Look Once: Unified, Real-Time Object Detection 代码地址:darknet: Convolutional Neural Networks (github.com) one-stage(单阶段):YOLO系列 最核心的优势:速度非常快,适合做实时检测任务! 但是缺点也是有的,效果通常

    2024年02月09日
    浏览(49)
  • 改进 YOLO V5 的密集行人检测算法研究(论文研读)——目标检测

    针对在人员密集区或相互拥挤场景下进行的行人目标检测时,因行人遮挡或人像交叠所导致的跟踪目标丢失、检测识别率低的问题,提出了一种融合注意力机制的改进 YOLO V5 算法。 通过引入注意力机制来深入挖掘特征通道间关系和特征图空间信息,进一步增强了对行人目标可

    2024年02月01日
    浏览(49)
  • 【计算机视觉】目标检测 |滑动窗口算法、YOLO、RCNN系列算法

    首先通过前面对计算机视觉领域中的卷积神经网络进行了解和学习,我们知道,可以通过卷积神经网络对图像进行分类。 如果还想继续深入,会涉及到目标定位(object location)的问题。在图像分类的基础上(Image classification)的基础上,除了判断图像中的物体类别是什么,还需要给

    2024年02月20日
    浏览(53)
  • 目标检测YOLO实战应用案例100讲-高密度交通场景下智能汽车多目标检测与跟踪算法

    目录 前言 高密度交通场景的多目标检测算法的难点 高密度交通场景的多目标跟踪算法的难点 /

    2024年02月11日
    浏览(64)
  • 目标检测YOLO实战应用案例100讲-基于改进YOLOv4算法的自动驾驶场景 目标检测

    目录 前言 国内外目标检测算法研究现状  传统目标检测算法的发展现状 

    2024年02月06日
    浏览(54)
  • 目标检测YOLO实战应用案例100讲-基于深度学习的遥感目标检测算法FPGA部署实现研究

    目录 基于深度学习的目标检测网络剪枝及FPGA部署  基于深度学习的目标检测网络和神经网络剪枝概述 

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包