YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml

前言:Hello大家好,我是小哥谈。YOLOv5配置了5种不同大小的网络模型,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5n是网络深度和宽度最小但检测速度最快的模型,其他4种模型都是在YOLOv5n的基础上不断加深、加宽网络使得网络规模扩大,在增强模型检测性能的同时增加了计算资源和速度消耗。出于对检测精度、模型大小、检测速度的综合考量,本文选择普遍使用的YOLOv5s作为研究对象进行介绍。🌈

 前期回归:

     YOLOv5源码中的参数超详细解析(1)— 项目目录结构解析

           目录

🚀1.什么是yaml

🚀2.参数配置

🚀3.先验框配置

🚀4.Backbone部分

🚀5.Head部分

🚀6.整体模型

🚀1.什么是yaml

YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。YAML的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),主要强调这种语言是以数据为中心,而不是以标记语言为重心,例如像xml语言就会使用大量的标记。🌷

YAML是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表、标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。🌴

YAML是一个类似 XML、JSON 的标记性语言,YAML 的设计目标是:

  • 人类容易阅读
  • 可用于不同程序间的数据交换
  • 适合描述程序所使用的数据结构,特别是脚本语言
  • 丰富的表达能力与可扩展性
  • 易于使用

说明:

YAML 与 XML、JSON的对比♨️♨️♨️

  • YAML 与 XML

    • 具有 XML 同样的优点,但比 XML 更加简单、敏捷等。
  • YAML 与 JSON

    • JSON 可以看作是 YAML 的子集,也就是说 JSON 能够做的事情,YAML 也能够做。

    • YAML能表示得比 JSON 更加简单和阅读,例如“字符串不需要引号”。所以 YAML 容易可以写成 JSON 的格式,但并不建议这种做。

    • YAML 能够描述比 JSON 更加复杂的结构,例如“关系锚点”可以表示数据引用(如重复数据的引用)。


🚀2.参数配置

详解:

nc:数据集类别个数

depth_multiple:模型深度,用于控制层的重复的次数(深度)。通过深度参数depth gain在搭建每一层的时候,子模块数量=int(number*depth),这样就可以起到一个动态调整模型深度的作用。

width_multiple:模型的宽度,用于控制输出特征图的通道数(宽度)。在模型中间层的每一层的卷积核的数量=int(number*width),这样也可以起到一个动态调整模型宽度的作用。


🚀3.先验框配置

YOLOV5使用k-means聚类法来初始化了9个anchors,任意地选择了9个聚类和3个尺度,然后在各个尺度上均匀地划分聚类。🌾

在COCO数据集上,这9个聚类

(10×13)(16×30)(33×23),(30×61)(62×45)(59×19)(116×90)(156×198) (373x326)

这9个anchor分别在三个Detect层的feature map中使用,每个feature map的每个grid_cell都有三个anchor进行预测。具体如下图所示:

特征图13*1326*2652*52
感受野
先验框(116×90),(156×198),(373×326)(30*61),(62*45),(59*119)(10*13),(16*30),(33*23)

🚀4.Backbone部分

首先介绍 [from, number, module, args] 这四个参数:

from:表示该层的输入从哪来。-1表示输入取自上一层,-2表示上两层,3表示第3层(从0开始数),[-1, 4]表示取自上一层和第4层,依次类推。网络层数的数法在注释里已经标出来了,从0开始,每一行表示一层,例如0-P1/2表示第0层,特征图尺寸为输入的1/21。

number:表示该层模块堆叠的次数,对于C3、BottleneckCSP等模块,表示其子模块的堆叠,具体细节可以查看源代码,当然最终的次数还要乘上depth_multiple系数。

module:表示该层模块的名称,这些模块写在common.py中,进行模块化的搭建网络。

args:表示类的初始化参数,用于解析作为 moudle 的传入参数,会在网络搭建过程中根据不同层进行改变。

关于上述代码各层解释如下所示:👇

