YOLOv6 学习笔记

news2024/10/7 8:24:11

概况

yolov6 出来的时候 yolov7 已经出了。
在这里插入图片描述

YOLOv6设计主要包含以下几个方面:

  • 网络架构设计:对于Backbone和Neck,延续了YOLOv4和YOLOv5的PAN架构思想并使用了重参思想进行了改进;关于Head部分,作者对Decoupled Head进行了简化并将其命名为Efficient Decouple Head(EDH)
  • 标签匹配:对TaskAlign、SimOTA、ObjectBox以及ATSS等进行了评估,最终确认TaskAlign更为有效且训练友好;
  • 损失函数:损失函数一般包含cls loss、box-regression loss以及object loss。YOLOv6进行了系统性分析并最终选择VariFocal Loss作为分类损失,SIoU/GIoU作为回归损失;

REPVGG 重参思想

重参思想: ACNet, DBB, MobileOne

第一次出现多分支结构应该是在Inception中(如果不是,请各位指正),就获得了高性能收益,加上不同分支应用不同卷积核,能获得不同感受野,后续出现的ResNet,其残差结构也是多路结构。但是需要注意的是,多路结构需要保存中间结果,显存占有量会明显增高,只有到多路融合时,显存会会降低。这里如下图所示:
在这里插入图片描述
同时,由ShuffleNet论文中提到的网络高效推理法则:模型分支越少,速度越快。所以,可想而知,多分支结果虽然会带来高性能收益,但是,显存占用明显增加,且模型推理速度会一定程度降低,这在工业场景上是不实用的

我们都知道VGG几乎都是由3×3卷积堆叠而成,而现在加速库,比如NVIDIA的cudNN,Intel的MKL和相关硬件对3×3的卷积核有非常好的性能优化,而在VGG中几乎都是3×3卷积。
因此,VGG利用现有加速库会得到更好的性能优化,从下表就就可以看出,在相同channels、input_size和batchsize条件下,不同卷积核的FLOPs和TFLOPs和用时,可以看出3×3卷积非常快。
在GPU上,3×3卷积的计算密度(理论运算量(Theoretical FLOPs/Time usage)除以所用时间)可达1×1和5×5卷积的4倍。

在这里插入图片描述
VGG是一个直筒性单路结构,由上述分析可知,单路结构会占有更少的内存,因为不需要保存其中间结果,同时,单路架构非常快,因为并行度高。同样的计算量,大而整的运算效率远超小而碎的运算。

多分支结构会引入网络结构的约束,比如Resnet的残差结构要求输入和卷积出来的张量维度要一致(这样才能相加),这种约束导致网络不易延伸拓展,也一定程度限制了通道剪枝。对应的单路结构就比较友好,非常容易改变各层的宽度,这样剪枝后也能得到很好的加速比。
RepVGG主体部分只有一种算子:3×3卷积+ReLU。在设计专用芯片时,给定芯片尺寸或造价,可以集成海量的3×3卷积-ReLU来达到高效率。此外单路架构的省内存特性也可以帮降低存储单元。
综上所述,提出了RepVGG结构,如图所示:
在这里插入图片描述

对应论文中从Step1到Step2的变换过程,涉及conv于BN层融合,1×1卷积与identity转化为等价的3×3卷积的形式;
结构重参化的最后一步也就是上图中Step2 => Step3, 这一步就是利用卷积可加性原理,将3个分支的卷积层和bias对应相加组成最终一个3×3卷积的形式即可。
这里,大家可能既然把BN、identity、1×1卷积和conv_3×3都融合在一起了,为什么不干脆把ReLU也融合进去呢?其实也是可以将ReLU层进行融合的,但是需要进行量化,conv输出tensor的值域直接使用relu输出的值阈,就可以完成conv和relu合并。无量化动作的优化是无法完成conv+relu的合并。
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/4cf9836aa1bd4287a00e4901c7c35dc4.png#pic_center =600x) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1792354eb74d4297a55fe23f547337de.png#pic_center =600x)

整体架构改进

网络架构设计:
在Backbone方面,YOLOv6在小规模模型(n/t/s模型)采用RepBlock进行构建;对于大规模模型(m/l模型)采用CSPStackRepBlock进行构建;
在Neck方面,YOLOv6延续了YOLOv4与YOLOv5的设计思想,依旧使用的是PAN-FPN架构,同时采用RepBlock(n/t/s模型)与CSPStackRepBlock(m/l模型)进行特征的增强;
在Head方面,对Decoupled Head进行改进,最终使用Efficient Decouple Head;
在这里插入图片描述

