YoloV8 trick讲解

1.将 YOLOv5 的 C3结构换成了梯度流更丰富的 C2f结构:

C3

C3 模块的设计灵感来自 CSPNet,其核心思想是将特征图的部分通道进行分割和并行处理,目的是减少冗余梯度信息,同时保持较高的网络表达能力。C3 结构与传统的残差结构类似,但有一些关键改进。

C3 结构的具体组成如下:

  1. 输入特征图的分割

    • 将输入特征图分成两部分:一个部分直接传递到后续层,另一个部分通过多个卷积层和 Bottleneck 结构处理。
  2. Bottleneck 结构

    • 其中一部分特征图会经过多个 Bottleneck 结构,这些 Bottleneck 结构本质上是 ResNet 风格的残差块。
    • 每个 Bottleneck 块包含两个 3x3 卷积层,之间有一个跳跃连接(skip connection)。
    • Bottleneck 模块的数量可以根据需求调整,用来增加网络的深度。
  3. 特征图融合

    • 两部分特征图会在末端重新融合。这种设计可以通过减少冗余计算,保留更多的原始特征,同时通过 Bottleneck 提升特征提取的能力。
  4. 卷积操作

    • 最后,融合后的特征图会经过一次 1x1 卷积操作,用来进一步压缩通道数量,并输出到下一个网络层。

C2F

C2F 的核心概念

  1. 跨阶段连接(Cross-stage Connection)

    • 特征图传递:C2F 通过跨阶段连接将特征图从早期阶段传递到后期阶段,允许网络在不同层次之间传递信息。这种连接可以帮助保留来自不同阶段的特征,增强网络的表达能力。
    • 改进梯度流动:跨阶段连接有助于改善梯度流动,减少梯度消失问题,特别是在深层网络中。
  2. 特征融合(Feature Fusion)

    • 信息融合:C2F 将来自不同阶段或不同卷积块的特征图进行融合。这通常通过拼接(concatenation)、加法(addition)或其他融合操作来实现。
    • 多尺度特征整合:通过融合不同阶段的特征,C2F 能够整合多尺度信息,提高网络对不同尺度目标的检测能力。

C2F 的实现方式

  • 特征图的分段和连接

    • 输入特征图会被分成多个部分,这些部分分别经过不同的卷积层或网络块处理。然后,将这些处理后的特征图进行融合,以便在后续层中使用。
  • 融合操作

    • 常见的融合操作包括 拼接(concatenation)加法(addition)。拼接会增加特征图的通道数,而加法则会将特征图的通道数保持不变,通过逐元素相加的方式融合特征。
  • 特征图的处理

    • 跨阶段连接的特征图可以经过卷积层、激活函数等处理后再进行融合,以确保融合后的特征图能够有效地表示不同阶段的信息。

 2. Head改进

解耦头结构
 

Anchor-Based 换成了 Anchor-Free
 

YOLOv8 实现了 anchor-free 目标检测,这种方法不使用传统的 anchor boxes,而是通过其他技术来检测目标。YOLOv8 采用了几种创新的策略来实现 anchor-free 目标检测。以下是 YOLOv8 anchor-free 方法的实现思路和关键技术:

1. Center-based Detection

YOLOv8 采用了基于中心点的检测方法。与传统的 anchor-based 方法不同,YOLOv8 主要关注目标的中心点而不是预定义的 anchor boxes。具体来说,YOLOv8 使用以下方法来实现 center-based 检测:

  • 中心点预测:网络预测每个位置是否包含目标中心点,并回归目标的尺寸和类别。网络的输出包括每个像素点的中心点置信度和目标的相关属性(例如宽度、高度和类别)。

  • 热图(Heatmap):YOLOv8 通过生成目标中心点的热图来定位目标。热图显示了每个像素作为目标中心点的可能性。

2. 边界框回归

YOLOv8 使用回归方法来预测目标的边界框,而不是通过 anchor boxes 的方式。具体包括:

  • 目标尺寸回归:对于每个预测的中心点,网络会回归目标的宽度和高度。这种方法允许网络直接从图像中学习目标的真实尺寸,而不是依赖于预定义的 anchor boxes。

  • 边界框的定义:通过中心点和尺寸预测,可以生成完整的边界框。这种方法通常使用一组回归层来直接预测边界框的四个坐标值(中心坐标、宽度和高度)。

3. 边界框生成

边界框的生成方法与传统的 anchor-based 方法不同,主要包括:

  • 相对位置回归:网络回归目标边界框的相对位置和尺寸,而不是相对于 anchor boxes 的偏移量。

  • 目标中心点匹配:每个预测的边界框通过匹配目标的中心点来生成,这种方法不依赖于预定义的 anchor boxes。


目标检测中的解耦和耦合、anchor-free和anchor-base-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_55794606/article/details/142266086?spm=1001.2014.3001.5502

 3. LOSS改进

