YOLOv6-3.0-目标检测论文解读
文章目录
- 摘要
- 算法
- 2.1网络设计
- 2.2Anchor辅助训练
- 2.3自蒸馏
- 实验
- 消融实验
- 结论
论文: 《YOLOv6 v3.0: A Full-Scale Reloading 》
github: https://github.com/meituan/YOLOv6
上版本参考 YOLOv6
摘要
YOLOv6 v3.0中YOLOv6-N达到37.5AP,1187FPS;
YOLOv6-S达到45AP,484FPS;
扩展backbone及neck,YOLOv6-M/L达到50/52.8AP,耗时基本不变;
YOLOv6-L6在实时目标检测达到SOTA;图1中YOLOv6与其他版本进行比较。

YOLOv6贡献总结如下:
1、更新neck为RepBi-PAN,引入SiC模块及SimCSPSPPF Block;
2、使用对耗时无影响的AAT(Anchor-Aided Training)策略;
3、YOLOv6在backbone和neck中增加一个stage,强化在高分辨率输入下的表现;
4、引入一种自监督策略提升YOLOv6小模型性能,训练时使用高参数量DFL分支辅助训练回归分支,推理时去除,避免耗时增加。
算法
2.1网络设计
作者基于PAN,提出Bi-directional Concatenation(BiC)模块,如图2,融合backbone Ci-1层及Pi层特征,更多精确位置信号被保留,有利于小目标定位。
作者简化SPPF block为SimCSPSPPF Block,增强表达能力。YOLOv6中neck定义为RepBi-PAN。

2.2Anchor辅助训练
作者发现基于anchor的YOLOv6-N优于anchor-free方案,如表1

作者提出anchor辅助训练方案 (AAT)结合anchor-based及anchor-free优势,如图3,训练时辅助分支与anchor-free分支独立计算损失,辅助分支可帮助优化anchor-free head,推理时除去辅助分支,提升性能,速度不变。

2.3自蒸馏
上个版本YOLOv6中自监督损失函数如式1,使用DFL进行蒸馏框回归分支。

蒸馏早期教师模型使用软标签,随着训练进行硬标签更合适,因此作者对蒸馏权重使用余弦weight decay,如式3,

DFL将影响模型推理速度,对此作者设计Decoupled Localization Distillation(DLD),蒸馏时,学生装备原始回归分支和与DFL结合的辅助分支,教师仅使用辅助分支,原始回归分支使用硬标签训练,辅助分支使用硬标签及教师模型更新;蒸馏后,移除辅助分支。
实验
作者使用FP16精度进行各个方案比较,结果如表2,图1所示,

YOLOv6-N超越YOLOv5-N/YOLOv7-Tiny 9.5%/4.2%;
YOLOv6-S超越YOLOX-S/PPYOLOE-S 3.5%/0.9%,且耗时更短;
YOLOv6- M超越YOLOv5-M 4.6;
YOLOv6-L超越YOLOX-L/PPYOLOE-L 3.1%/1.4%;
与YOLOv8系列相比,性能接近。
作者类似YOLOv5在backbone 增加C6层用于检测更大目标,neck相应做出调整, 分别命名为YOLOv6- N6/S6/M6/L6;实验结果如表2,
与YOLOv5相比,性能提升,推理速度基本不变;
与YOLOv7-E6E相比,YOLOv6-L6性能提升0.4,耗时缩短63%;
消融实验
消融实验如表3,BiC+SimCSPSPPF使得性能提升0.6%;AAT使得性能提升0.3%;DLD使得性能提升0.7%;

BiC模块影响实验如表4,在PAN top-down路径插入BiC,YOLOv6-S/L性能提升0.6%/0.4%;但插入bottom-up路径为带来增益,作者分析由于bottom-up路径中BiC将导致检测头易混淆不同尺度特征;

