赞
踩
这部分比较简单,以下是yolov5l的配置文件
# Parameters
nc: 80 # number of classes
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # 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
nc:类别数,你的类别有多少就填写多少。从1开始算起,不是0-14这样算。
depth_multiple:控制模型的深度。
width_multiple:控制卷积核的个数。
yolov5提供了s、m、l、x四种,所有的yaml文件都设置差不多,只有上面2和3的设置不同,作者团队很厉害,只需要修改这两个参数就可以调整模型的网络结构。
yaml文件的内容会在yolo.py中进行调用,只需要修改"width_multiple"和"depth_multiple"两个参数就可以,可以灵活地修改网络的结构,具体分析如下。
第一部分是三个参数,第一个是数据集中的类别数.
第二个用来调整网络的深度.
第三个用来调整网络的宽度,具体怎么调整的结合后面的backbone代码解释。
depth_multiple和width_multiple用来生成不同大小的模型,如果希望大一点,就把这个数字改大一点,网络就会按比例变深、变宽;如果希望小一点,就把这个数字改小一点,网络就会按比例变浅、变窄;如下。
# 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的源码中,是将yolov5s的结构封装在"yolov5s.yaml"中,但是他没有单独写neck,将neck分开在了backbone和head里面。
以下是常规yolov5l的backbone部分
四个参数的意义分别是:
第一个参数 from :从哪一层获得输入,-1表示从上一层获得,[-1, 6]表示从上层和第6层两层获得。
第二个参数 number:表示有几个相同的模块,如果为9则表示有9个相同的模块。
第三个参数 module:模块的名称,这些模块写在common.py中。
第四个参数 args:这个参数就与第一部分的"width_multiple"参数有关了,上面把width_multiple设置为了0.5,那么第一个
[64, 6, 2, 2] 就会被解析为[3,64*0.5=32,6,2,2],
其中第一3为输入channel(因为输入),32为输出channel。(具体可以通过第三个参数(module) 在common.py文件中找到对应传入参数。)
# 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会按照配置文件实例化各个层,每行的列表中的四个元素分别代表:[from, number, module, args],
**
anchors:
- [10,13, 16,30, 33,23] # P3/8,检测小目标,10,13是一组尺寸,总共三组检测小目标
- [30,61, 62,45, 59,119] # P4/16,检测中目标,共三组
- [116,90, 156,198, 373,326] # P5/32,检测大目标,共三组
该anchor尺寸是为输入图像640×640分辨率预设的,实现了即可以在小特征图(feature map)上检测大目标,也可以在大特征图上检测小目标。三种尺寸的特征图,每个特征图上的格子有三个尺寸的anchor。
初始化超参
YOLOv5的超参文件见data/hyp.finetune.yaml(适用VOC数据集)或者hyo.scrach.yaml(适用COCO数据集)文件
lr0: 0.01 # 初始学习率 (SGD=1E-2, Adam=1E-3) lrf: 0.2 # 循环学习率 (lr0 * lrf) momentum: 0.937 # SGD momentum/Adam beta1 学习率动量 weight_decay: 0.0005 # 权重衰减系数 warmup_epochs: 3.0 # 预热学习 (fractions ok) warmup_momentum: 0.8 # 预热学习动量 warmup_bias_lr: 0.1 # 预热初始学习率 box: 0.05 # iou损失系数 cls: 0.5 # cls损失系数 cls_pw: 1.0 # cls BCELoss正样本权重 obj: 1.0 # 有无物体系数(scale with pixels) obj_pw: 1.0 # 有无物体BCELoss正样本权重 iou_t: 0.20 # IoU训练时的阈值 anchor_t: 4.0 # anchor的长宽比(长:宽 = 4:1) # anchors: 3 # 每个输出层的anchors数量(0 to ignore) #以下系数是数据增强系数,包括颜色空间和图片空间 fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) hsv_h: 0.015 # 色调 (fraction) hsv_s: 0.7 # 饱和度 (fraction) hsv_v: 0.4 # 亮度 (fraction) degrees: 0.0 # 旋转角度 (+/- deg) translate: 0.1 # 平移(+/- fraction) scale: 0.5 # 图像缩放 (+/- gain) shear: 0.0 # 图像剪切 (+/- deg) perspective: 0.0 # 透明度 (+/- fraction), range 0-0.001 flipud: 0.0 # 进行上下翻转概率 (probability) fliplr: 0.5 # 进行左右翻转概率 (probability) mosaic: 1.0 # 进行Mosaic概率 (probability) mixup: 0.0 # 进行图像混叠概率(即,多张图像重叠在一起) (probability)
接下来可以通过运行python models/yolo.py 脚本得到网路结构,结果如下:
yolo: cfg=yolov5s.yaml, batch_size=1, device=, profile=False, line_profile=False, test=False
YOLOv5 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/257909
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。