正负样本分配策略的改进

使用动态分配策略:TOOD

TOOD (Task-aligned One-stage Object Detection)

TOOD 是一种任务对齐的单阶段目标检测方法,最早由腾讯提出。它的核心思想是通过任务对齐机制同时优化分类和回归任务,从而提高检测精度。TOOD 提出了一个新的样本分配方法,称为任务对齐分配策略(Task Alignment Assignment, TAA)

概念和机制
  • 任务对齐(Task Alignment)

    • 传统的目标检测网络通常将分类任务和边界框回归任务分开进行处理,而 TOOD 通过设计任务对齐的检测头,将分类和回归任务联合优化。
    • 在 TOOD 中,样本的分类和回归任务共享权重,避免了任务之间的冲突。
  • 任务对齐样本分配(TAA)

    • TOOD 提出了任务对齐样本分配策略,目的是为分类和回归任务分配相同的正样本,而不是将分类和回归任务分离开。
    • TAA 首先计算每个 anchor 与 ground truth 之间的分类损失和回归损失,并通过综合这两种损失来动态选择正样本。
    • 它将那些同时在分类和回归上表现较好的 anchor 标记为正样本。
  • 正负样本的选择

    1. 分类和回归损失融合:TOOD 在样本分配时会同时考虑分类损失和回归损失,综合选择正样本。
    2. 正样本匹配:基于任务对齐的损失计算,选择那些能够在分类和回归任务上都有较好表现的 anchor 作为正样本。
    3. 负样本选择:没有满足正样本条件的 anchor 被标记为负样本。
优点
  • 任务对齐:通过联合优化分类和回归任务,解决了传统检测器中任务冲突的问题,提升了检测精度。
  • 动态分配:通过综合损失计算正负样本的分配,避免了传统方法中固定阈值导致的分配不合理问题。
  • 更高精度:TOOD 在多个数据集上表现出比传统方法更高的检测精度。

Loss计算

在 YOLOv8 的损失函数设计中,传统的 Objectness Loss 被取消,损失函数主要由以下两部分构成:

  • 分类损失(Classification Loss):用于评估类别预测的准确性。
  • 边界框回归损失(Bounding Box Regression Loss):用于评估预测框的定位准确性(通常使用 CIoU 或 DIoU 损失)+Distribution Focal Loss。

关键原因:

在 YOLOv8 中,目标检测任务采取了anchor-free的设计,并且模型不再单独预测目标置信度(objectness score)。在 YOLOv3 和 YOLOv4 中,objectness score 是一个用于判断某个预测框是否包含目标的置信度分数。YOLOv5 及之后的版本则逐渐简化了这一设计,而 YOLOv8 完全取消了这个置信度的预测。

替代机制:

  1. 动态分配样本:YOLOv8 通过动态样本分配机制直接从预测的分类和回归损失中确定正负样本,而不需要像之前那样依赖单独的目标置信度预测。模型通过对正负样本的高效分配,自动平衡正负样本之间的关系,从而不再需要目标置信度损失来辅助训练。

  2. 直接预测分类和回归:YOLOv8 不再通过单独的 objectness score 进行目标存在性判断,而是直接通过分类和回归任务的损失来训练模型。正样本的框即代表有目标,而负样本则代表没有目标。

  3. 更高效的计算:取消 objectness score 还简化了计算流程,使得模型在推理和训练过程中更加高效,减少了不必要的计算负担。

训练数据增强

数据增强方面和 YOLOv5 差距不大,只不过引入了 YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作。假设训练 epoch 是 500,其示意图如下所示:

1. Mosaic 数据增强简介

Mosaic 数据增强是一种在 YOLOv4 中首次引入的图像增强技术,旨在增强模型的泛化能力。它通过将 4 张不同的图像拼接在一起,形成一张新的训练图像。这个方法的核心优势在于:

  • 提供了丰富的场景变化(例如不同的目标尺寸、背景混合等)。
  • 增强了模型对小目标和目标分布变化的鲁棒性。
  • 增加了每个 mini-batch 中的样本多样性,帮助模型更好地学习不同的场景和目标。

Mosaic 使得模型可以在每次迭代中看到更加多样化的样本,从而提高模型的泛化能力。

2. 为什么最后 10 个 epoch 关闭 Mosaic?

虽然 Mosaic 数据增强有助于提高模型的泛化能力,但在训练的最后阶段关闭 Mosaic 可以帮助模型收敛得更好。这主要基于以下几点原因:

a. 提高收敛稳定性

在训练的早期和中期,数据增强有助于模型学习更广泛的特征,尤其是通过增加数据的多样性和复杂性来防止模型过拟合。然而,Mosaic 增强会带来一些不自然的图像拼接和畸变,特别是在图像边缘或拼接区域,这在训练的最后阶段可能影响模型的精细化学习。

