yolov5s网络结构

        鉴于网上关于yolov5s的解读众多然不尽相同,特从YOLOv5官方项目地址https://github.com/ultralytics/yolov5下载了yolov5的各版本文件并上传至 [资源] 栏目,这里就yolov5s版本的网络结构进行分析展示。

 1、yolov5s模型的yaml文件

# Ultralytics YOLOv5 🚀, AGPL-3.0 license# Parameters
nc: 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)]

 2、yaml文件解读

        Yolov5s模型yaml文件中详细定义了模型的参数(parameters)、主干网络(backbone)和头部(head)结构。

(1)参数(parameters):

  • nc: 80:定义模型要检测的类别数,这里是80类(coco数据集)。
  • depth_multiple: 0.33:模型深度的倍数,用于缩放整个网络的深度。
  • width_multiple: 0.50:层通道的倍数,用于缩放网络中各层的通道数。
  • anchors:定义了三个不同尺度的锚框(anchor boxes),用于预测不同大小的物体。每个尺度包含3个锚点,分别对应不同的宽高比。

(对于第一组锚点([10, 13, 16, 30, 33, 23]):[10, 13]定义了第1个锚点的宽度和高度,[16, 30]定义了第2个锚点的宽度和高度,[33, 23]定义了第3个锚点的宽度和高度。第二组锚点([30, 61, 62, 45, 59, 119])和第三组锚点([116, 90, 156, 198, 373, 326])遵循相同的模式,分别对应P4/16和P5/32特征图尺度上的两个锚点。这些锚点的尺寸通常比前一组更大,以覆盖更大尺度的目标)

anchors是一组预定义的边框,具有固定的宽和高(或宽高比),用于作为检测过程中预测边框的起点或参考点。Anchors 的作用是提高检测效率、适应不同尺度的目标、减少计算量。Anchors的选择通常基于训练数据集中目标的统计信息。例如,在训练YOLO模型之前,可以分析数据集中所有目标的边框尺寸和宽高比,然后从中选择最具代表性的几个作为anchors。这通常是通过聚类算法(如K-means)来实现的,以确保选择的anchors能够最好地覆盖数据集中目标的大小和形状分布。)

(2)主干网络(backbone):

        主干网络格式按[[from, number, module, args]]编写,即第1个参数为开始的层,第2个参数为当前操作重复系数,第3个参数为当前采用的模块类型,第4个参数为当前模块的参数:

  • Conv 模块的参数列表包含了四个值:[输出通道数, 卷积核大小, 步长, 填充])
  • (C3模块的参数列表包含两个值:[输入通道数,是否使用BottleneckCSP])
  • (SPPF模块的参数列表包含两个值:[输入通道数, 池化核大小])
[-1, 1, Conv, [64, 6, 2, 2]], # 第0层-P1/2
# 对前一个层的输出使用1次卷积操作,输出通道数为64,卷积核为6x6,步长为2,填充为2,生成P1/2特征图。[-1, 1, Conv, [128, 3, 2]], # 第1层-P2/4
# 对前一个层的输出使用1次卷积操作,输出通道数为128,卷积核为3x3,步长为2,生成P2/4特征图。[-1, 3, C3, [128]],          # 第2层
# 对前一个层的输出使用3次C3模块,输入通道数为128。[-1, 1, Conv, [256, 3, 2]], # 第3层-P3/8
# 对前一个层的输出使用1次卷积操作,输出通道数为256,卷积核为3x3,步长为2,生成P3/8特征图。[-1, 6, C3, [256]],         # 第4层
# 对前一个层的输出使用6次C3模块,输入通道数为256。[-1, 1, Conv, [512, 3, 2]], # 第5层-P4/16
# 对前一层的输出使用1次卷积操作,输出通道数为512,卷积核为3x3,步长为2,生成P4/16特征图。[-1, 9, C3, [512]],         # 第6层
# 对前一个层的输出使用9次C3模块,输入通道数为512。[-1, 1, Conv, [1024, 3, 2]], # 第7层-P5/32
# 对前一个层的输出使用1次卷积操作,输出通道数为1024,卷积核为3x3,步长为2,生成P5/32特征图。[-1, 3, C3, [1024]],         # 第8层
# 对前一个层的输出使用3次C3模块,输入通道数为1024。[-1, 1, SPPF, [1024, 5]],    # 第9层
# 对前一个层的输出使用1次SPPF模块,输入通道数为1024,使用5x5的池化核。

 (3)头部网络(head):

        头部网络格式与主干网络相同。模块参数:

  • nn.Upsample的参数:[尺寸,缩放倍数,模式]
  • Concat的参数:[维度索引]
  • Detect的参数:[类别数量,锚点列表]
