目标检测——YOLOv6算法解读

news2024/12/24 10:19:28

论文:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (2022.9.7)
作者:Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo Zhang, Yufei Liang, Linyuan Zhou, Xiaoming Xu, Xiangxiang Chu, Xiaoming Wei, Xiaolin Wei
链接:https://arxiv.org/abs/2209.02976
代码:https://github.com/meituan/YOLOv6


YOLO系列算法解读:
YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算法解读、YOLOv7算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读、PP-YOLOv2算法解读、PP-PicoDet算法解读、PP-YOLOE算法解读、PP-YOLOE-R算法解读


文章目录

  • 1、算法概述
  • 2、YOLOv6细节
    • 2.1 网络设计
    • 2.2 标签分配
    • 2.3 损失函数
    • 2.4 适应工业界的改进
    • 2.5 量化和部署
  • 3、实验


1、算法概述

YOLOv6出自美团基础研发平台/视觉智能部研发团队,出于以下几个出发点,考虑对YOLO系列检测算法进行改进;1、RepVGG论文思想还未应用到检测网络,于是考虑对检测网络进行重参数化设计;2、基于重参数化的检测器的量化也需要细致的处理,否则难以处理由于其在训练和推理过程中的异构配置而导致的性能下降;3、更关注模型部署时的推理速度;4、对于更特定的优化策略比如标签分配和损失函数设计,需要进一步验证考虑到架构差异性;5、对于部署,我们可以容忍训练策略的调整,以提高准确性性能,但不会增加推理成本,例如知识蒸馏。基于以上5点因素,作者提出YOLOv6,为了在不降低性能的情况下提高推理速度,作者研究了最先进的量化方法,包括训练后量化(PTQ)和量化感知训练(QAT),并将它们应用于YOLOv6中,以实现可部署网络的目标。用TensorRT量化后的速度对比如下图所示:
在这里插入图片描述
总之,YOLOv6的贡献如下:
(1)、为不同场景应用定制不同规模的模型,小模型以普通的单路径主干为特征,而大模型建立在高效的多分支块上;
(2)、加入了自蒸馏策略,同时执行了分类任务和回归任务;
(3)、融合了各种先进tricks,如:标签分配检测技术、损失函数和数据增强技术;
(4)、在RepOptimizer和通道蒸馏的帮助下优化了检测器的量化方案。


2、YOLOv6细节

YOLOv6的重新设计包括以下部分:网络设计、标签分配、损失函数、数据增强、行业方便的改进以及量化和部署。整体YOLOv6网络结构如下:
在这里插入图片描述

2.1 网络设计

Backbone
与其他主流架构相比,作者发现RepVGG骨干网络具备和小型网络一样的推理速度,但是提取到的特征更丰富,性价比很高,但是由于参数和计算成本的爆炸性增长,它很难被缩放以获得更大的模型。所以作者把RepBlock作为小型网络的子模块;对于大型模型,作者基于现在的CSP模块进行改进得到了CSPStackRep模块。如下图所示为RepBlock和CSPStackRep的结构图:
在这里插入图片描述
基于以上改进,作者得到了高效的重参数主干网络EfficientRep,如下图所示:
在这里插入图片描述
相比于 YOLOv5 采用的 CSP-Backbone,该 Backbone 能够高效利用硬件(如 GPU)算力的同时,还具有较强的表征能力。作者将Backbone中stride=2的普通Conv层替换成了stride=2的RepConv层。同时,将原始的CSP-Block都重新设计为RepBlock,其中RepBlock的第一个RepConv会做channel维度的变换和对齐。另外,作者还将原始的SPPF优化设计为更加高效的 SimSPPF。

Neck
YOLOv6也和v4/v5一样采用了PAN结构,不同的是,作者用RepBlocks(N/S)或CSPStackRep(M/L)对CSPBlock进行了替换,同时对整体 Neck 中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力,命名为Rep-PAN,结构如下图所示:
在这里插入图片描述

Head
像FCOS和YOLOX一样,也是解耦了分类和回归任务,但它们都在每个分支中引入额外的两个3x3卷积层用于提取任务特征;在YOLOv6中,作者采用混合通道策略,将3x3卷积层简化到只使用一个,检测头的宽度由骨干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。使其更加高效,命名为Efficient Decoupled Head。
在这里插入图片描述

Anchor-free
基于anchor-free的检测算法由于其泛化性能好和解码预测简单而减少了后处理成本。目前有两类anchor-free方式,基于锚点和基于关键点的方式,YOLOv6采用基于锚点的方式,其回归分支实际上预测了从锚点到box四边的距离。

2.2 标签分配

