深度学习笔记36-yolov5s.yaml文件解读

  •   🍨 本文为🔗365天深度学习训练营中的学习记录博客
  • 🍖 原作者:K同学啊

yolov5s.yaml源文件

yolov5s.yaml源文件的代码如下

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters
nc: 20 #80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:- [10,13, 16,30, 33,23]  # P3/8- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]],  # 9]# YOLOv5 v6.0 head
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # cat backbone P4[-1, 3, C3, [512, False]],  # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]],  # cat backbone P3[-1, 3, C3, [256, False]],  # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]],  # cat head P4[-1, 3, C3, [512, False]],  # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5[-1, 3, C3, [1024, False]],  # 23 (P5/32-large)[[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]

可以看到大致分为这四个部分:    Parametersanchorbackbonehead

Parameters

这一部分是yolov5s.yamlyolov5m.yamlyolov5l.yamlyolov5x.yaml几个文件之间主要的不同点,有不同的宽度与深度。

nc: 20 #80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

nc:分类的数量,根据你自己训练的数据集当中的数量进行修改
depth__multiple:控制子模块的数量
width_multiple:控制卷积核的数量

在Yolov5中,网络的不断加深,也在不断增加网络特征提取和特征融合的能力。

anchors

这里是anchors,原译为抛锚,这里是因为yolov5增加了自适应锚定框(Auto Learning Bounding Box Anchors)

anchors:- [10,13, 16,30, 33,23]  # P3/8- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32

anchor一共有三行,分别在图片当中大,中,小的目标进行计算,

  • 第一行在最大特征图上,小数值检测大目标
  • 第二行在图片第二大的特征图上
  • 第三行在最小的特征图上,大数值检测小目标

anchor每一行都是六个数,这与宽高并没有联系,这主要来自于anchor的生成原理

  • yolov5 初始化了 9 个 anchors,在三个 Detect 层使用(3个feature map)中使用,每个 feature map 的每个 grid cell 都有三个 anchor 进行预测

对于输出层(Prediction),经过特征提取和计算操作的时候,会生成不同特定大小的特征608/8=76,608/16=38,608/32=19

  • 以上的数据都是依靠作者的经验得到的三组anchors,这对于大部分的数据已经使用,但是为了精进,yolov5的代码提供了k-means和遗传算法计算符合当前数据集最合适的anchors,可以在autoanchor.py当中进行查看
     

Backbone

# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]],  # 9]

参数解释

  1. from:表示当前模块的来源取自于哪一层的输出,比如-1表示取自上一层的输出
  2. number:表示当前选择的模块需要重复的次数,比如3就是要重复3次,但这只是理论上的重复次数,具体还要看depth_multiple共同决定网络模型的深度
  3. module:模块类名,根据给到的类名到common.py当中寻找相应的类进行模块化的搭建网络
  4. args:是一个list,模块搭建所需要的参数,channel(通道数),bias(偏差,残差)等
  5. Focus:对特征图进行切片操作,[64,3]得到[3,32,3],即输入channel=3(RGB),输出为64*0.50(width_multiple)=32,3为卷积核尺寸
  6. Conv:nn.conv(kenel_size=1,stride=1,groups=1,bias=False)+Bn+Leaky_ReLu.[-1, 1, Conv, [128, 3, 2]]具体主要含义是指输入来自上一层,模块数量(number)为1个,子模块为Conv,网络中最终有128*0.5=32个卷积核,卷积核尺寸为3,stride=2。
  7. BottleNeckCSP:借鉴CSPNet网络结构,由3个卷积层和X个残差模块Concat组成,若有False,则没有残差模块,那么组成结构为nn.conv+Bn+Leaky_ReLu
  8. SPP:[-1, 1, SPP, [1024, [5, 9, 13]]]表示5×5,9×9,13×13的最大池化方式,进行多尺度融合

Head

# YOLOv5 v6.0 head
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # cat backbone P4[-1, 3, C3, [512, False]],  # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]],  # cat backbone P3[-1, 3, C3, [256, False]],  # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]],  # cat head P4[-1, 3, C3, [512, False]],  # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5[-1, 3, C3, [1024, False]],  # 23 (P5/32-large)[[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]

总结

学习了YOLOv5s.yaml文件,基本了解了每个部分的内容和每一块代码的意义。

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

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

相关文章

PostgreSQL 大对象管理指南:pg_largeobject 从原理到实践

概述 有时候,你可能需要在 PostgreSQL 中管理大对象,例如 CLOB、BLOB 和 BFILE。PostgreSQL 中有两种处理大对象的方法:一种是使用现有的数据类型,例如用于二进制大对象的 bytea 和用于基于字符的大对象的 text;另一种…

算法第四题移动零(双指针或简便设计),链路聚合(两个交换机配置)以及常用命令

save force关闭导出dis vlandis ip int bdis int bdis int cudis thisdis ip routing-table(查路由表)int bridge-aggregation 1(链路聚合,可以放入接口,然后一起改trunk类。)稳定性高

告别繁琐配置!Retrofit-Spring-Boot-Starter让HTTP调用更优雅

01 引言 之前分享过一篇文章【像调用接口一样调用第三方API】,今天迎来了新成员Retrofit。 retrofit-spring-boot-starter 是一个基于 Spring Boot 的 starter,它简化了 Retrofit 在 Spring 环境中的集成和使用。Retrofit 本身是一个类型安全的 HTTP 客…