第1层是一个卷积层,输出通道数为 64,卷积核大小为 6x6,步长为 2,填充为 2,输出特征图大小为输入的一半。
第2层是一个卷积层,输出通道数为 128,卷积核大小为 3x3,步长为 2,输出特征图大小为输入的一半。
第3层是一个 C3 模块,包含 3 个卷积层,每个卷积层的输出通道数为 128,卷积核大小分别为 1x1、3x3、1x1,不改变特征图大小。
第4层是一个卷积层,输出通道数为 256,卷积核大小为 3x3,步长为 2,输出特征图大小为输入的一半。
第5层是一个 C3 模块,包含 6 个卷积层,每个卷积层的输出通道数为 256,卷积核大小分别为 1x1、3x3、1x1,不改变特征图大小。
第6层是一个卷积层,输出通道数为 512,卷积核大小为 3x3,步长为 2,输出特征图大小为输入的一半。
第7层是一个 C3 模块,包含 9 个卷积层,每个卷积层的输出通道数为 512,卷积核大小分别为 1x1、3x3、1x1,不改变特征图大小。
第8层是一个卷积层,输出通道数为 1024,卷积核大小为 3x3,步长为 2,输出特征图大小为输入的一半。
第9层是一个 C3 模块,包含 3 个卷积层,每个卷积层的输出通道数为 1024,卷积核大小分别为 1x1、3x3、1x1,不改变特征图大小。
第10层是一个 SPPF 层,具有金字塔式空间池化(Spatial Pyramid Pooling),输出通道数为 1024,使用大小为 5x5 的金字塔空间池化。

🚀5.Head部分

YOLOv5中的Head包括NeckDetect两部分。Neck采用了FPN+PAN结构,Detect结构和YOLOV3中的Head一样。其中BottleNeckCSP带有False,说明没有使用残差结构,而是采用的backbone中的Conv。🌺

四个参数和上面 backbone 一样,这里就不再解释了。🌺

说明:

搭配着yolo.py一起看,会更清晰每个参数的作用。🍺🍺🍺


🚀6.整体模型


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

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

相关文章

深度补全算法-CompletionFormer-已开源效果最好

《CompletionFormer: Depth Completion with Convolutions and Vision Transformers 》 摘要 给定稀疏深度和相应的 RGB 图像,深度补全旨在整个图像中空间传播稀疏测量值,以获得密集的深度预测。尽管基于深度学习的深度补全方法取得了巨大进步&#xff0…

分清性能测试,负载测试,压力测试这三个的区别

做测试一年多来,虽然平时的工作都能很好的完成,但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺,所以,在工作之余也做了一些测试方面的知识的补充。不足之处,还请大家多多交流,互相学习。 …

从 GPT4All 体验 LLM

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 什么是 GPT4All? 术语“GPT”源自 Radford 等人 2018 年论文的标题“通过生成预训练提高语言理解”。本文描述了如何证明变压器模型能够理解人类语言。 从那时起,许多人尝试使用转…

UNIX 入门

与 UNIX 建立连接启动会话登录命令提示符修改口令退出系统 简单的 UNIX 命令命令格式ls 命令who 命令虚拟终端 tty伪终端 ptywho am i 命令 cal 命令help 命令man 命令 shell 概述shell 命令更换 shell临时更改 shell永久更改 shell 登录过程 与 UNIX 建立连接 启动会话 要启…

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

Matlab之利用MarkerFaceColor来填充marker