标签分配负责在训练阶段将标签分配给预定义的锚。早期都是采用比较简单的方式,根据gt框与预定义锚框的iou大小来判断,现在有了比较复杂的动态匹配策略,如SimOTA和TAL。YOLOv6早期版本采用SimOTA分配策略,但是,在实践中,作者发现引入SimOTA将减缓训练过程,而且经常陷入不稳定训练的情况。因此,YOLOv6后期采用TAL的方式,因为高效又训练友好。

SimOTA
OTA将目标检测中的标签分配问题视为最佳传输问题,它从全局角度考虑预测框与真实标签的匹配的最优问题,从而对每个真实标签对象定义正负样本预测框。而SimOTA是OTA的简化版本,减少了额外的超参数但依然保持了其性能。SimOTA的分配标签步骤为:
(1)、计算成对预测框与真值框代价,由分类及回归loss构成
(2)、计算真值框与前k个预测框IoU,其和为Dynamic k;因此对于不同真值框,其Dynamic k存在差异
(3)、最后选择代价最小的前Dynamic k个预测框作为正样本

TAL(Task alignment learning,任务对齐学习)
任务对齐学习的匹配标签方式最早由TOOD检测算法提出,该算法设计了一个统一的分类分数和预测框质量的指标用来替换传统的IoU度量方式。这在一定程度上,使得分类任务和回归任务的不一致性得到了缓解。其匹配标签的步骤为:
(1)、在各个特征层计算gt与预测框IoU及与分类得分乘积作为score,进行分类检测任务对齐
(2)、对于每个gt选择top-k个最大的score对应bbox
(3)、选取bbox所使用anchor的中心落在gt内的为正样本
(4)、若一个anchor box对应多个gt,则选择gt与预测框IoU最大那个预测框对应anchor负责该gt

2.3 损失函数

主流的anchor-free检测算法的损失函数包括分类损失、回归损失和object损失;作者通过系统的实验,最终确定分类损失采用VAriFocal Loss,回归损失采用SIou/GIoU。

Classification Loss
Focal Loss对传统的交叉熵损失进行了改进,解决了正样本与负样本、难样本与易样本之间的类不平衡问题。为了解决训练和推理在质量估计和分类使用上不一致的问题,quality Focal Loss (QFL)进一步扩展了Focal Loss,将分类分数和定位质量联合表示,用于分类中的监督。VariFocal Loss(VFL)也对Focal Loss进行改进,它对正负样本的处理是不对称的,通过考虑正负样本的不同重要程度,平衡了正负样本的学习信号。Poly Loss将常用的分类损失分解为一系列的加权多项式基数。它在不同的任务和数据集上调整多项式系数,通过实验证明它比交叉熵损失和Focal Loss更好。
通过一系列实验,YOLOv6的分类损失最终采用VAriFocal Loss。

Box Regression Loss
边框回归损失在边界框定位学习中充当着重要角色,早期是采用L1损失,后来就涌现出IoU系列损失和probability loss。
IoU损失将预测框的四个边界作为一个整体单位进行回归。它被证明是有效的,因为它与评价指标一致。IoU有很多变体,比如:GIoU、DIoU、CIoU、α-IoU、SIoU通过实验,作者在YOLOv6-N和YOLOv6-T中采用SIoU,剩余网络结构则采用GIoU。

Distribution Focal Loss(DFL)将连续分布的box位置简化为离散的概率分布。它考虑了数据的模糊性和不确定性,而没有引入任何其他强的先验因素,这有助于提高box的定位精度,特别是当ground-truth boxes模糊时。在DFL的基础上,DFLv2开发了一个轻量级的子网络,以利用分布统计和实际定位质量之间的密切关联,这进一步提高了检测性能。然而,DFL通常比一般的目标框回归多输出17倍的回归值,导致了大量的开销。额外的计算成本大大阻碍了小模型的训练。而DFLv2由于有了额外的子网络,进一步增加了计算负担。通过实验表明,DFLv2在YOLOv6中带来了与DFL相似的增益效果,因此,作者只在YOLOv6-M/L中采用DFL。

Object Loss
FCOS检测算法首次提出了对象损失,以降低低质量边界框的分数,以便在后处理中过滤掉它们。YOLOX也利用它加速收敛并提升网络性能。在YOLOv6中,作者也尝试加入对象损失,但是没起到正面效果。

2.4 适应工业界的改进

作者尝试了其他常见的做法和技巧来提高性能,包括自蒸馏和更多的迭代epoch。对于自蒸馏,分类和回归都分别由教师模型进行监督。回归的蒸馏是由于DFL而实现的。此外,软标签和硬标签的信息比例通过余弦衰减动态下降,这有助于学生在训练过程中的不同阶段选择性地获取知识。