60_基于深度学习的羊群计数统计系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍🎯 功能展示🌟 一、环境安装🎆 环境配置说明📘 安装指南说明🎥 环境安装教学视频 🌟 二、数据集介绍🌟 三、系统环境(框架/依赖库)说明🧱 系统环…

代理服务器是什么?怎么选择?

代理服务器是一种位于用户设备与目标网络之间的中间服务器,通过接收用户请求、转发至目标网络并将结果返回给用户,实现“用户→代理服务器→目标网络”的间接访问。其核心功能围绕“网络优化”“访问控制”与“身份隐藏”展开,为个人与企业用…

代码随想录刷题Day56

子集 这道题求子集,集合的基本运算之一,按照高中数学学习集合的知识,可以把这个找幂集的过程按照元素的个数来划分步骤。也就是先找零个元素的子集,再找一个元素的子集,再找两个元素的子集...一直到找N个元素的集合为…

pycharm——关于Pyqt5

PyQt5新手教程(七万字) import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton, QLabel, QInputDialog, QColorDialog, QFontDialog, QFileDialog, QProgressDialog, QMessageBox from PyQt5.QtCore i…

P2678 [NOIP 2015 提高组] 跳石头

P2678 [NOIP 2015 提高组] 跳石头 判断条件该怎么写

小麦矩阵系统:一键批量发,多账号同步不掉链

随着互联网的发展和社交平台的普及,企业和个人用户越来越依赖社交媒体平台来进行信息传播、品牌宣传以及市场推广。在这个信息高速流动的时代,如何更高效地管理多个社交平台的账号,并保持信息的同步与流畅传播,成为了许多企业面临…

JavaScript经典面试题二(函数和作用域)

目录 一、闭包,使用场景 1.闭包的定义 2.闭包的实现原理 3.闭包的应用场景 (1)数据封装与私有变量 (2)函数柯里化 (3)事件处理与回调 (4)模块化开发 4.注意事项 …

Linux防火墙iptables

目录 一,Iptables概述 二,iptables组成 1,表 2,链 3,链表对应关系 4,数据包过滤的匹配流程 5,规则匹配策略 三,iptables防火墙配置 1,iptables命令 2&#xff…

[优选算法专题二——NO.16最小覆盖子串]

题目链接 LeetCode最小覆盖子串 题目描述 代码编写 、关键注意点 仅统计目标相关字符:通过 hash1.count(in) 判断字符是否在 t 中,避免无关字符(如 s 中的 D、E)干扰统计,提升效率。count 的更新时机:仅当…

考研408计算机网络近年第34题真题解析(2021-2024.34)

(2021.34)此题已明确为差分曼彻斯特编码,通常第一个时间间隙可能不太好判断,因为0,或1可以变化,但差分曼彻斯特编码的其它位置可以判断,图中黄色数字的时间间隙位置,开始位置和前面一…

微信小程序开发教程(八)

目录:1.全局配置-tabBar2.小程序的页面配置3.数据请求-GET和POST请求4.数据请求-request请求的注意事项1.全局配置-tabBar注意tabar页面必须放到Page头部位置2.小程序的页面配置3.数据请求-GET和POST请求4.数据请求-request请求的注意事项

日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回3+(考え方11)

日语学习-日语知识点小记-构建基础-JLPT-N3阶段(31):文法運用第9回31、前言(1)情况说明(2)工程师的信仰2、知识点1ー 復習2ー 单词训练3、单词(1)日语单词  …

小鹏汽车在 VLA(视觉 - 语言 - 动作)算法模型框架细节与原理

小鹏汽车的 VLA(视觉 - 语言 - 动作)算法模型框架是其端到端自动驾驶系统的核心,融合了多模态感知、语言推理与动作生成能力。以下是其技术细节与原理的深度解析: 一、整体架构:混合式端到端设计 小鹏 VLA 采用云端基座…

京东商品详情 API 全解析:合规对接与 B2C 场景实战指南

在 B2C 电商运营中,商品详情数据是支撑店铺管理、库存调控、营销决策的核心基础。京东商品详情 API 作为官方合规的数据获取通道,不仅能稳定返回商品标题、价格、库存等关键信息,还针对 B2C 场景新增了预售锁库、次日达标识等特色字段。本文从…

【Visual Studio 2017 和 2019下载】

Visual Studio 2017 和 2019下载VS2017下载地址:VS2019下载地址:VS2017下载地址: Visual Studio 2017 Community 链接 Visual Studio 2017 Enterprise 链接 VS2019下载地址: Visual Studio 2019 Community 链接 Visual Studio …

Python 轻松实现替换或修改 PDF 文字

在日常开发或文档处理过程中,经常会遇到需要对 PDF 文档中的文字进行修改的场景。例如更新合同条款、修正报表数据,或者批量替换文件中的特定内容。由于 PDF 格式以固定排版为特点,直接修改文字不像 Word 那样直观,因此需要借助专…

CI/CD流水线优化实战:从30分钟到5分钟的效能革命

关键词:CI/CD优化、GitHub Actions、Jenkins、自动化部署、流水线加速 一、引言:CI/CD流水线为何需要优化? 在现代软件开发中,CI/CD(持续集成/持续交付)已成为DevOps实践的核心环节。然而,许多团队的流水线存在效率低下问题,​​平均构建时间超过30分钟​​,严重制约…