表5表示不同类型SPP block影响,SimSPPF*3表示P3, P4 and P5层使用SimSPPF blocks,SimSPPCSPC在 YOLOv6-N/S上超越SimSPPF 1.6%/0.3%,但耗时增加;
在YOLOv6- N/S/M上,SimCSPSPPF超越SimSPPF 1.1%/0.4%/0.1%;
考虑到性能与耗时均衡,作者在YOLOv6-N/S使用SimCSPSPPF,YOLOv6-M/L使用SimSPPF blocks;

如表6,anchor辅助训练(AAT)在YOLOv6-S/M/L上,带来0.3%/0.5%/0.5%性能提升;在YOLOv6-N/S/M上小目标性能显著提升;

表7表明在YOLOv6-L上weight decay使得性能提升0.6%;

表8表明在YOLOv6-S上DLD带来0.7%性能提升;

结论
作者将YOLOv6进一步提升,在实时目标检测领域达到SOTA。
相关文章:
YOLOv6-3.0-目标检测论文解读
文章目录摘要算法2.1网络设计2.2Anchor辅助训练2.3自蒸馏实验消融实验结论论文: 《YOLOv6 v3.0: A Full-Scale Reloading 》github: https://github.com/meituan/YOLOv6上版本参考 YOLOv6摘要 YOLOv6 v3.0中YOLOv6-N达到37.5AP,1187FPS&…...
JAVA集合之Map >>HashMap/Hashtable/TreeMap/LinkedHashMap结构
Map 是一种键-值对(key-value)集合,键不可以重复,值可以重复。常见的实现类有:HashMap、Hashtable、TreeMap、LinkedHashMap等。 HashMap&Hashtable HashMap:数据结构为哈希表,允许使用 n…...
JavaScript从零开始 学习记录(一)
前言 选择视频课程之前,不仅查阅了资料,还询问了网友,最终敲定了学习黑马前端的视频教程,学了5小节,发现挺对自己口味的且从反响来看,还是相当不错的,便打算利用这个寒假学完 笔记范围 从这节…...
C++项目——高并发内存池(3)--central cache整体设计
1.central cache的介绍 1.1框架思想 1.1.1哈希映射 centralcache其实也是哈希桶结构的,并且central cache和thread cacha的哈希映射关系是一致的。目的为了,当thread cache某一个哈希桶下没有内存块时,可以利用之前编写的SizeClass::Index…...
Spring Boot 整合 MyBatis 配置等案例教程
运行环境:JDK 7 或 8、Maven 3.0 技术栈:SpringBoot 1.5、SpringBoot Mybatis Starter 1.2 、MyBatis 3.4 前言 距离第一篇 Spring Boot 系列的博文 3 个月了。《Springboot 整合 Mybatis 的完整 Web 案例》第一篇出来是 XML 配置 SQL 的形式。虽然 XM…...
比特数据结构与算法(第三章_下)队列的概念和实现(力扣:225+232+622)
一、队列(Queue)队列的概念:① 队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。② 入队列,进行插入操作的一端称为 队尾。出队列,进行删除操作的一端称为 队头。③ 队列中的元素…...
c++提高篇——STL容器实现打分系统
一、案例说明 有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。 二、案例实现 在实现这个系统时,我们规划一下实现的步骤以及细节: 1、创建一个选手类&#x…...
【图片上传记录三】element-ui组件详解与封装(自定义上传、限制文件大小、格式以及图片尺寸)
业务上有需求是前端上传 jpg/png/gif 格式, 并且 尺寸为 150px * 150px,300px*300px,428*428px 的图片 同时在上传的同时需要携带用户的个人信息以及其他额外信息 因此在 element-upload 基础之上 实现这个需求需要在上传前检查图片的大小,格式以及尺寸如何上传也成…...
一个golang版本管理工具
GitHub - moqsien/gvc: GVC is a productive tool to manage your dev environment for multi platforms and machines. | GVC 是一个用于快速配置和管理多机器跨平台的开发环境的生产力工具。 目前,gvc拥有以下功能或特点: go编译器自动安装和添加环…...
SpringBoot整合Spring Security过滤器链加载执行流程源码分析
文章目录1.引言2.Spring Security过滤器链加载1.2.注册名为 springSecurityFilterChain的过滤器2、查看 DelegatingFilterProxy类3.查看 FilterChainProxy类3.1 查看 doFilterInternal方法。3.2 查看 getFilters方法。4 查看 SecurityFilterChain接口5 查看 SpringBootWebSecur…...
Jest使用
一、测试到底测什么 提到测试的时候,即使是最简单的一个代码块可能都让初学者不知所措。最常问的问题的是“我怎么知道要测试什么?”。如果你正在写一个 Web 应用,那么你每个页面每个页面的测试用户交互的方式,就是一个很好的开端…...
定位于企业数字化底座,开箱可用(spring cloud+Vue)基础框架,赶紧收藏!
项目介绍:JVS是什么?JVS是企业级应用构建的基础脚手架,提供开箱即用的基础功能集成,其中集成了账户管理、租户管理、用户权限体系、三方登录、环境配置、各种业务日志等功能,还提供了对接低代码、数据中台的能力。JVS能…...
java字符统计
问题描述 给定一个只包含大写字母的字符串 � S, 请你输出其中出现次数最多的字符。 如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。 输入格式 一个只包含大写字母的字符串 � S. 输出格式 若干个大写字母,代表答案。 …...
C#:Krypton控件使用方法详解(第八讲) ——kryptonBreadCrumb
今天介绍的Krypton控件中的kryptonBreadCrumb,下面开始介绍这个控件的属性:首先要介绍的是RootItem属性和外观属性:RootItem属性组中包含属性如下:image属性:代表在文字对象的前方插入一个图片,属性值如下图…...
2023从0开始学性能(1) —— 性能测试基础【持续更新】
背景 不知道各位大佬有没遇到上面的情况,性能这个东西到底是什么,还是以前的358原则吗?明显并不是适用于现在了。多次想踏入性能测试门槛都以失败告终,这次就以系列的方式来督促自己真正踏进性能测试的门槛。 什么是性能测试 通…...
如何通过一台 iPhone 申请一个 icloud 邮箱账号 后缀为 @icloud.com
总目录 iOS开发笔记目录 从一无所知到入门 文章目录需求关键步骤步骤后续需求 在 iPhone 自带的邮箱软件中添加账号,排第一位的是 iCloud 邮箱: 选 iCloud 之后: 提示信息是exampleicloud.com,也就是说是有icloud.com为域的邮箱…...
SQL89 计算总和
描述OrderItems表代表订单信息,包括字段:订单号order_num和item_price商品售出价格、quantity商品数量。order_numitem_pricequantitya110105a211100a21200a421121a5510a2119a775【问题】编写 SQL 语句,根据订单号聚合,返回订单总…...
Netty高级应用之:编解码器与群聊天室开发
Netty高级应用之:编解码器与群聊天室开发 文章目录Netty高级应用之:编解码器与群聊天室开发Netty编解码器Java的编解码Netty编解码器概念解码器(Decoder)编码器(Encoder)编码解码器CodecNetty案例-群聊天室聊天室服务端编写聊天室客户端编写Netty编解码器…...
Vue的生命周期
Vue的生命周期是指Vue实例从创建到销毁的过程,它包括了以下几个阶段:初始化、编译、挂载、更新、渲染和销毁。 初始化:Vue实例创建时,会执行初始化过程,主要包括以下几个步骤: 初始化数据:Vue…...
MySQL —— 数据库基础
文章目录1. centos7 安装Mysql2. 数据库的概念3. 数据库下创建库,表4. 库,表 的本质5. 数据库服务器 和 库 ,表的关系6. MySQL架构7. 存储引擎前言: 数据库是对数据进行管理的软件。1. centos7 安装Mysql 需要把系统自带的MySQL给…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
