YoloV10-yaml文件理解

news2024/12/25 9:25:13

        最近在学习和尝试改进yolov结记录一下原始代码的理解,希望大佬指正.10,在这里总

        [1] 论文:https://arxiv.org/abs/2405.14458

        [2] 代码:GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]

        

YOLOv10的新特性

        1. 无NMS训练

        YOLOv10的一大亮点是其无NMS训练。传统的YOLO模型使用NMS来过滤重叠的预测,这增加了推理延迟。YOLOv10引入了一种双重分配策略,消除了NMS的需求,从而实现了更快、更高效的目标检测。

        双重分配策略解释:

        一对多分配:在训练过程中使用,以提供丰富的监督信号。

        一对一分配:在推理过程中使用,以避免冗余预测。

        通过使用一致的匹配度量协调这两种策略,YOLOv10在不牺牲性能的情况下实现了高效率。

        2. 整体效率-准确性驱动设计 

        YOLOv10采用了一种全面的模型设计方法,优化了各种组件以提高效率和准确性。以下是一些关键创新:

        轻量化分类头:通过使用深度可分离卷积,减少分类头的计算开销,而不显著影响性能。

        空间-通道解耦下采样:通过分离空间缩减和通道增加操作,增强下采样效率,减少信息损失。

        秩引导块设计:根据模型不同阶段的内在冗余,调整构建块的复杂度,确保参数的最佳利用。

        3. 大核卷积和部分自注意力

        为了进一步提高准确性,YOLOv10集成了大核卷积和部分自注意力(PSA)模块。这些组件提高了模型捕捉全局信息的能力,同时保持计算效率。

        大核卷积:在较深阶段有选择地使用,以扩大感受野而不显著增加I/O开销。

        PSA模块:以成本效益的方式引入自注意力,提升模型学习全局表示的能力

       yaml文件理解

          yolov10n.yaml文件源码如下.

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024] 

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 19 (P4/16-medium)

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5)

        这里我将从上到下进行解释.

Parameters(参数)

        nc:是类别数目,原文是80,若我的数据集的类别是10,则改为10

        scales:是模型尺度,不同的尺度模型的参数和计算量不同,上文是n模型,但是其实yolov10的作者还提供了其他模型,如下图所示.

        其中每个模型的三个参数分布是depth (深度因子),width(宽度因子),max_channels(最大通道数)

        depth 网络模型深度因子 : 表示模型种重复模块的数量或层数的缩放比例(仅在repeats≠1时启用),后面举例表示其应用

        width:宽度因子 表示模型中通道数(特征图的深度)的缩放比例 计算实际的通道数,主要作用于args中的ch_out(如第一个conv层,ch_out=64 ,那么在实际的运算过程中,会将其卷积核设为 64 * 0.25 = 16 ,故其会输出16通道的特征图)

        amx_channels:每层的最大通道数 每层的通道数会与这个参数进行一个对比,如果特征图通道数大于这个数,那就取 max_channels的值。

backbone(主干)

        backbone用于提取图像特征,为目标检测任务提供基础特征表示

        [from,repeats,module,args]

         from: -n 代表是从前n层获得的输入 代表从前一层获得输入

         repeats 表示网络模块的数目

         Module表示网络模块的名称

         args :表示向不同模块内传递的参数[ch_out,kernel,stride,padding,groups] 没有ch_in,因为输入都是上层的输出

        特征图公式:Feature_new = (Feature_old - kernel + 2 * padding) / stride + 1

        例

                首层input : 3*640*640

                [ch_out,kernel,stride] = [64,3,2]

                Feature_new = (640 - 3 + 2*1)/2 + 1 = 320

                就是得到了P1/2的特征图,为 64 * 320 *320,通道数从3变成64,使得网络能够捕捉到更多的特征信息,提高网络的表达能力,同时减小特征图的空间维度,减少后续层的计算量,有助于网络的计算效率提升,同时卷积操作本身也增强了特征提取能力.

        带注释的代码如下:

  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2   第0层:使用64个3x3的卷积核,步幅为2进行卷积,得到P1/2特征图
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4  第1层:使用128个3x3的卷积核,步幅为2进行卷积,得到P2/4特征图:
  - [-1, 3, C2f, [128, True]]           #第2层:进行3次C2f操作,每次操作使用128个通道,最后一次操作使用降维(True)
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8 #第3层:使用256个3x3的卷积核,步幅为2进行卷积,得到P3/8特征图,
  - [-1, 6, C2f, [256, True]]           #第4层:进行6次C2f操作,每次操作使用256个通道,最后一次操作使用降维(True)
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16第5层:使用512个3x3的卷积核,步幅为2进行卷积,得到P4/16特征图。
  - [-1, 6, C2f, [512, True]]           #第6层:进行6次C2f操作,每次操作使用512个通道,最后一次操作使用降维(True)
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32 第7层:使用1024个3x3的卷积核,步幅为2进行卷积,得到P5/32特征图
  - [-1, 3, C2f, [1024, True]]          #第8层:进行3次C2f操作,每次操作使用1024个通道,最后一次操作使用降维(True)
  - [-1, 1, SPPF, [1024, 5]] # 9        第9层:使用1024个通道的SPPE(空间金字塔池化)层,使用5个不同大小的池化核进行池化操作。
  - [-1, 1, PSA, [1024]] #第10层使用 PSA 机制对上一层的输出进行逐点空间注意力处理,生成具有更高关注度的特征图。这一层的作用在于提高模型对重要特征的关注度,从而增强模型的表现力

                先举例说明上面的depth的作用,去[-1,3,C2f,[128,True]]进行说明,这里的repeats是3,depth = 0.33,3 * 0.33 = 1,表示这个cf模块在Bottelneck中只重复一次

