zoukankan      html  css  js  c++  java
  • YOLOV5源码解读-export.py网络结构、配置文件

     yolov5默认模型文件格式为:".pt",使用上述可视化工具的时候,需要利用yolov5给的代码(export.py),将模型转为".torchscript.pt"格式,然后就可以完整地可视化网络结构了。

    yolo5s四个针对coco数据集的预训练模型下载地址:

    # Download latest models from     https://github.com/ultralytics/yolov5/releases

    下载好模型之后,我们在控制台激活虚拟环境,开始转换模型,使用如下指令:

    (yolov5) D:yolov5yolov5-master>python models/export.py --weights ./weights/yolov5x.pt --img 640 --batch 1   

    我这里在网页版netron加载、可视化模型文件;

    网页版netron:https://netron.app/

    二、models/yolov5s.yaml网络配置文件讲解

     在四个yaml文件中,5s 5m 5l 5x 也就下面网络的深度、宽度两个参数不同,其他一样的,你可以对比结构图。
     1 # parameters
     2 nc: 80  # number of classes 6 
     7 # eg:下面backbone中的模块:[-1, 9, C3, [512]]
     8 # 重复9次,在yolo5s中,0.33 * 9 = 3,表示仅重复三次,表示backbone、head中bottleNeck(csp残差组件)重复次数
     9 depth_multiple: 0.33  # model depth multiple
    10 
    11 # width_multiple:卷积核个数,也就决定了当前层featuremap输出channels维度
    12 # eg:[-1, 1, Focus, [64, 3]],中的64表示经过该模块后
    13 # 得到64个特征图,但是由于这里网络宽度设置为0.5,所以
    14 # 输出应该是0.5 * 64 = 32个特征图
    15 width_multiple: 0.50  # layer channel multiple
    16 
    17 # anchors 先验框,和V3一样
    18 anchors:
    19   - [10,13, 16,30, 33,23]  # P3/8   # 负责大特征图(感受野小)上检测小目标
    20   - [30,61, 62,45, 59,119]  # P4/16
    21   - [116,90, 156,198, 373,326]  # P5/32    # 负责小特征图(感受野大)上检测大目标
    22 
    23 # YOLOv5 backbone
    24 backbone:
    25   # [from, number, module, args] # 下面参数格式
    26   # from:当前层输入来自哪里,例如:-1:连接上一层;6:表示第6层输入
    27   # number:模块重复次数,例如:32行C3表示CSP残差组件,它默认重复9次,和上面深度参数相乘,得到5s版本模型
    28   # module:模型名字
    29   # args:模型参数,eg:卷积核尺寸
    30   [[-1, 1, Focus, [64, 3]],  # 0-P1/2  
    31    [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
    32    [-1, 3, C3, [128]], # bottleneckCSP:CSP残差组件,bottleneck表示残差组件
    33    [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
    34    [-1, 9, C3, [256]],
    35    [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
    36    [-1, 9, C3, [512]],
    37    [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
        # 5、9、13表示MaxPooling时候的三种情况,即:划分的网格
    38 [-1, 1, SPP, [1024, [5, 9, 13]]], # 5、9、13表示SPP层中在多大区域进行maxPooling,eg:5表示在5×5区域找出最大值 39 [-1, 3, C3, [1024, False]], # 9 40 ] 41 42 # YOLOv5 head 43 head: 44 [[-1, 1, Conv, [512, 1, 1]], 45 [-1, 1, nn.Upsample, [None, 2, 'nearest']], # 上采样 46 [[-1, 6], 1, Concat, [1]], # cat backbone P4 ,这里的P4就是上述backbone中的P4,信息传递 47 [-1, 3, C3, [512, False]], # 13 48 49 [-1, 1, Conv, [256, 1, 1]], 50 [-1, 1, nn.Upsample, [None, 2, 'nearest']], 51 [[-1, 4], 1, Concat, [1]], # cat backbone P3,同理和backbone中的P3模块进行拼接 52 [-1, 3, C3, [256, False]], # 17 (P3/8-small) 53 54 [-1, 1, Conv, [256, 3, 2]], 55 [[-1, 14], 1, Concat, [1]], # cat head P4 56 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) 57 58 [-1, 1, Conv, [512, 3, 2]], 59 [[-1, 10], 1, Concat, [1]], # cat head P5 60 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) 61 62 [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) # 17 20 23层在下图已经标注 63 ]

    上述红色256、512、1024表示PANet不同尺度下特征图输入维度,如下图左边三个蓝色圈标注所示,不要误解为右边三个蓝色圈。最终,网络最后一层,三个卷积输出三个尺度特征图,输出维度都是na*(nc + 5),na = 3,表示三个先验框,nc = 80,表示80个类别,后面是1×1卷积、stride。

    上面四个concat已经在下图红色数字标注

     reference:https://blog.csdn.net/mary_0830/article/details/107124459

    CV&DL
  • 相关阅读:
    [Swift]关键字:class与staitc的区别
    [Swift]LeetCode1171. 从链表中删去总和值为零的连续节点 | Remove Zero Sum Consecutive Nodes from Linked List
    [Swift]LeetCode1172. 餐盘栈 | Dinner Plate Stacks
    [Swift]LeetCode1170. 比较字符串最小字母出现频次 | Compare Strings by Frequency of the Smallest Character
    [Swift]LeetCode1169. 查询无效交易 | Invalid Transactions
    [Swift]LeetCode1167. 连接棒材的最低费用 | Minimum Cost to Connect Sticks
    [Swift]LeetCode1166.设计文件系统 | Design File System
    [Swift]LeetCode1165. 单行键盘 | Single-Row Keyboard
    [Swift]LeetCode1168. 水资源分配优化 | Optimize Water Distribution in a Village
    METRO风格
  • 原文地址:https://www.cnblogs.com/winslam/p/14504576.html
Copyright © 2011-2022 走看看