当前位置: 首页 > article >正文

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.kler.cn/news/308408.html

相关文章:

  • 检测场景变化并将视频按场景分开
  • 特殊类的设计与类型转换
  • Axure RP实战:打造高效图形旋转验证码
  • [网络]TCP/IP协议 之 数据链路层和DNS
  • GFS 分布式文件系统 GlusterFS
  • Flip动画的实现示例demo
  • 星火AI图片理解API文档
  • SpringBoot项目请求返回json空字段过滤
  • Element-UI 组件实现面包屑导航栏
  • 怎么使用ai 免费生成ppt?这4个工具可以帮忙
  • 人工智能与机器学习原理精解【20】
  • 信息安全工程师(6)网络信息安全现状与问题
  • 3D点云目标检测数据集标注工具 保姆级教程——CVAT (附json转kitti代码)
  • COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧
  • 唯徳知识产权管理系统 DownloadFileWordTemplate 文件读取漏洞复现
  • ubuntu 遇到的一些问题及解决办法
  • rabbitmq容器化部署
  • 钻机、塔吊等大型工程设备,如何远程维护、实时采集运行数据?
  • TypeScript:高级类型
  • 主流敏捷工具scrum工具
  • linux-centos 设置系统时间
  • React学习day07-ReactRouter-抽象路由模块、路由导航、路由导航传参、嵌套路由、默认二级路由的设置、两种路由模式
  • MyBatis XML映射文件编写【后端 18】
  • BFS 解决边权为1的最短路问题
  • BUUCTF逆向wp [WUSTCTF2020]level3
  • k8s介绍及部署
  • stm32 SPI通信外设(硬件SPI读写W25Q64)
  • 火山引擎携手地瓜机器人,加速大模型在机器人场景规模落地
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • 数模原理精解【12】