关闭 Mosaic 数据增强后,模型会在最后的训练阶段接触到原始比例和结构的图像,从而帮助模型在更接近真实数据分布的样本上微调。这有助于提高检测精度和模型对真实数据的适应性。

b. 减少训练波动

Mosaic 数据增强会打破图像的原始结构,增加背景的复杂性,这在训练的早期可以帮助模型学习更复杂的特征。然而在训练的后期,模型可能更需要稳定的特征学习和优化。关闭 Mosaic 后,模型在标准样本上训练,可以减少不必要的复杂性和波动,进一步稳定模型的学习过程。

c. 提升小目标的精度

Mosaic 增强有助于提高小目标的检测性能,因为它在图像拼接中会改变目标的尺寸和位置。但在最后阶段,模型更需要在真实分布的图像上专注于精细定位。通过关闭 Mosaic,模型可以更好地处理原始图像中的小目标,避免被非自然的拼接干扰。

3. 实际操作中的影响

在 YOLOX 中,训练的最后 10 个 epoch 关闭 Mosaic 的操作被称为 "warm down" 机制。通过这一策略,模型在最后阶段训练过程中逐步回归到原始图像分布,以便:

  • 在标准的非增强图像上优化模型的最终权重。
  • 提高模型在真实场景下的检测性能。
  • 减少由于过度数据增强带来的不必要的预测偏差。

4. 模型推理过程

YOLOv8 的推理过程和 YOLOv5 几乎一样,唯一差别在于前面需要对 Distribution Focal Loss 中的积分表示 bbox 形式进行解码,变成常规的 4 维度 bbox,后续计算过程就和 YOLOv5 一样了。

其推理和后处理过程为:

(1) bbox 积分形式转换为 4d bbox 格式
对 Head 输出的 bbox 分支进行转换,利用 Softmax 和 Conv 计算将积分形式转换为 4 维 bbox 格式

(2) 维度变换
YOLOv8 输出特征图尺度为 80x80、40x40 和 20x20 的三个特征图。Head 部分输出分类和回归共 6 个尺度的特征图。 将 3 个不同尺度的类别预测分支、bbox 预测分支进行拼接,并进行维度变换。为了后续方便处理,会将原先的通道维度置换到最后,类别预测分支 和 bbox 预测分支 shape 分别为 (b, 80x80+40x40+20x20, 80)=(b,8400,80),(b,8400,4)。

(3) 解码还原到原图尺度
分类预测分支进行 Sigmoid 计算,而 bbox 预测分支需要进行解码,还原为真实的原图解码后 xyxy 格式。

(4) 阈值过滤
遍历 batch 中的每张图,采用 score_thr 进行阈值过滤。在这过程中还需要考虑 multi_label 和 nms_pre,确保过滤后的检测框数目不会多于 nms_pre。

(5) 还原到原图尺度和 nms
基于前处理过程,将剩下的检测框还原到网络输出前的原图尺度,然后进行 nms 即可。最终输出的检测框不能多于 max_per_img。


部分内容转载于:
YOLOv8详解 【网络结构+代码+实操】-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/zyw2002/article/details/128732494?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522F7865695-BD19-4765-8429-CABAFD84E7D1%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=F7865695-BD19-4765-8429-CABAFD84E7D1&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-128732494-null-null.142%5Ev100%5Econtrol&utm_term=yoloV8&spm=1018.2226.3001.4187

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PMBOK® 第六版 定义活动

目录 读后感—PMBOK第六版 目录 定义活动的过程强调专业分工,将工作包分解成不同的活动,再由专业人员将这些活动细化为具体任务,分配给项目成员完成。 在软件开发项目中,定义活动将项目流程细化为需求分析、系统设计、编码、测试…

了解MySQL 高可用架构:主从备份

为了防止数据库的突然挂机,我们需要对数据库进行高可用架构。主从备份是常见的场景,通常情况下都是“一主一从/(多从)”。正常情况下,都是主机进行工作,从机进行备份主机数据,如果主机某天突然意外宕机,从机…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU ? 什么是 GPU ? GPU vs CPU 差异性对比分析 GPU 是如何工作的 ? GPU 与 CPU 是如何协同工作的 ? GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU ? CPU(中央处理器)…

学习大数据DAY57 新的接口配置

作业  完成 API 接口和文件的接入, 并部署到生产调度平台, 每个任务最后至少 要有两条 不报错 的日志, 报错就驳回作业  作业不需要复制日志 API Appliation Program Interface 应用程序接口 > JSON 的地址 客户需求: 把 https://zhiyun.pub:9099/site/c-class…

nginx安装及vue项目部署

安装及简单配置 在usr/local下建好nginx文件夹,下载好nginx-1.26.2.tar.gz压缩文件.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel gcc、gcc-c # 主要用来进行编译相关使用 openssl、ope…