更多迭代次数,300增加到400epoch
在这里插入图片描述
自蒸馏
为了进一步提高模型的准确性,同时不引入太多的额外计算成本,作者应用经典的知识蒸馏技术,使教师和学生的预测之间的KL散度最小。教师模型限定为学生模型本身,但是经过了预先训练的,所以可以称之为自蒸馏的学习方式。KL散度通常被用来衡量数据分布之间的差异。然而,在目标检测中有两个子任务,其中只有分类任务可以直接利用基于KL散度的知识提炼。由于DFL损失的存在,我们也可以在box回归上执行它。知识蒸馏损失可以用公式表述为:
在这里插入图片描述
总的损失可以表述为:
在这里插入图片描述
Ldet代表检测网络自身损失,LKD代表蒸馏损失,α用于平衡两者损失。

图像灰度边界
在YOLOv5和YOLOv7的实现中,在评估模型性能时,每个图像周围都放置了半截灰色边界。虽然没有添加有用的信息,但它有助于检测图像边缘附近的物体。这个技巧也适用于YOLOv6。但是,额外的灰度边界会降低推理速度,但是不要又会降低精度,作者猜测是mosaic增加中引入灰度填充的原因造成的,所以,在训练过程中,在最后一轮,关闭了马赛克增强。最终使得减少了灰色边界面积的情况下,不掉点。
在这里插入图片描述

2.5 量化和部署

为了解决基于重新参数化的模型量化时的性能下降问题,我们用RepOptimizer训练YOLOv6,以获得PTQ友好的权重,使得其特征的分布是非常狭窄的,能够有利于量化,如下图所示:
在这里插入图片描述
PTQ的实验结果如下:
在这里插入图片描述
通过将量化敏感操作部分转换为浮点计算,进一步提高了PTQ的性能。
为防止PTQ不足,作者引入QAT(训练中量化),保证训练推理一致,作者同样使用RepOptimizer,此外使用channel-wise蒸馏,如图所示:
在这里插入图片描述
QAT的实验结果如下:
在这里插入图片描述


3、实验

实验设置:作者使用与YOLOv5相同的优化器与学习率下降策略,并且也使用warmup、EMA、以及mosaic/mixup数据增强手段。在COCO2017训练集上训练模型,在COCO2017验证集上评估模型准确性。作者的模型均在8卡A100gpu上训练完成,在Tesla T4 GPU以TensorRT形式就行测试。

与现今其他检测算法进行比较
在这里插入图片描述
其余消融实验:略

参考文章:https://tech.meituan.com/2022/06/23/yolov6-a-fast-and-accurate-target-detection-framework-is-opening-source.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1627722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot---------整合Redis

