文章目录

  • 一、`yolov5s.yaml`中各行(参数)所表示的意义
    • 1.1 `depth_multiple`和`width_multiple`介绍
    • 1.2 yolov5中新增的Focus模块介绍
      • 1.2.1 Focus模块介绍1
      • 1.2.2 Focus模块介绍2
    • 1.3 yolov5s.yaml各参数及对应注释
  • 二、使用`netron`可视化`yolov5s`的结构
  • 三、本文章来源

一、yolov5s.yaml中各行(参数)所表示的意义

1.1 depth_multiplewidth_multiple介绍

yolov5s.yaml中,depth_multiplewidth_multiple是非常重要的参数,yolov5相比于yolov4,在模型方面最大的特点是灵活,源于其引入了depth_multiple和width_multiple这两个系数,根据对它们值的大小设定,来得到yolov5不同大小模型:

yolov5s: depth_multiple: 0.33width_multiple: 0.50
yolov5m: depth_multiple: 0.67width_multiple: 0.75
yolov5l: depth_multiple: 1.0width_multiple: 1.0

depth_multiple表示channel的缩放系数,就是将配置里面的backbone和head部分有关通道的设置,全部乘以该系数即可;

而width_multiple表示BottleneckCSP模块的层缩放系数,将所有的BottleneckCSP模块的number系数乘上该参数就可以最终的层个数;

可以发现通过这两个参数就可以实现不同大小不同复杂度的模型设计,因此yolov5比yolov4更加灵活;

1.2 yolov5中新增的Focus模块介绍

1.2.1 Focus模块介绍1

提出了一个新模块Focus(其余模块都是yolov4里面提到的),源码如下:

这个其实就是yolov2里面的ReOrg+Conv操作,也是亚像素卷积的反向操作版本,简单来说就是把数据切分为4份,每份数据都是相当于2倍下采样得到的,然后在channel维度进行拼接,最后进行卷积操作;

其最大好处是可以最大程度的减少信息损失而进行下采样操作;

1.2.2 Focus模块介绍2

作者在特征提取的上层结构中采用了四次slice操作组成了Focus层;

对于Focus层,在一个正方形中每 4 个相邻像素,并生成一个具有 4 倍通道数的feature map,类似与对上级图层进行了四次下采样操作,再将结果concat到一起,最主要的功能还是在不降低模型特征提取能力的前提下,对模型进行降参和加速;

1.7.0+cu101 cuda _CudaDeviceProperties(name='Tesla T4', major=7, minor=5, total_memory=15079MB, multi_processor_count=40)Params       FLOPS    forward (ms)   backward (ms)                   input                  output7040       23.07           62.89           87.79       (16, 3, 640, 640)      (16, 64, 320, 320)7040       23.07           15.52           48.69       (16, 3, 640, 640)      (16, 64, 320, 320)
1.7.0+cu101 cuda _CudaDeviceProperties(name='Tesla T4', major=7, minor=5, total_memory=15079MB, multi_processor_count=40)Params       FLOPS    forward (ms)   backward (ms)                   input                  output7040       23.07           11.61           79.72       (16, 3, 640, 640)      (16, 64, 320, 320)7040       23.07           12.54           42.94       (16, 3, 640, 640)      (16, 64, 320, 320)


从上图可以看出,Focus层确实在参数降低的情况下,对模型实现了加速。

但!这个加速是有前提的,必须在GPU的使用下才可以体现这一优势,对于云端部署这种处理方式,GPU不太需要考虑缓存的占用,即取即处理的方式让Focus层在GPU设备上十分work。

对于的芯片,特别是不含GPU、NPU加速的芯片,频繁的slice操作只会让缓存占用严重,加重计算处理的负担。同时,在芯片部署的时候,Focus层的转化对新手极度不友好。

1.3 yolov5s.yaml各参数及对应注释

# parameters
nc: 20  # number of classes
depth_multiple: 0.33  # model depth multiple 控制模型的深度(BottleneckCSP个数)
width_multiple: 0.50  # layer channel multiple 控制Conv通道channel个数(卷积核数量)
# depth_multiple表示BottleneckCSP模块的缩放因子,将所有BottleneckCSP模块的Bottleneck乘上该参数得到最终个数。
# width_multiple表示卷积通道的缩放因子,就是将配置里面的backbone和head部分有关Conv通道的设置,全部乘以该系数。
# 通过这两个参数就可以实现不同复杂度的模型设计。# anchors
anchors:- [10,13, 16,30, 33,23]  # P3/8  wh  stride=8- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32# YOLOv5 backbone
backbone:# [from, number, module, args]# from:表示当前模块的输入来自哪一层的输出,和darknet里面一致,-1表示来自上一层的输出;# number:表示本模块重复的次数,1表示只有一个,3表示重复3次,9表示重复9次;# module: 模块名称;# args: 表示输入参数,比如卷积核个数 卷积核大小 步长stride等;[[-1, 1, Focus, [64, 3]],  # 0-P1/2  作者提出了一个新模块Focus(其余模块都是yolov4里面提到的)[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4   128个3x3的卷积核 stride=2[-1, 3, C3, [128]],  # CSP Bottleneck with 3 convolutions[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8   156个3x3的卷积核[-1, 9, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32  1024个3x3的卷积核[-1, 1, SPP, [1024, [5, 9, 13]]],[-1, 3, C3, [1024, False]],  # 9]# YOLOv5 head
# 作者没有区分neck模块,所以head部分包含了PANet+Detect部分
# 由于本份配置其实没有分neck模块,故spp也写在了backbone部分。
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)]