大模型笔记03--快速体验dify

大模型笔记03--快速体验dify 介绍部署&测试部署 dify测试dify对接本地ollama大模型对接阿里云千问大模型在个人网站中嵌入dify智能客服 注意事项说明 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)…

使用mlp算法对Digits数据集进行分类

程序功能 这个程序使用多层感知机(MLP)对 Digits 数据集进行分类。程序将数据集分为训练集和测试集,创建并训练一个具有两个隐藏层的 MLP 模型。训练完成后,模型对测试数据进行预测,并通过准确率、分类报告和混淆矩阵…

鸿蒙 ArkUI组件二

ArkUI组件(续) 文本组件 在HarmonyOS中,Text/Span组件是文本控件中的一个关键部分。Text控件可以用来显示文本内容,而Span只能作为Text组件的子组件显示文本内容。 Text/Span组件的用法非常简单和直观。我们可以通过Text组件来显…

Spring-IOC容器-ApplicationContext

IOC:Inversion of Control 控制反转,是一种设计原则,spring 中通过DI(dependency Injection)来具体实现。 比如原本对象的实例化,是通过程序主动New出来,IOC中的对象实例交给Spring框架来实例化&#xff0…

TDengine 与 SCADA 强强联合:提升工业数据管理的效率与精准

随着时序数据库(Time Series Database)的日益普及,越来越多的工业自动化控制(工控)人员开始认识到其强大能力。然而,时序数据库在传统实时数据库应用领域,特别是在过程监控层的推广仍面临挑战&a…

使用docker配置wordpress

docker的安装 配置docker yum源 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo下载最新版本docker sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-…

门磁模块详解(防盗感应开关 STM32)

目录 一、介绍 二、程序设计 main.c文件 gate_guard.h文件 gate_guard.c文件 三、实验效果 四、资料获取 项目分享 一、介绍 MC-38常闭式门磁开关是作为IO开关输入数字信号的,原理是合在一起信号是导通的 , 配合有线主机使用 不能单独使用。适用于非铁质&a…

Linux——应用层自定义协议与序列化

目录 一应用层 1再谈 "协议" 2序列化与反序列化 3理解read,write,recv,send 4Udp vs Tcp 二网络版本计算器 三手写序列和反序列化 四进程间关系与守护进程 1进程组 1.1什么是进程组 1.2组长进程 2会话 2.1什么是会话 2.2会话下的前后台进程 3作业控…

08_Python数据类型_字典

Python的基础数据类型 数值类型:整数、浮点数、复数、布尔字符串容器类型:列表、元祖、字典、集合 字典 字典(Dictionary)是一种可变容器模型,它可以存储任意类型对象,其中每个对象都存储为一个键值对。…

C++ | Leetcode C++题解之第407题接雨水II

题目&#xff1a; 题解&#xff1a; class Solution { public:int trapRainWater(vector<vector<int>>& heightMap) {int m heightMap.size(), n heightMap[0].size();int maxHeight 0;int dirs[] {-1, 0, 1, 0, -1};for (int i 0; i < m; i) {maxHei…

python中的各类比较与计算

运算符 1.算数运算符2.关系运算符3.逻辑运算符4.关于短路求值5.赋值运算符1&#xff09;的使用链式赋值多元赋值 2)复合赋值运算符 6.位运算符7.成员运算符8.身份运算符 1.算数运算符 # 加 print(1 2) # 减 print(2 - 1) # 乘 print(1 * 2) # 余数 4%31余数为1 print(4 % 3…

【Redis】之Geo

概述 Geo就是Geolocation的简写形式&#xff0c;代表地理坐标。在Redis中&#xff0c;构造了能够存储地址坐标信息的一种数据结构&#xff0c;帮助我们根据经纬度来检索数据。 命令行操作方法 GEOADD 可以用来添加一个或者多个地理坐标。 GEODIST 返回一个key中两个成员之…

F12抓包11:UI自动化 - Recoder(记录器)

课程大纲 使用场景&#xff08;导入和导出&#xff09;: ① 测试的重复性工作&#xff0c;本浏览器录制并进行replay&#xff1b; ② 导入/导出录制脚本&#xff0c;移植后replay&#xff1b; ③ 导出给开发进行replay复现bug&#xff1b; ④ 进行前端性能分析。 1、录制脚…

微软数据库的SQL注入漏洞解析——Microsoft Access、SQLServer与SQL注入防御

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 。…

pytorch快速入门(一)—— 基本工具及平台介绍

前言 该pytorch学习笔记应该配合b站小土堆的《pytorch深度学习快速入门教程》使用 环境配置&#xff1a;Anaconda Python编译器&#xff1a;pycharm、jupyter 两大法宝函数 dir&#xff08;&#xff09;&#xff1a;知道包中有什么东西&#xff08;函数 / 属性..…