正负样本匹配

anchor-free 的机制,和之前的 yolo 比较不一样。

yolo v6 有三个版本
第一版本是 SimOTA
第二版本是 TaskAlign; 论文发布基于2.0.
第三版本 加入 anchor base 辅助收敛的情况。

TaskAligned样本匹配

标签分配是目标检测非常重要的一环,SimOTA 作为OTA 的一个简化版本在YOLOX中被提出,SimOTA 减少了额外的超参数并保持了性能。在YOLOv6的早期版本中使用了SimOTA作为标签分配方法。然而,在实践中发现引入SimOTA会减慢训练过程。同时可能会使训练陷入不稳定。因此,YOLOv6 2.0 版本找到了一个替代SimOTA的匹配方法,TaskAlign。

YOLOv6实验发现,相比SimOTA,TaskAlign可以带来更多的性能提升,同时有助训练稳定性。
任务对齐学习(TAL)首次在TOOD中提出,其中设计了分类得分和bbox质量的统一度量。IoU被此度量替换以分配对象标签。在一定程度上,任务不一致的问题(分类和bbox)得到了缓解。
TOOD的另一个主要贡献是关于任务对齐头(T-head)。T-head堆叠卷积层以构建交互特征,在T-head上使用任务对齐预测器(TAP)。PP-YOLOE通过用ESE Attention取代T-head中的Layer Attention,从而改进了T-head,形成ET-head。
然而,ET-head会降低模型推理速度,并且不会带来精度增益。因此,保留了高效Decoupled Head设计。

在这里插入图片描述

损失函数

VFL loss 分类损失函数

引入非对称的加权操作,对正样本只是普通的 BCE 加一个自适应的 IoU 加权。对负样本是标准的 Focal Loss.
在这里插入图片描述

DFL 损失函数 Distribution Focal Loss

主要是将框的位置建模成一个 general distribution,让网络快速的聚焦于和目标位置距离近的位置的分布。
在这里插入图片描述

SIoU 损失

近年来,常用的边界框回归损失函数包括IoU、GIoU、CIoU、DIoU loss等等,这些损失函数通过考虑预测框与目标框之前的重叠程度、中心点距离、纵横比等因素来衡量两者之间的差距,从而指导网络最小化损失以提升回归精度,但是这些方法都没有考虑到预测框与目标框之间方向的匹配性。
SIoU 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快了网络模型的收敛,并且在小规模模型(n/t/s模型)上可以一定程度上提升精度。
通过在 YOLOv6s 上采用 SIoU loss 进行实验,对比 CIoU loss,平均检测精度提升 0.3% AP。
因此,YOLOv6对小模型采用SIoU损失,大模型采用GIoU损失。
在这里插入图片描述

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

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

相关文章

【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数

前言 嘿伙计们!准备好了吗?今天我要和你们探讨一个酷炫的话题——Oracle数据库!🎉 在这篇博文【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数,我们要揭开Oracle数据库…

IDEA中创建web项目(配置tomcat,tomcat启动报程序包javax.servlet.http不存在,tomcat控制台乱码问题)

文章目录 一、新建动态web项目1、新建项目2、选择创建动态web项目3、项目命名4、编辑index.jsp 二、配置Tomcat1、新增tomcat服务器配置2、选择服务器类型3、配置服务器参数4、部署项目5、完成配置6、启动运行7、访问web项目 三、tomcat启动报程序包javax.servlet.http不存在四…

基于ESP32+Platformio的物联网RTOS_SDK-CC_Device

本项目基于ESP32以及Platformio平台开发,请自行查阅如何配置这个环境 开源gitee地址:cc_smart_device 如果愿意贡献项目or提出疑问和修改的,请在gitee上提issue 项目里的mqtt服务器是公共的 请大家最好换成私有的 否则容易收到其他用户的错误…

Tomcat版本号泄露

1.问题描述 Tomcat报错页面泄漏Apache Tomcat/7.0.92相关版本号信息,是攻击者攻击的途径之一。因此实际当中建议去掉版本号信息。 2.测试过程 随便访问一个tomcat不存在的界面 http://127.0.0.1:8080/examples/mytest.jsp 3.解决办法 1.进入到tomcat/lib目录下&a…

C# 12 中新增的八大功能你都知道吗?

一、主构造函数 在 Visual Studio 2022 版本 17.6 预览版 2 中引入。 从 C# 12 开始,可以在类和结构中声明主构造函数。主构造函数参数都在类的整个主体的范围内。为了确保显式分配所有主构造函数参数,所有显式声明的构造函数都必须使用 this() 语法调用…