matlab画图在加一些marker的时候, 有实心的圆圈, 比如: plot(x,y,.r,MarkerSize,20)但是如果想要一个很大的marker, 就需要把这个markersize调得很大, 比如MarkerSize20 但是也可以用空心的圆圈然后把中间涂上颜色, 这样调整起来更方便. 比如: plot(x,y,or,MarkerSize,5,Mar…

【LeetCode每日一题】——219.存在重复元素II

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 哈希表 二【题目难度】 简单 三【题目编号】 219.存在重复元素II 四【题目描述】 给你一个…

MySQL多实例下安装不同的版本

MySQL多版本安装 主要步骤&#xff1a; 1. 在/etc/my.cnf 配置中&#xff0c;更改对应配置。相对于同一版本多实例需要配置的参数&#xff0c;不同版本多实例需要多配置basedir参数&#xff0c;指向mysql的解压目录。 2. 初始化数据目录。进入对应解压的MySQL目录&#xff…

如何使用Kafka构建事件驱动的架构

事件驱动的架构(EDA)是一种软件设计模式&#xff0c;它关注事件的生成、检测和使用&#xff0c;以支持高效和可扩展的系统。在EDA中&#xff0c;事件是组件之间通信的主要手段&#xff0c;允许它们实时交互和响应更改。这种架构促进了松散耦合、可扩展性和响应性&#xff0c;使…

【JAVA】有关时间的操作在编程中如何实现?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言Date 类Date 类方法Data的缺陷实例获取当前日期时间日期比较java中设置date数据的显示格式 前言 在许多应用程序中&#xff0c;日期和时间的处理是必不可少的。Java提供了一…

C语言数组第十课---------------三子棋-------数组经典练手题

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; &#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382;…

【数据结构】带你图文结合深入栈和队列,并具体分步实现

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们继续来学习初阶数据结构的内容&#xff0c;今天我们要讲的是栈与队列部分的内容&#xff0c;这篇博客先讲栈&#xff0c;队列我们放到下次再讲 好了&#xff0c;废…

PY32F003 FLASH

了解py32芯片的flash内容&#xff0c;对于py32进行api升级有更好的了解的操作 //uiOffset 0(4MHz), 1(8MHz), 2(16MHz), 3(22.12MHz), 4(24MHz) void SetFlashParameter(uint32_t uiOffset) {WRITE_REG(FLASH->KEYR, FLASH_KEY1);WRITE_REG(FLASH->KEYR, FLASH_KEY2); …

解决Error running XXXApplicationCommand line is too long.报错

测试IDEA版本&#xff1a;2019.2.4 &#xff0c;2020.1.3 文章目录 一. 问题场景二. 报错原因2.1 为什么命令行过长会导致这种问题? 三. 解决方案3.1 方案一3.2 方案二 一. 问题场景 当我们从GitHub或公司自己搭建的git仓库上拉取项目代码时&#xff0c;会出现以下错误 报错代…

PHP8的循环控制语句-PHP8知识详解

我们在上一节讲的是条件控制语句&#xff0c;本节课程我们讲解循环控制语句。循环控制语句中&#xff0c;主要有for循环、while循环、do...while循环和foreach循环。 在编写代码时&#xff0c;经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务&#xff0c;而不是…

GWJDN-400型2MHZ自动平衡高温介电温谱仪

GWJDN-400型2MHZ自动平衡高温介电温谱仪 GWJDN-400型2MHZ自动平衡高温介电温谱仪 关键词&#xff1a;介电常数&#xff0c;高温介电&#xff0c;自动平衡 主要功能&#xff1a; 材料介电常数测试仪 半导体材料的介电常数、导电率和C-V特性液晶材料:液晶单元的介电常数、弹性…

新能源汽车交流充电桩控制主板的功能维度

新能源汽车交流充电桩控制主板的功能维度 交流充电桩主板是电动汽车充电站的关键组件&#xff0c;它负责控制充电过程&#xff0c;保护设备和电网免受电动汽车充电的冲击。它具有控制、保护、检测、报警和记录等功能&#xff0c;可以有效地控制充电过程&#xff0c;保证交流充电…

dueling network原理和实现

算法原理&#xff1a; Q ( s , a ; θ , α , β ) V ( s ; θ , β ) ( A ( s , a ; θ , α ) − max ⁡ a ′ ∈ ∣ A ∣ A ( s , a ′ ; θ , α ) ) . \begin{gathered}Q(s,a;\theta,\alpha,\beta)V(s;\theta,\beta)\left(A(s,a;\theta,\alpha)-\max_{a\in|\mathcal{A}…

文件或目录损坏且无法读取

如上图报错&#xff0c;我们直接用cmd命令输入【CHKDSK C: /F】然后回车 电脑重启后可以了&#xff0c;希望能帮助各位小伙伴

知识付费系统开发:构建高效智能的付费内容平台

随着数字化时代的来临&#xff0c;知识付费正迅速崭露头角&#xff0c;为知识创作者和求知者带来了全新的商机。在这个背景下&#xff0c;开发一款高效智能的知识付费系统成为了一项重要的任务。本文将深入探讨如何基于Python编程语言和相关技术构建一个智能的知识付费内容平台…