第Y3周:yolov5s.yaml文件解读

news/2024/7/11 1:17:17 标签: YOLO, 深度学习, 人工智能
  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊|接辅导、项目定制

✅本周任务:将yolov5s网络模型中第4层的C3*2修改为C3*1,第6层的C3*3修改为C3*2。

简单介绍:

YOLOv5配置了4种不同大小的网络模型,分别是YOLOv5sYOLOv5mYOLOv5lYOLOv5x,其中YOLOv5s是网络深度和宽度最小但检测速度最快的模型,其他3中模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大,在增强模型检测性能的同时增加了计算资源和速度消耗。出于对检测精度、模型大小、检测速度的综合考量,本文选择YOLOv5s作为研究对象进行介绍。

./models/yolov5s.yaml文件是YOLOv5s网络结构的定义文件,如果你想改进算法的网络结构,需先修改该文件中的相关参数,然后再修改./models/common.py./models/yolo.py中的相关代码。

yolov5s.yaml文件解读

  • 一、前导知识-yaml文件介绍
  • 二、查看配置文件
    • 1. 参数配置
    • 2.anchors配置
    • 3、backbone
    • 4、head
  • 三、修改配置文件

一、前导知识-yaml文件介绍

YAML简单介绍

二、查看配置文件

yolov5的所有网络yaml文件如下:

在这里插入图片描述
我们需要修改的网络参数配置文件为yolov5s.yaml,其文件的内容如下:

在这里插入图片描述

1. 参数配置

在这里插入图片描述

  • depth_multiple:channel的缩放系数,就是将配置里面的backbone和head部分有关通道的设置,全部乘以该系数即可
  • width_multiple:BottleneckCSP模块的层缩放系数,将所有的BottleneckCSP模块的number系数乘上该参数就可以最终的层个数

2.anchors配置

在这里插入图片描述

小 目标3组:[10, 13], [16, 30], [33, 23]
中 目标3组:[30, 61], [62, 45], [59,119]
大 目标3组:[116,90], [156,198], [373,326]

YOLOv5初始化了9个anchor,在3个Detect层(3个feature map)中使用,每个feature map的每个grid_cell都有3个anchor进行预测。分配规则是:尺度越大的feature map越靠前,相对原图的下采样率越小,感受野越小,则相对可以预测一些尺度比较小的物体,所有分配到定anchor越小;尺度越小的feature map越靠后,相对原图的下采样率越大,感受野越大,则相对可以预测一些尺寸比较大的物体,所有分配到的anchor也越大。即可以在小特征图(feature map)上检测大目标,也可以在大特征图上检测小目标。
YOLOv5根据工程经验得到了这么3组anchors(9对尺寸参数),对于很多数据集而言已经很合适了。但也不能保证这3组anchor就适用于所有数据集,所以YOLOv5还有一个anchor进化的策略:使用k-means和遗传进化算法,找到与当前数据集最吻合的anchors。

3、backbone

在这里插入图片描述

  • from: 表示当前模块的输入来自哪一层的输出,-1表示来自上一层的输出,层编号由0开始计数。
  • number: 表示当前模块的理论重复次数,实际的重复次数还要由上面的参数depth_multiple共同决定,该参数影响整体网络模型的深度。
  • module: 模块类名(也可以理解为模块的功能),通过这个类名在common.py中寻找相应的类,进行模块化的网络搭建。
  • args: 是一个list,对应到模块类搭建时需要的参数,主要是channel、kernel_size、stride、padding、bias等

4、head

在这里插入图片描述

三、修改配置文件

主要修改backbone

在这里插入图片描述

  • python yolo.py,you will see:

在这里插入图片描述

参考:yolov5s.yaml中各参数作用意义及使用netron工具来可视化yolov5s的结构
YOLOV5-5.x 源码解读-autoanchor.py
YOLOV5-5.x 源码解读】yolov5s.yaml


http://www.niftyadmin.cn/n/411997.html

相关文章

揭秘新一代云数仓技术架构与最佳实践

从传统数仓到湖仓一体,历经三十多年发展,技术的浪潮快速迭代,以云原生数仓为中心的现代数据栈时代已然到来。 背后的核心的原因在于,企业正在加速走向数字化、智能化,对数据的应用也提出了全新要求,特别是对…

Nginx 正向代理和反向代理

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 推荐:体系化学习Java(Java面试专题) 文章目录 1、为什么 N…

dpdk rte_ring

rte_ring_enqueue卡住是什么原因 以下回答来自于GPT-3.5: 如果程序卡在rte_ring_enqueue函数,可能有几种原因。首先,rte_ring_enqueue函数可能会阻塞,直到有空间可用于将数据包添加到环形缓冲区中。如果环形缓冲区已满&#xff0…

LVS负载均衡群集----DR部署

文章目录 一、数据包流向分析二、DR模式的特点三、LVS-DR中的ARP问题四、LVS单网段DR模式部署第一步配置负载调度器第二步设置两台节点服务器第三步设置DR 服务器第四步在本地查看调度服务器 一、数据包流向分析 (1)客户端发送请求到 Director Server&a…

Axure教程—分段滑动条

本文将教大家如何用AXURE中动态面板制作单分段滑动条 一、效果 预览地址:https://c00qrq.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87881401?spm1001.2014.3001.5503 二、功能 滑块滑动到相应的浮点,显示…

c# 从零到精通 数组的操作-向一维数组添加一个数组,遍历数组内容

c# 从零到精通 数组的操作-向一维数组添加一个数组,遍历数组内容 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AddArrays { class Program { /// /// 向一维数组中添加一个数组 /// /// 源数组 /// 要添加…

Redis事务和管道

一、Redis事务 1、定义 可以一次执行多个命令,本质上是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不能加塞。 2、作用 一个队列中,一次性、顺序性、排他性的执行一系列命令。 …

DepthAI SDK 1.11发布!新增两大亮眼!

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…