目录 第一步:引入依赖 第二步:配置Redis信息 第三步:选择Spring Data Redis进行操作Redis数据库 ①操作String类型数据(用的少) ②操作Object类型数据(重要!!!&#x…

Linux 设置 ssh 服务开机自启并允许 root 账户以密码验证身份登录

确保openssh-server已安装。 确保防火墙已允许 ssh 端口上的传入连接。 修改 ssh 服务的 sshd_config 文件,以允许 root 账户以密码验证身份登录。 1、 从 sshd_config 中删除所有包含 “PermitRootLogin” 的行 sed -i "/^PermitRootLogin/d" /etc/s…

微信小程序关于主包大小不能超过1.5MB的问题

常规的解决办法有以下几种 1、把资源文件改成远程服务器的,比如png这些 2、进入如图的分析页面,能明确知道你哪个插件包太大,我这里之前echart的包就1mb,现在给他缩减到了500kb的样子 3、解决vant等npm包太大的问题&#xff0c…

【代码随想录刷题记录】LeetCode283移动零

题目地址 1. 思路 1.1 基本思路及假设 拿到这个题,首先想到,这是类似删除元素的方法,因为删除元素也是移动元素,但是移动的方向和删除元素的方法刚好相反,我们都知道,如果在数组中删除某个元素&#xff…

小程序使用阿里巴巴矢量图标库

一、登录官网 www.iconfont.cn 二、在搜索框中搜索想要的图标,将鼠标移动到图标上会看到三个标记 可以使用下载,直接使用: 可以使用css文件使用: 首先点击购物车样式的选项,而后点击下图位置: 点击自己创…

嵌入式Linux学习——Linux常用命令(上)

Linux命令行介绍 Linux Shell 简介 Shell 的意思是“外壳”,在 Linux 中它是一个程序,比如/bin/sh、/bin/bash 等。它负责接收用户的输入,根据用户的输入找到其他程序并运行。比如我们输入“ ls”并回车时, shell 程序找到“ ls…

Kafka 3.x.x 入门到精通(06)——Kafka进阶

Kafka 3.x.x 入门到精通(06)👉👉👉👉 Kafka进阶 3. Kafka进阶3.1 Controller选举3.2 Broker上线下线3.3 数据偏移量定位3.4 Topic删除3.5 日志清理和压缩3.7 页缓存3.8 零拷贝3.9 顺写日志3.10 Linux集群部…

循环购模式:电商消费增值的新引擎

大家好,我是微三云周丽! 在数业模式和创新的营销策字经济的浪潮下,电商行业以其独特的商略,不断刷新着消费者的购物体验。 近年来,循环购模式作为一种新兴的电商消费增值模式,逐渐在市场中崭露头角&#…

上门服务系统|上门服务小程序搭建流程

随着科技的不断进步和人们生活水平的提高,越来越多的服务开始向线上转型。传统的上门服务业也不例外,随着上门服务小程序的兴起,人们的生活变得更加便捷和高效。本文将为大家介绍上门服务小程序的搭建流程以及应用范围。 一、上门服务小程序搭…

知名专业定制线缆生产源头工厂推荐-精工电联:线缆行业的质量与成本双赢

知名专业定制线缆生产源头工厂推荐-精工电联 在当今科技飞速发展的时代,企业要想在激烈的市场竞争中立于不败之地,必须具备高质量、高效率、低成本的核心竞争力。作为线缆制造领域的领先者,精工电联始终秉持“与智者同行,与制造为…

“AI技能,新的职场通行证?揭秘阿里最新职业趋势报告“

随着“五一”劳动节的临近,阿里巴巴发布了一份引人注目的报告——《“AI”职业趋势报告》。这份报告不仅揭示了人工智能(AI)在各行各业中的关键作用,也预示了一个全新的工作时代正在加速到来。 报告中明确指出,AI的应用…

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(四)分组多查询注意力

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(四)分组多查询注意力 Grouped-query Attention,简称GQA 分组查询注意力(Grouped-query Attention,简称GQA)是多查询和多头注意力的插值…

栈和队列OJ——括号匹配问题,用队列实现栈,用栈实现队列,设计循环队列

题目1——括号匹配问题 题目来源. - 力扣(LeetCode) 思路——辅助栈法 括号匹配问题是一个经典的计算机科学问题,常用于检查一个字符串中的括号是否正确匹配。这包括各种括号,如小括号“()”,大括号“{}”&#xff0…

Eagle for Mac:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具,旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.2中文版下载 Eagle支持多种图片格式,包括JPG、PNG、GIF、SVG、PSD、AI等,无论是矢量图还是位图,都能以清…

你的网站还在使用HTTP? 免费升级至HTTPS吧

如果您的网站还在使用老的http协议,可以申请一个免费的SSL证书升级至https! 具体步骤如下: 1 申请免费SSL证书 根据你的需求选择合适的SSL证书类型,如单域名证书,多域名证书、通配符证书 登录免费供应商JoySSL官网&…

18 JavaScript学习:错误

JavaScript错误 JavaScript错误通常指的是在编写JavaScript代码时发生的错误。这些错误可能是语法错误、运行时错误或逻辑错误。以下是对这些错误的一些常见分类和解释: 语法错误: 这类错误发生在代码编写阶段,通常是由于代码不符合JavaScrip…

排队叫号取号投屏语音播报小程序开源版开发

排队叫号取号投屏语音播报小程序开源版开发 多场景排队叫号系统,支持大屏幕投屏,语音播报叫号,可用于餐厅排队取餐、美甲店排队取号、排队领取、排队就诊、排队办理业务等诸多场景,助你轻松应对各种排队取号叫号场景。 功能特性…

IBM SPSS Statistics for Mac v27.0.1中文激活版:强大的数据分析工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析工具,为Mac用户提供了高效、精准的数据分析体验。 IBM SPSS Statistics for Mac v27.0.1中文激活版下载 该软件拥有丰富的统计分析功能,无论是描述性统计、推论性统计,还是高级的多元统计…

C++进阶--智能指针

智能指针的概念 智能指针是C中的一个重要概念,用于管理动态分配的对象内存。它是一个类模板,通过封装原始指针,并在对象生命周期结束时自动释放内存,从而避免了内存泄漏和资源管理的繁琐工作。 C标准库提供了多种常见的智能指针…

MySQL常见问题与解决方案详述

MySQL:常见问题与解决方案详述 作为一款广泛使用的开源关系型数据库管理系统,MySQL对于初学者来说既充满吸引力又充满挑战。本文将列举初学者在使用MySQL过程中可能遇到的一些典型问题,并提供详细的解决方案,配以图片辅助说明&am…