二、使用netron可视化yolov5s的结构

使用netron可视化之前,需注意以下三点:

1、不要直接打开官方给的yolov5s.pt,其中很多细节都是无用的;
2、不要直接用export.pyyolov5s.pt转为onnx文件,其中很多细节是错的;
3、而若使用tensorboard之类的工具打开网络结构,一般都很不直观,不方便直观查看网络结构;


使用netron这个工具,可以直观的看到yolov5s网络每一层的结构;

但是首先需要通过代码生成适用于netron可视化的pt文件,直接使用官网的yolov5s.pt无法看清网络结构;

使用如下代码即可:

import torch
from models.yolo import Modelcfg = "models/yolov5s.yaml"
# Create model
model = Model(cfg).to("cpu")
x = torch.randn(1, 3, 640, 640).to("cpu")
script_model = torch.jit.trace(model, x)
script_model.save("weights/m.pt")

然后再使用netron软件或者网站打开m.pt就可以看到yolov5s的网络结构;

三、本文章来源

  1. CSDN满船清梦压星河HK
    博客:模型可视化 netron
  2. 知乎深度眸:进击的后浪yolov5深度可视化解析
  3. 知乎pogg:YOLOv5-Lite:更轻更快易于部署的YOLOv5

yolov5s.yaml中各参数作用意义及使用netron工具来可视化yolov5s的结构相关推荐

  1. sklearn模型中random_state参数的意义

    sklearn模型中random_state参数的意义 random_state 意义 使用情况 random_state 意义 例如:在sklearn可以随机分割训练集和测试集(交叉验证),只需要在 ...

  2. java系统变量用户变量_windows系统中的系统变量和用户变量,以及配置JDK中各个参数的意义...

    环境变量是什么? 环境变量,是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉 ...

  3. GPDB中gp_vmem_protect_limit参数的意义

    gp_vmem_protect_limit参数的意义 1.gp_vmem_protect_limit参数说明 1)在启用了基于资源队列的资源管理系统时,gp_vmem_protect_limit参数表 ...

  4. patch文件中各参数的意义

    某些打不上的patch,可以通过修改patch文件中的参数进行修改以使其可用.下面是一个完整的patch: From 0665fa1a8584c22747666a17eaafba8cd848db39 ...

  5. X264代码中一些参数的意义

    Main(int argc,char *argv[]); 为了方便起见,不妨改写为: Main(void){ ...... intargc=5; char*argv[]={ "main&qu ...

  6. 【总结】python sklearn模型中random_state参数的意义

    一.前言 在学习机器学习的过程中,常常遇到random_state这个参数,并且好多时候都是 random_state=42,感觉挺有意思的,于是,百度一下,然后做一个总结. 作用:控制随机状态. 问 ...

  7. YAML中duid参数配置样例

    spring:datasource:# druid连接池type: com.alibaba.druid.pool.DruidDataSource#数据库驱动driver: com.mysql.jdbc ...

  8. CNN中各参数的意义

    太久没碰深度学习了,复习复习: 关键参数: (参数英文名基于pytorch中的Conv2d()) 输入大小(Hinput×Winput×CinputH_{input}×W_{input}×C_{inp ...

  9. mysql sync_binlog 作用_mysql 中 sync_binlog 参数作用

    sync_binlog":这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性.对于"sync_ ...

最新文章

  1. 力扣练习题(数组中数据反转)
  2. 安装python爬虫scrapy踩过的那些坑和编程外的思考
  3. MF0 AI+IoT K210 人脸识别模块 应用笔记-(1)
  4. mysql之触发器详解_学习笔记之MySQL触发器详解
  5. python_day_5:20180720
  6. git push出错 remote: Hook Error: request authorize server: curl error: Couldn't resolve host name
  7. python保存运行结果下次使用_将python运行结果保存至本地文件中的示例讲解
  8. 《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇
  9. 经典PCB软件比较阐述—Cadence和Mentor(整理)
  10. Hadoop生态hive(五)Hive QL数据库
  11. oracle dba 命令行,Oracle DBA常用命令
  12. css如何让图片不平铺,css怎么设置图片不平铺
  13. 为什么数据库用B+树(3条法则需记牢)
  14. win10使用命令提示符启用/关闭远程桌面
  15. Python爬虫实战(2) 爬取中国土壤数据库部分数据
  16. 老男孩 linux 2014 360下载,360安全卫士2014旧版
  17. Github 标星 3w+,热榜第一,使用 Python实现所有算法!
  18. Elasticsearch文档内部的父子关系
  19. php faker,Laravel的Faker的使用
  20. 笔记本键盘进水几个按键失灵 还能修好么_苹果首台笔记本Mac Portable全拆卸,蒂姆·库克签名,无螺丝设计,机械键盘...

热门文章

  1. 西北大学本科毕业论文答辩PPT模板
  2. 苹果或研发第二代智能手表
  3. android壁纸软件代码,android高清壁纸APP完整源码HD Wallpaper(服务端+客户端)
  4. 这些优质的教育类公众号您知道么,非常实用!
  5. 解决Android studio启动模拟器一直Waiting for target device to come online的一种方式
  6. 字节跳动、阿里等大厂的真实工作体验如何?看看四位程序员的自述
  7. Pandoc下载安装教程
  8. Chef入门详解 Chef安装 Chef使用
  9. web页面:浏览器操作
  10. 计算机处理器缓存参数,如何查看CPU型号和主频、缓存、接口等参数