目标检测——YOLOv6算法解读

论文: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算法解读

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://xiahunao.cn/news/2981232.html

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

相关文章

树莓派驱动开发----iic驱动oled屏幕篇

水一期吧,上效果 有点模糊,我直接说吧,修改设备树,iic1,地址0x3c,然后编写驱动文件,app文件,挂载驱动模块后在终端输入 /*******************************************************…

【动态规划】C++ 子序列问题(递增子序列、数对链、定差子序列、斐波那契子序列...)

文章目录 1. 前言2. 例题最长递增子序列 3. 算法题3.1_摆动序列3.2_最长递增子序列的个数3.3_最长数对链[3.4_ 最长定差子序列](https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/description/)3.5_最长的斐波那契子序列的长度3.6_最长等差数…

Spring Boot:Web应用开发之增删改查的实现

Spring Boot 前言实现增删改查功能 前言 增删改查功能作为 Web 应用中的基础且重要的组成部分,是基本的数据库操作,也是实现业务逻辑和功能的关键要素。下面简单介绍使用 Spring Boot 实现增删改查的功能。 实现增删改查功能 在上一章 Spring Boot&am…

安装无法完成。安装Autodesk产品时出现错误103

解决方法如下 打开autoremove,点击扩展功能,输入103,点击搜索 注意 修复过程根据情况可能会很慢 等待提示修复成功,再尝试重新安装软件。 软件每周六选择其他方式登录免费使用

海康Visionmaster-常见问题排查方法-启动失数

问题2:VM无法启动,报错:参数错误;  问题原因:客户电脑环境异常导致代理启动失败。  解决方法:安装运行时库,并测试代理能否正常启动,步骤如下: ① 尝试双击代理进程&#xff…

Linux之yum和vim的使用

一、yum的使用 yum 后面跟install要安装的文件名: 若你要安装的文件已经存在,则会出现: 要删除文件: yum remore文件名即可删除 在我们安装完lrzsz之后,可以用rz指令和sz指令: rz指令可以从window窗口中…

【Linux开发实用篇】Webmin和宝塔

可视化工具 Webmin宝塔 Webmin Webmin是功能强大的基于Web的Linux/Unix管理工具 下载地址:http://download.webmin.com/download/yum/ 使用wget指令下载:http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm 然后进行安装: …

第07-5章 传输层详解

7.1 传输层概述 分段及封装应用层送来的数据:应用层以字节流的形式给传输层传输数据,传输层会把字节流分段,并给每段封装 由应用程序产生应用进程,由应用进程产生进程端口号,由端口号提供相应的服务 如何查看本…

项目实践---贪吃蛇小游戏(下)

对于贪吃蛇小游戏,最主要的还是主函数部分,这里就和大家一一列举出来,上一章已经写过头文件了,这里就不多介绍了。 首先就是打印桌面,也就是背景,则对应的代码为: void SetPos(short x, short …

(四)Servlet教程——Maven的安装与配置

1.在C盘根目录下新建一个Java文件夹,该文件夹用来放置以下步骤下载的Maven; 2. 下载Maven的来源有清华大学开源软件镜像站和Apache Maven的官网,由于清华大学开源软件镜像站上只能下载3.8.8版本以上的Maven,我们选择在Apache Maven的官网上下…

VulnHub靶机 DC-8 打靶实战 详细渗透过程

VulnHub靶机 DC-8 打靶 详细渗透过程 目录 VulnHub靶机 DC-8 打靶 详细渗透过程一、将靶机配置导入到虚拟机当中二、渗透测试流程主机发现端口扫描Web渗透SQL注入登录后台反弹shell提权 一、将靶机配置导入到虚拟机当中 靶机地址: https://www.vulnhub.com/entry/…

Docker容器概念介绍与基本管理

前言 在软件开发和部署环境中,使用 Docker 等容器技术可以帮助团队实现快速、一致、可靠的应用程序部署,提高开发效率和应用程序的可移植性。 目录 一、虚拟化产品介绍 1. 云服务模型 1.1 IaaS 1.2 PaaS 1.3 SaaS 1.4 DaaS 2. 产品介绍 2.1 虚…

BUUCTF---[SWPU2019]神奇的二维码

1、下载附件是一张二维码,拿去扫描得到了flag 2、拿去提交是错的(不会这么简单哈哈哈),常规操作在kali中分析 3、分离发现图片里面有东西 4、查看txt,发现里面有一串字符,解码后为 5、查看文档&#xff0c…

「ChatGPT」掀起新一轮AI热潮!超越GPT-4 Turbo,商汤日日新大升级!

目录 拳打 GPT-4 Turbo ,脚踢 DALLE 3 端侧大模型,唯快不破 AI 应用落地需要一个即插即用的大模型超市 并不存在 AI 这个行业,只有 AI行业,强调 AI 需要与传统产业合作,这种关系是结合与赋能,而不是颠覆…

【提示学习论文】BlackVIP: Black-Box Visual Prompting for Robust Transfer Learning论文原理

BlackVIP: Black-Box Visual Prompting for Robust Transfer Learning BlackVIP:稳健迁移学习的黑盒视觉提示 问题 黑盒白盒? 黑盒和白盒的概念与对预训练模型内部参数的了解程度相关。黑盒指的是对预训练模型的参数和结构缺乏详细了解,通常只能通过使…

Python自学之路--001:Python + PyCharm安装图文详解教程

目录 1、概述 2、Python解释器 2.1、下载 2.2、Python安装 2.3、Python环境变量配置,必选项 3、PyCharm安装 3.1、PyCharm下载 3.2、PyCharm安装 4、建一个Hello World 5、Phcarm设置 5.1、Phcarm汉化 5.2、Phcarm工具栏显示在顶部 5.3、Phcarm通过pip安…

[2021年最新]国产时序性数据TDenige入门

一、TDenige简介 TDengine:是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,它不依赖任何第三方软件,也不是优化或包装了一个开源的数据库或流式计算产品,而是在吸取众多传统关系型数据库、NoS…

25计算机考研院校数据分析 | 复旦大学

复旦大学(fudan University),简称"复旦”,位于中国上海,由中华人民共和国教育部直属,中央直管副部级建制,位列985工程、211工程、双一流A类,入选“珠峰计划"、"111计划""2011计划…

zabbix自动发现和自动注册

一、zabbix自动发现 1.1 确保客户端上的zabbix-agent2服务器状态正常 1.2 在web页面删除原有的客户端主机 1.3 在服务端和客户端上配置hosts 1.4 web端配置自动发现 二、zabbix自动注册 2.1 环境配置 2.2 修改zabbix-agent2配置文件 过滤非#或非¥开头的内容 2.3 we…

应用实战|只需几步,即可享有外卖订餐小程序

本示例是一个简单的外卖查看店铺点菜的外卖微信小程序,小程序后端服务使用了MemFire Cloud,其中使用到的MemFire Cloud功能包括: 其中使用到的MemFire Cloud功能包括: 云数据库:存储外卖微信小程序所有数据表的信息。…