[-1, 1, Conv, [512, 1, 1]],                      # 第10层
# 对前一层的输出使用1次卷积操作,输出通道数为512,卷积核为1x1,步长为1。[-1, 1, nn.Upsample, [None, 2, "nearest"]],      # 第11层
# 对前一层的输出使用1次上采样,不指定输出尺寸,放大两倍,用最近邻插值方法。[[-1, 6], 1, Concat, [1]],                       # 第12层-cat backbone P4
# 对前一层的输出(上采样)与第6层的输出(P4特征图)进行1次拼接,拼接维度为1。[-1, 3, C3, [512, False]],                       # 第13层
# 对前一层的输出应用3次C3模块,输入通道数为512,采用默认CSP结构。[-1, 1, Conv, [256, 1, 1]],                      # 第14层
# 对前一层的输出使用1次卷积操作,输出通道数为256,卷积核为1x1,步长为1。[-1, 1, nn.Upsample, [None, 2, "nearest"]],      # 第15层
# 对前一层的输出使用1次上采样,不指定输出尺寸,放大两倍,用最近邻插值方法。[[-1, 4], 1, Concat, [1]],                       # 第16层-cat backbone P3
# 对前一层的输出(上采样结果)与第4层的输出进行1次拼接,拼接维度为1。[-1, 3, C3, [256, False]],                       # 第17层 (P3/8-small)
# 对前一层的输出应用3次C3模块,输入通道数为256,采用默认CSP结构。[-1, 1, Conv, [256, 3, 2]],                      # 第18层
# 对前一层的输出使用1次卷积操作,输出通道数为256,卷积核为3×3,步长为2。[[-1, 14], 1, Concat, [1]],                      # 第19层-cat head P4
# 对前一层的输出(上采样结果)与第14层的输出进行1次拼接,拼接维度为1。[-1, 3, C3, [512, False]],                       # 第20层 (P4/16-medium)
# 对前一层的输出应用3次C3模块,输入通道数为512,采用默认CSP结构。[-1, 1, Conv, [512, 3, 2]],                      # 第21层
# 对前一层的输出使用1次卷积操作,输出通道数为512,卷积核为3×3,步长为2。[[-1, 10], 1, Concat, [1]],                      # 第22层-cat head P5
# 对前一层的输出(上采样结果)与第10层的输出进行1次拼接,拼接维度为1。[-1, 3, C3, [1024, False]],                      # 第23层 (P5/32-large)
# 对前一层的输出应用3次C3模块,输入通道数为1024,采用默认CSP结构。[[17, 20, 23], 1, Detect, [nc, anchors]],        # 第24层-Detect(P3, P4, P5)
# 对第17、20、23层使用1次Detect模块,类别数量为nc、锚点列表为anchors。
# 基于P3、P4和P5特征图进行最终的目标检测。

       yolov5共22个模块,具体的模块定义在models.common文件中,可自行下载查看。

3、yolov5s网络结构图

        官方yolo文件中Head部分包含了3个Detect,Detect用于输出预测结果,当yolov5作为特征提取器使用时,需去掉Detect。由于卷积操作会向下采样(降低维度),因此Detect1的维度最高、Detect2的维度次之、Detect3的维度最低。维度越高、网格(grid cell)越密,可检测的目标尺寸越小。

        最后,附上一篇比较靠谱的博客:

yolov5网络结构icon-default.png?t=O83Ahttps://www.cnblogs.com/goldsunshine/p/18284318

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

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

相关文章

Git使用教程-将idea本地文件配置到gitte上的保姆级别步骤

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

基于LangChain的Embedding开发手册(保姆级)

前言 时至今日,经过2年的“攻城拔寨”,大模型显然吹进了“寻常百姓家”。如果你还不了解ChatGPT,不了解通义、文心、混元等国内任意一款大模型产品,那么请来博主这里坐坐,我们“边看边聊”。 随着ChatGPT的问世&#…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器,属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格,生成各种各样类似效果的图片,就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片: 不输入任何提示词,出图…

Python3网络爬虫开发实战(17)爬虫的管理和部署(第一版)

文章目录 一、 Scrapyd 分布式部署1.1 了解 Scrapyd1.2 准备工作1.3 访问 Scrapyd1.4 Scrapyd 的功能1.5 ScrapydAPI 的使用 二、Scrapyd-Client 的使用2.1 准备工作2.2 Scrapyd-Client 的功能2.3 Scrapyd-Client 部署 三、Scrapyd 对接 Docker3.1 准备工作3.2 对接 Docker 四、…

Flask 设置session 自定义登录验证

