Y3学习打卡
网络结构图


YOLOv5配置了4种不同大小的网络模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型,其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大,在增强模型检测性能的同时增加了计算资源和速度消耗。出于对检测精度、模型大小、检测速度的综合考量,本文选择YOLOv5s作为研究对象进行介绍。
models/yolov5s.yaml文件内容分析
1. 文件作用
yolov5s.yaml定义了YOLOv5s模型的网络结构、通道数(宽度)、层数(深度)和锚框(anchors)配置,是模型构建的核心配置文件。
2. 关键参数解析
(1) 模型缩放参数
YAML
# YOLOv5s depth_multiple: 0.33 # 控制模块重复次数(深度因子) width_multiple: 0.50 # 控制通道数(宽度因子)
- depth_multiple:模块重复次数的缩放因子。
例如,若某模块默认重复次数为3,则YOLOv5s实际重复次数为3 × 0.33 ≈ 1。 - width_multiple:通道数的缩放因子。
例如,某层默认输出通道为64,则YOLOv5s实际通道为64 × 0.50 = 32。 - 说明:YOLOv5s/m/l/x通过调整这两个参数实现模型大小和精度的平衡(s: small,m: medium,l: large,x: xlarge)。
(2) 锚框(Anchors)
YAML
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(检测大目标)
- 含义:每组锚框的宽高组合(w, h),用于初始化预测框尺寸。
- 层级分配:
- P3(特征图尺寸为输入图像的1/8):适合检测小目标。
- P4(1/16):适合中目标。
- P5(1/32):适合大目标。
- 调整建议:若自定义数据集目标尺寸差异大,需通过
k-means聚类生成新的anchors。
(3) 网络结构
YOLOv5s的主干(Backbone)、颈部(Neck)和检测头(Head)采用模块化设计,典型结构示例如下:
YAML
backbone:# [来源, 参数列表]# 来源:-1表示上一层的输出,数字表示特定层的输出[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2(卷积层)[-1, 1, Conv, [128, 3, 2]], # 1-P2/4[-1, 3, C3, [128]], # 2[-1, 1, Conv, [256, 3, 2]], # 3-P3/8[-1, 6, C3, [256]], # 4[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 9, C3, [512]], # 6[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 3, C3, [1024]], # 8[-1, 1, SPPF, [1024, 5]], # 9(空间金字塔池化)]head:[[-1, 1, Conv, [512, 1, 1]], # 10[-1, 1, nn.Upsample, [None, 2, 'nearest']], # 11 上采样[[-1, 6], 1, Concat, [1]], # 12 横向连接(特征融合)[-1, 3, C3, [512, False]], # 13[-1, 1, Conv, [256, 1, 1]], # 14[-1, 1, nn.Upsample, [None, 2, 'nearest']], # 15[[-1, 4], 1, Concat, [1]], # 16[-1, 3, C3, [256, False]], # 17[-1, 1, Conv, [256, 3, 2]], # 18[[-1, 14], 1, Concat, [1]], # 19[-1, 3, C3, [512, False]], # 20[-1, 1, Conv, [512, 3, 2]], # 21[[-1, 10], 1, Concat, [1]], # 22[-1, 3, C3, [1024, False]], # 23[[17, 20, 23], 1, Detect, [nc, anchors]], # 24 检测头(P3, P4, P5)]
3. 模块详解
(1) 核心模块
-
Conv层:
包含卷积 + BN + SiLU激活,参数格式为[输出通道数, 卷积核大小, 步长, 填充]。YAML
[-1, 1, Conv, [64, 6, 2, 2]] # 输出64通道,6x6卷积核,步长2,填充2 -
C3模块:
跨阶段部分网络(Cross Stage Partial Network),减少计算量的同时保持精度。YAML
[-1, 3, C3, [128]] # 重复3次,输出128通道 -
SPPF模块:
空间金字塔池化快速版,融合多尺度特征。YAML
[-1, 1, SPPF, [1024, 5]] # 输入1024通道,池化核最大5x5 -
Detect层:
检测头,输出预测结果(坐标、类别、置信度)。YAML
[[17, 20, 23], 1, Detect, [nc, anchors]] # 输入来自第17、20、23层,nc为类别数
(2) 特征融合逻辑
- 上采样:通过
nn.Upsample提升特征图分辨率。 - 横向连接(Concat):将深层特征与浅层特征拼接,增强小目标检测能力。
YAML
[[-1, 6], 1, Concat, [1]] # 拼接当前层和第6层的输出(按通道维度)
4. 模型定制建议
- 调整深度和宽度:修改
depth_multiple和width_multiple以适配不同算力需求。 - 优化锚框:若数据集目标尺寸分布特殊,需重新计算anchors(使用
utils/autoanchor.py)。 - 增减检测层:修改Head部分层级数可调整检测尺度(例如增加P2层检测极小目标)。
个人总结
- 熟悉了YOLOv5s模型的配置信息
- 将YOLOv5s模型中第4层和第6层的C3模块重复次数减少,具体影响分析如下:
1. 修改内容对比
原始配置
原来的第4层:[-1, 6, C3, [256]]
原来的第6层:[-1, 9, C3, [512]]
(6 * 0.33=2,9* 0.33=3)
修改后配置
修改后的第4层:[-1, 3, C3, [256]]
修改后的第6层:[-1, 6, C3, [512]]
2. 对模型性能的影响
(1) 模型参数量与计算量
- 参数量(Parameters):C3模块的重复次数减少会直接降低参数量,尤其是第4层(256通道)和第6层(512通道)的权重矩阵减少。
- 计算量(FLOPs):C3模块的计算量与重复次数正相关,修改后模型整体FLOPs将下降,理论推理速度提升。
- 估算变化(以YOLOv5s为例):
- 原始:总参数量约7.2M,FLOPs约16.4B
- 修改后:参数量预计减少约 0.8~1.2M,FLOPs减少约 3~4B。
(2) 检测精度(mAP)
- 负面影响:C3模块的重复次数减少会削弱网络的特征提取能力,尤其是对复杂场景和细粒度特征的捕捉,可能导致mAP下降。
- 第4层(浅层网络):减少C3模块次数会削弱对图像基础特征(如边缘、纹理)的提炼能力。
- 第6层(中层网络):减少C3模块次数会降低对中等尺度目标的语义理解能力。
- 典型场景影响:
- 小目标检测:对分辨率较低的深层特征依赖更大,精度损失更明显。
- 遮挡或模糊目标:模型鲁棒性可能下降。
(3) 推理速度
- 正向影响:计算量降低会提升推理速度(FPS),尤其在边缘设备(如Jetson Nano)上更显著。
相关文章:
Y3学习打卡
网络结构图 YOLOv5配置了4种不同大小的网络模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型,其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大,在增强…...
英码科技携昇腾DeepSeek大模型一体机亮相第三届北京人工智能产业创新发展大会
2025年2月28日,第三届北京人工智能产业创新发展大会在国家会议中心隆重开幕。本届大会以"好用、易用、愿用——以突破性创新加速AI赋能千行百业”为主题,重点展示人工智能技术创新成果与产业化应用实践。作为昇腾生态的APN伙伴,英码科技…...
系统讨论Qt的并发编程2——介绍一下Qt并发的一些常用的东西
目录 QThreadPool与QRunnable 互斥机制:QMutex, QMutexLocker, QSemaphore, QWaitCondition 跨线程的通信 入门QtConcurrent,Qt集成的一个并发框架 一些参考 QThreadPool与QRunnable QThreadPool自身预备了一些QThread。这样,我们就不需…...
JS禁止web页面调试
前言 由于前端在页面渲染的过程中 会调用很多后端的接口,而有些接口是不希望别人看到的,所以前端调用后端接口的行为动作就需要做一个隐藏。 禁用右键菜单 document.oncontextmenu function() {console.log("禁用右键菜单");return false;…...
modbus 协议的学习,谢谢老师
(1)谢谢这位老师 ,谢谢老师的教导 (2) 谢谢...
Go 接口使用
个人学习笔记 接口作用 1. 实现多态 多态允许不同的类型通过实现相同的接口,以统一的方式进行处理。这使得代码更加灵活和可扩展,提高了代码的复用性。 示例代码: package mainimport ("fmt" )// 定义一个接口 type Speaker int…...
题解 | 牛客周赛82 Java ABCDEF
目录 题目地址 做题情况 A 题 B 题 C 题 D 题 E 题 F 题 牛客竞赛主页 题目地址 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 做题情况 A 题 判断字符串第一个字符和第三个字符是否相等 import java.io.*; import java.math.*; import java.u…...
命名管道——进程间通信
个人主页:敲上瘾-CSDN博客 匿名管道:进程池的制作(linux进程间通信,匿名管道... ...)-CSDN博客 一、命名管道的使用 1.创建命名管道 1.1.在命令行中: 创建: mkfifo 管道名 删除:…...
高频 SQL 50 题(基础版)_1141. 查询近30天活跃用户数
1141. 查询近30天活跃用户数 select activity_date day,count(distinct user_id) active_users from Activity where (activity_date<2019-07-27 and activity_date>DATE_sub(2019-07-27,INTERVAL 30 DAY)) group by(activity_date)...
Yocto + 树莓派摄像头驱动完整指南
—— 从驱动配置、Yocto 构建,到 OpenCV 实战 在树莓派上运行摄像头,在官方的 Raspberry Pi OS 可能很简单,但在 Yocto 项目中,需要手动配置驱动、设备树、软件依赖 才能确保摄像头正常工作。本篇文章从 BSP 驱动配置、Yocto 关键…...
seaborn中文乱码
在进行matplotlib画图的时候,经常会出现中文乱码的问题,这主要是默认的文件不支持中文,可以在代码中显示指定。解决方法: import seaborn as sns import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] ["SimHei"] # …...
函数的特殊形式——递归函数
C递归函数入门指南:从概念到实践 1. 什么是递归? 递归是指函数直接或间接调用自身的过程,就像照镜子时影像无限反射,通过不断分解问题解决问题 适用场景: 问题可分解为相同子问题(如阶乘、斐波那契数列…...
计算最大海岛面积
最大海岛面积问题的不同解法 问题举例 给定一个包含了一些 0 和 1 的非空二维数组 matrix 。 一个岛屿是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设matrix的四个边缘都被 0(代表水&am…...
list的两个实现类
ArrayList:适用于需要频繁随机访问元素 LinkedList:适用于需要频繁进行插入和删除操作,尤其是在列表的头部或尾部进行操作 二者的用法基本一致,只是时间和空间复杂度不同 List<Integer> arrayList new ArrayList<>…...
Spark核心之02:RDD、算子分类、常用算子
spark内存计算框架 一、目标 深入理解RDD弹性分布式数据集底层原理掌握RDD弹性分布式数据集的常用算子操作 二、要点 ⭐️1. RDD是什么 RDD(Resilient Distributed Dataset)叫做**弹性分布式数据集,是Spark中最基本的数据抽象,…...
配置Nginx日志url encode问题
文章目录 配置Nginx日志url encode问题方法1-lua方法2-set-misc-nginx-module 配置Nginx日志url encode问题 问题描述: 当自定义日志输出格式,需要输出http请求中url参数时,如果参数中包含中文,是会进行url encode的,…...
[Windows] 批量为视频或者音频生成字幕 video subtitle master 1.5.2
Video Subtitle Master 1.5.2 介绍 Video Subtitle Master 1.5.2 是一款功能强大的客户端工具,能够批量为视频或音频生成字幕,还支持批量将字幕翻译成其他语言。该工具具有跨平台性,无论是 mac 系统还是 windows 系统都能使用。 参考原文&a…...
AIP-158 分页
编号158原文链接AIP-158: Pagination状态批准创建日期2019-02-18更新日期2019-02-18 API通常需要提供数据集,最常见的是 List 标准方法。但集合大小往往是不受控制的,会随着时间增长,提高了查找时间和通过网络传输的应答大小。因此对集合进行…...
进来了解一下python的深浅拷贝
深浅拷贝是什么:在Python中,理解深拷贝(deep copy)和浅拷贝(shallow copy)对于处理复杂的数据结构,如列表、字典或自定义对象,是非常重要的。这两种拷贝方式决定了数据在内存中的复制…...
第三阶段-产品方面的技术疑难
一、虚拟机和容器的区别? 虚拟机(Virtual Machine,VM)和容器(Container)都是用于隔离和运行应用程序的技术,但它们在实现方式、性能、资源消耗和适用场景上有显著区别。以下是虚拟机和容器的主…...
safetensors PyTorchModelHubMixin 加载模型
2025.03.03测试ok from safetensors.torch import load_fileimport yamlwith open("configs/maggie_image.yaml", r, encodingutf8) as file: # utf8可识别中文data yaml.safe_load(file)class Config:def __init__(self, **kwargs):for key, value in kwargs.item…...
解锁GPM 2.0「卡顿帧堆栈」|代码示例与实战分析
每个游戏开发者都有一个共同的愿望,那就是能够在无需复现玩家反馈的卡顿现象时,快速且准确地定位卡顿的根本原因。为了实现这一目标,UWA GPM 2.0推出了全新功能 - 卡顿帧堆栈,旨在为开发团队提供高效、精准的卡顿分析工具。在这篇…...
Transformer架构
核心原理 自注意力机制 通过计算输入序列中每个位置与其他位置的关联权重(Query-Key匹配),动态聚合全局信息,解决了传统RNN/CNN的长距离依赖问题。 实现公式:Attention(Q,K,V)softmax(QKTdk)VAttention(…...
微服务,服务治理nacos,负载均衡LOadBalancer,OpenFeign
1.微服务 简单来说,微服务架构风格[1]是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在 自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并 且可通过全自动部署机制独立部署。这…...
服务器租用:静态BGP和动态BGP分别指什么?
今天小编主要来带大家一起了解一下静态BGP和动态BGP分别是指什么? BGP主要是用在不同网络之间进行交换路由信息的协议,通常是用在互联网当中,而静态BGP和动态BGP是两种不同的方法来配置BGP路由,静态BGP路由是由手动配置的…...
栈和队列的模拟实现
文章目录 一. 回顾栈和队列二. stack的模拟实现stack.hstack.cpp 三. queue的模拟实现queue.htest.cpp 四. 了解dequeuevector和list都有各自的缺陷deque 总结 一. 回顾栈和队列 回顾一下栈和队列 栈:stack:后进先出 _ 队列:queue…...
CSDN博客写作教学(五):从写作到个人IP的体系化构建(完结篇)
导语 (第一篇)Markdown编辑器基础 (第二篇)Markdown核心语法 (第三篇)文章结构化思维 (第四篇)标题优化与SEO实战 通过前四篇教程,你已掌握技术写作的“术”——排版、标题、流量与数据。但真正的价值在于将技能升维为“道”:用技术博客为支点,撬动个人品牌与职业发…...
Django 项目模块化开发指南:实现 Vue 风格的组件化
在 Django 项目中,我们经常需要 复用 HTML 代码,避免重复编写相同的模板。例如,博客系统中,博客列表页 和 文章详情页 可能都有相同的 导航栏、模态框、页脚 等。如何像 Vue 一样进行 模块化开发,让代码更加清晰、可维护呢? 本文将详细介绍 Django 的模板继承 和 {% incl…...
unity pico开发 四 物体交互 抓取 交互层级
文章目录 手部设置物体交互物体抓取添加抓取抓取三种类型抓取点偏移抓取事件抓取时不让物体吸附到手部 射线抓取交互层级 手部设置 为手部(LeftHandController)添加XRDirInteractor脚本 并添加一个球形碰撞盒,勾选isTrigger,调整大小为0.1 …...
opencv 模板匹配方法汇总
在OpenCV中,模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法,通过cv2.matchTemplate函数实现,该函数支持的匹配方式主要有以下6种,下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...