Docker部署开源白板工具Excalidraw并结合内网穿透远程访问

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建…

【Web】CTFSHOW java反序列化刷题记录(部分)

目录 web846 web847 web848 web849 web850 web856 web857 web858 web846 直接拿URLDNS链子打就行 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.lang.reflect.F…

Postgresql 怎么实现在局域网中访问

安装PostgreSQL后,默认情况下只能在本机进行连接访问,如果需要在其他主机上访问PostgreSQL数据库服务器,需要进行配置。 安装连接PostgresSQL数据库可以参考博文:安装连接PostgresSQL数据库教程 一. 整体步骤 主要包括下面几个步…

Unity3D Shader 素描风格渲染管线实现详解

前言 在游戏开发中,渲染效果是非常重要的一部分,它可以直接影响游戏的视觉效果和玩家的体验。而素描风格的渲染效果是一种非常独特和有趣的风格,可以为游戏增添一种艺术氛围。在Unity3D中,可以通过编写Shader来实现素描风格的渲染…

家中R4S软路由iStoreOS配置内网穿透服务实现远程访问公司电脑桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是:** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能,也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

Deepin基本环境查看(十一)[补齐碎片之旅(中)-基本附件(输入法、记事本、写字板、计算器、画图、播放器、浏览器、远程桌面)

Deepin基本环境查看(十一)[补齐碎片之旅(中)-基本附件(输入法、记事本、写字板、计算器、画图、播放器、浏览器、远程桌面)] - 相关文章目录1、概述2、基础附件1)输入法2)记事本3&am…

天然肠衣市场分析:预计到2025年将达到45亿美元

肠衣作为包装香肠馅料的原材料一般分为可食用和不可食用两种,其中天然肠是由猪、羊等家畜多层肠道制作而成的,近些年来天然肠衣在全球市场需求不断增加。一、全球市场分析 1. 市场规模:根据市场研究机构的数据,2019年全球天然肠衣…

【Prometheus】node-exporter、server、Grafana安装与配置

基于Prometheus和K8S构建智能化告警系统 一、Prometheus对kubernetes的监控二、node-exporter组件安装和配置2.1、node-exporter介绍2.2、安装node-exporter【1】拉取镜像【2】编写yaml文件【3】运行pod【4】获取数据 三、Prometheus server安装和配置3.1、创建sa账号&#xff…

技能下载中:Sora视频让机器人秒学任何技艺!

视频:技能下载中:Sora视频让机器人秒学任何技艺! 引言 在机器人成为平凡工匠和前沿先驱的时代,我们正站在新黎明的边缘。本文将探讨斯坦福大学的通用操作接口(UMI)及其与OpenAI的Sora如何共同推进机器人技…

【Linux系统化学习】深入理解文件系统(Ext2文件系统)

目录 前言 磁盘的物理结构 物理结构 磁头和盘片工作解析图 盘面区域划分图(俯视盘面图) 扇区的寻址、定位(CHS定位) 磁盘存储的逻辑抽象结构 LBA定址 文件系统 磁盘分区 EXT2文件系统 组块中的信息介绍 查看inode编号…

AIGC专题:生成式人工智能在能源和材料领域中的新机遇

今天分享的是AIGC系列深度研究报告:《AIGC专题:生成式人工智能在能源和材料领域中的新机遇》。 (报告出品方:McKinsey & Company) 报告共计:11页 来源:人工智能学派 利用人工智能的力量…

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统

简介 使用工具: Python,PyQt ,Flask ,MySQL 注:制作重点在网页端,因此网页端的功能更全 WEB界面展示: 系统登录分为管理员,老师,学生3部分 管理员统一管理所有的账号信息以及登录…

jvm、jre、jdk的关系

jvm Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。 jre JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、J…

Servlet验证技术

验证技术 验证是验证用户信息并确定该用户是否有权访问服务器资源的过程。用于验证用户信息的各种验证技术包括: 基本验证基于表单的验证摘要验证客户机整数验证1. 基本验证 网站可能包含两种类型的网站,即受保护和不受保护网页。默认情况下,所有用户都可以访问不受保护或者…

【Java EE初阶十八】网络原理(三)

3. 网络层 网络层要做的事情主要是两方面: 1)、地址管理:制定一系列的规则,通过地址,描述出网络上一个设备的位置; 2)、路由选择:网络环境是比较复杂的,从一个节点到另一个节点之间,存在很…