head(头部)

        head: 用于生成目标检测结.在目标检测任务中,“目标检测结” 实际上是指目标检测网络的输出部分,也称作 “检测头”(Detection Head)。检测头的作用是预测图像中各个目标的位置(通常是边界框)以及目标的类别.

        它的具体运算和上面的backnone类似这里不再进行解释,含有部分注释的代码如下.

# YOLOv8.0n head
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]  #上采样  #第0层:使用最近邻上采样(nn.WRsample)将特征图尺寸放大两倍
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4 ##第1层:将backbone提取的P4特征图与当前特征图进行拼接(Concat),生成新的特征图
  - [-1, 3, C2f, [512]] # 12#第2层:进行3次C2f操作,使用512个通道,得到第12个特征图。

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]  #第3层:使用最近邻上采样将特征图尺寸放大两倍。
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3 #第4层:将backbone提取的P3特征图与当前特征图进行拼接,生成新的特征图。
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)      第5层:进行3次C2f操作,使用256个通道,得到第15个特征图(P3/8-small)。

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 19 (P4/16-medium)

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large) #c2fcib是C2f模块的一个变种,结合了cIB(Channel-wise Information Bottleneck)模块,用于进一步压缩特征信息。

  - [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5) #YOLOv10 检测头,从特征图中提取目标位置和类别信息,生成预测框。
#这部分主要多出3个操作nn.Upsample、Concat、Detect,解释如下:
#nn.Upsample:表示上采样,将特征图大小进行翻倍操作。比如将大小为20X20的特征图,变为40X40的特征图大小。
#Concat:代表拼接操作,将相同大小的特征图,通道进行拼接,要求是特征图大小一致,通道数可以不相同。例如[-1, 6]:-1代表上一层,6代表第六层(从第0层开始数),将上一层与第6层进行concat拼接操作。
#Detect的from有三个数,15,18,21,这三个就是最终网络的输出特征图,分别对应P3,P4,P5。

        网络模型图 

        这里展示了网上看到的毕竟完整的模型图

        1.backbone

        2.head

 

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

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

相关文章

Flutter:city_pickers省市区三级联动

pubspec.yaml city_pickers插件地址 自己用的GetBuilder页面模板 cupertino_icons: ^1.0.8 # 省市区城市选择 city_pickers: ^1.3.0编辑地址页面&#xff1a;controller class AddressEditController extends GetxController {AddressEditController();Future<Result?>…

【C语言】结构体(一)

一&#xff0c;是什么 结构体就是一些值的集合&#xff0c;这些值称为成员变量。 结构体的每个成员可以是不同类型的变量。说到集合&#xff0c;数组也是集合&#xff0c;但是不同的是数组只能是相同类型元素的集合。 二&#xff0c;结构体的声明 struct tag {   member1;…

请求头referer #号后的截掉了

解决办法&#xff1a; 用传参方式不要用refer和Refer&#xff0c;用其它名字

PostgreSQL最常用数据类型-重点说明自增主键处理

简介 PostgreSQL提供了非常丰富的数据类型&#xff0c;我们平常使用最多的基本就3类&#xff1a; 数字类型字符类型时间类型 这篇文章重点介绍这3中类型&#xff0c;因为对于高并发项目还是推荐&#xff1a;尽量使用简单类型&#xff0c;把运算和逻辑放在应用中&#xff0c;…

【深度学习】四大图像分类网络之ResNet

ResNet网络是在2015年由微软实验室中的何凯明等几位提出&#xff0c;在CVPR 2016发表影响深远的网络模型&#xff0c;由何凯明团队提出来&#xff0c;在ImageNet的分类比赛上将网络深度直接提高到了152层&#xff0c;前一年夺冠的VGG只有19层。斩获当年ImageNet竞赛中分类任务第…

基于树莓派的安保巡逻机器人--项目介绍