"""1. 设置session# 设置session成功 重定向到首页session.permanent True # 设置会话过期时间session[info] usernamereturn redirect(url_for(index))2. 获取sessioninfo session.get(info, default0)return render_template(index.html, infoinfo)3. 设置…

Java笔试面试题AI答之单元测试JUnit(6)

文章目录 31. 如果将JUnit测试方法声明为“私有”会发生什么?1. 测试方法不会被JUnit执行2. 违反JUnit的设计原则3. 潜在的测试覆盖率问题4. 解决方案 32. 如果声明JUnit测试方法返回“String”会发生什么?编译错误运行时行为正确的做法结论 33. 可以使用…

变电站缺陷隐患检测图像数据集,总共包含8000张图片,包含渗漏油,鸟巢,表盘破损,呼吸器变色等

变电站缺陷隐患检测图像数据集,总共包含8000张图片,包含渗漏油,鸟巢,表盘破损,呼吸器变色等。 变电站缺陷隐患检测图像数据集营销介绍 数据集名称 变电站缺陷隐患检测图像数据集(Substation Defect Detect…

微分电路设计

1 简介 微分电路会根据电路时间常数和放大器的带宽来输出某个频率范围内输入信号的微分。向反相输入施加输入信号,输出相对输入信号的极性会反相。理想的微分器电路基本都不稳定,需要增加输入电阻器和反馈电容器,才能达到稳定,但是…

让《米小圈动画中国史》来为孩子打开浩瀚历史的书页!

当我们漫步在浩瀚的历史长河中,每一段故事、每一个人物都如璀璨星辰般闪烁。历史不仅是过去的记忆,更是一面镜子,映射出民族的辉煌与艰辛。然而,对于我们的孩子而言,传统的历史教材常常显得枯燥而乏味。作为家长&#…

【MATLAB源码-第224期】基于matlab的快跳频系统仿真采用4FSK,模拟了单音干扰,宽带干扰以及部分频带干扰,输出误码率曲线以及各节点图像

操作环境: MATLAB 2022a 1、算法描述 跳频通信系统概述 跳频通信系统是一种通过快速切换载波频率来进行信息传输的无线通信技术。它在军事和商业通信中广泛应用,具有较强的抗干扰和抗截获能力。系统设计主要包括信号调制、跳频序列生成、信道模拟以及…

链表的合并,结点逆置,顺序表的高效划分(数据结构作业02)

目录 链表的合并 链表的结点逆置 顺序表的高效划分 链表的合并 已知两个递增有序的单链表A和B,分别表示两个集合。试设计一个算法,用于求出A与B的交集,并存储在C链表中。例如 : La {2,4,6,8};…

如何使用命令行快速下载Google Drive/OneDrive大文件

OneDrive OneDrive使用wget下载会出现403 forbidden,可通过下面方法下载。 浏览器右键进入检查界面,选择netowork,搜索download.aspx,然后在待下载文件处点击下载,即可出现下载链接,复制为cURL即可下载。…

【Prompt Engineering:ReAct 框架】

ReAct 框架 从 Yao 等人,2022(opens in a new tab) 引入了一个框架,其中 LLMs 以交错的方式生成 推理轨迹 和 任务特定操作 。 生成推理轨迹使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。操作步骤允许与外部源(如知识…

硬件工程师笔试面试——开关

目录 11、开关 11.1 基础 开关原理图 开关实物图 11.1.1 概念 11.1.2 常见的开关类型及其应用 11.2 相关问题 11.2.1 开关的工作原理是什么? 11.2.2 在设计一个电子系统时,如何选择最适合的开关类型? 11.2.3 不同类型的开关在实际应用中有哪些优势和局限性? 11.…

Rust GUI框架Tauri V1 入门

文章目录 Tauri介绍Vite开始创建 Rust 项目 调用指令window.__TAURI_INVOKE__.invoke is undefined 问题 参考资料JavaScript 模块Vue 框架Vue RouteviteNuxt gitignore文件上传到csdn gitcode网站端本地端 gitcode发布 Tauri介绍 Tauri是一款用Rust构建的开源框架&#xff0c…

Linux操作系统面试题记录

一、进程与线程 1.并发和并行的区别 并发:一个cpu处理器处理多个任务; 并行:多个cpu处理器处理多个任务; 2.进程和线程是什么?区别?何时用线程何时用进程? Linux中其实没有进程线程之分&…

少儿编程小游戏 —— Scratch 火柴人勇者传说

在线玩:Scratch动作冒险游戏 – 火柴人勇者传说免费下载-小虎鲸Scratch资源站 在少儿编程的世界里,创造属于自己的游戏是一件既有趣又富有挑战的事情。而今天要介绍的游戏——《火柴人勇者传说》,便是一个充满冒险精神的作品,专为…

【PCB工艺】表面贴装技术中常见错误

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 1、什么是SMT和SMD2、表面贴装技术的优势是什么?3、通孔和表面贴装技术之间的区别是什么?4、焊…

MySQL-DQL(数据查询语言)

数据查询语言(DQL-Data Query Language) 代表关键字:select MySQL语句执行顺序 1、基础操作 1.1 启动服务 a.手动启动 我的电脑->右键->管理->服务->mysql->右键启动/启动 b.命令方式 在管理员模式下运行cmd,执行如下操作: net sta…

轻量桌面应用新星:Electrico,能否颠覆Electron的地位?

在桌面应用开发的世界里,Electron曾经是一位风云人物。它让开发者可以用熟悉的Web技术构建跨平台应用,但它的重量级体积和系统资源的高消耗一直让人头疼。现在,一个新工具悄然登场,试图解决这些问题——Electrico,一个轻量版的桌面应用开发框架。 10MB取代数百MB,你不…