目录 一、项目简介 二、项目背景 三、作品研发技术方案 作品主要内容&#xff1a; 方案的科学性 设计的合理性 四、作品创新性及特点 五、作品自我评价 本篇为项目“基于树莓派的安保巡逻机器人”介绍博客 演示视频链接&#xff1a; 基于树莓派的安保巡逻机器人_音游…

nn.RNN解析

以下是RNN的计算公式,t时刻的隐藏状态H(t)等于前一时刻隐藏状态H(t-1)乘以参数矩阵&#xff0c;再加t时刻的输入x(t)乘以参数矩阵&#xff0c;最后再通过激活函数&#xff0c;等到t时刻隐藏状态。 下图是输出input和初始化的隐藏状态&#xff0c;当参数batch_first True时候&…

Unity网络框架对比 Mirror|FishNet|NGO

在Unity中制作非单机项目常用的免费网络框架&#xff0c;这里选取了三款比较火的网络框架&#xff0c;Mirror、FishNet和Netcode for GameObject(NGO)。 比较了最常用的免费网络解决方案。可能还有值得探索的付费选项。您需要对此进行自己的研究。数据表格更新日志截止到&#…

【C++】深度剖析 scanf 函数:原理、应用与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;scanf 函数的基本原理&#x1f4af;基本用法示例常见占位符示例 &#x1f4af;使用 scanf 时的注意事项&#x1f4af;引入 cstdio 头文件&#x1f4af;scanf 与 cin 的对比…

YOLOv1 (You Only Look Once)

YOLO (You Only Look Once) 是一种经典的目标检测算法&#xff0c;旨在通过一个统一的卷积神经网络&#xff08;CNN&#xff09;进行目标检测&#xff0c;最大化检测速度并保持较高的精度。YOLO 在目标检测领域产生了巨大的影响&#xff0c;并且经过了多个版本的迭代。下面是 Y…

【Verilog】实验二 数据选择器的设计与vivado集成开发环境

目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理 五、实验步骤 top.v mux2_1.v 一、实验目的 1. 掌握数据选择器的工作原理和逻辑功能。 2. 熟悉vivado集成开发环境。 3. 熟悉vivado中进行开发设计的流程。 二、实验环境 1. 装有vivado的计算机。 2. Sw…

【CSS in Depth 2 精译_063】10.2 深入理解 CSS 容器查询中的容器

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 ✔️ 10.2.1 容器的类型 ✔️10.2.2 容器的名称 ✔️10.2.3 容器与模块化 CSS ✔️ 10.3…

今天我们来聊聊Maven中两个高级的概念—— 插件和目标

插件&#xff08;plugin&#xff09; Maven的核心是一个插件执行框架;所有的工作都是由插件完成的。 Maven中Plugin分为两种类型&#xff1a; build类型Plugin只能在build阶段执行&#xff0c;在POM中需要在 <build/> 标签下进行配置。 reporting类型&#xff1a;在si…

【触想智能】自动售票机选择工控一体机配套的原因分析

自动售票机是现代公共交通系统中常见的设备之一&#xff0c;它能够方便、快速地为乘客提供票务服务。为了实现高效、可靠的运营&#xff0c;许多自动售票机都采用工控一体机作为核心控制硬件。 触想工控一体机TPC-W200系列 下面&#xff0c;触想智能小编为大家分析为什么自动售…

[计算机网络] HTTP/HTTPS

一. HTTP/HTTPS简介 1.1 HTTP HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上&#xff0c;通常使用端口 …

element-ui的下拉框报错:Cannot read properties of null (reading ‘disabled‘)

在使用element下拉框时&#xff0c;下拉框option必须点击输入框才关闭&#xff0c;点击其他地方报错&#xff1a;Cannot read properties of null (reading disabled) 造成报错原因&#xff1a;项目中使用了el-dropdown组件&#xff0c;但是在el-dropdown里面没有定义el-dropdo…

新一代零样本无训练目标检测

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

30.100ASK_T113-PRO 用QT编写视频播放器(一)

1.再buildroot中添加视频解码库 X264, 执行 make menuconfig Target packages -->Libraries --> Multimedia --> X264 CLI 还需要添加 FFmpeg 2. 保存,重新编译 make all 3.将镜像下载开发板

Python办公自动化,批量生成Excel案例数据集

在数据分析的世界里&#xff0c;数据是核心&#xff0c;而如何高效地生成和处理数据则成为每位数据分析师必备的技能之一。今天&#xff0c;我们要探讨一个有趣的话题——“造数”。 但这里的“造数”并非意味着编造数据&#xff0c;而是指在确保数据安全的前提下&#xff0c;…

在线绘制Nature Communication同款双色、四色火山图,突出感兴趣的基因

导读&#xff1a;火山图通常使用三种颜色分别表示显著上调&#xff0c;显著下调和不显著。通过为特定的数据点添加另一种颜色&#xff0c;可以创建双色或四色火山图&#xff0c;从而更直观地突出感兴趣的数据点。 《Nature Communication》文章“Molecular and functional land…