当前位置:   article > 正文

YOLOv5超参数、迁移训练设置_如何将mobilenetv3在imagenet数据集上训练好的参数迁移到yolov5上

如何将mobilenetv3在imagenet数据集上训练好的参数迁移到yolov5上

目录

一、超参数设置

1. 定义自适应函数

2. 定义模型深度和宽度

二、迁移训练设置

1. 为迁移训练设置冻结层


一、超参数设置

1. 定义自适应函数

遗传算法中适应度(fitness)是描述个体性能的主要指标,直接影响到算法的收敛速度以及能否找到最优解。适应度是训练中寻求最大化的一个值。YOLOv5默认的适应度函数为各指标的加权组合:mAP_0.5占10%权重;mAP_0.5:0.95占90%权重,不存在Precision和Recall。

定义的位置在./utils/metric.py:

  1. def fitness(x):
  2. # Model fitness as a weighted combination of metrics
  3. w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
  4. return (x[:, :4] * w).sum(1)

2. 定义模型深度和宽度

YOLOv5引入了depth_multiple和width_multiple系数来得到不同大小模型:

  1. nc: 1 # number of classes
  2. depth_multiple: 0.33 # model depth multiple
  3. width_multiple: 0.50 # layer channel multiple

depth_multiple表示channel的缩放系数,就是将配置里面的backbone和head部分有关通道的设置,全部乘以该系数即可。而width_multiple表示BottleneckCSP模块的层缩放系数,将所有的BottleneckCSP模块的number系数乘上该参数就可以最终的层个数。可以发现通过这两个参数就可以实现不同大小不同复杂度的模型设计。

同一文件下的backbone和head记录了网络结构:

  1. # YOLOv5 v6.0 backbone
  2. backbone:
  3. # [from, number, module, args]
  4. [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
  5. [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
  6. [-1, 3, C3, [128]],
  7. [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
  8. [-1, 6, C3, [256]],
  9. [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
  10. [-1, 9, C3, [512]],
  11. [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
  12. [-1, 3, C3, [1024]],
  13. [-1, 1, SPPF, [1024, 5]], # 9
  14. ]
  15. # YOLOv5 v6.0 head
  16. head:
  17. [[-1, 1, Conv, [512, 1, 1]],
  18. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  19. [[-1, 6], 1, Concat, [1]], # cat backbone P4
  20. [-1, 3, C3, [512, False]], # 13
  21. [-1, 1, Conv, [256, 1, 1]],
  22. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  23. [[-1, 4], 1, Concat, [1]], # cat backbone P3
  24. [-1, 3, C3, [256, False]], # 17 (P3/8-small)
  25. [-1, 1, Conv, [256, 3, 2]],
  26. [[-1, 14], 1, Concat, [1]], # cat head P4
  27. [-1, 3, C3, [512, False]], # 20 (P4/16-medium)
  28. [-1, 1, Conv, [512, 3, 2]],
  29. [[-1, 10], 1, Concat, [1]], # cat head P5
  30. [-1, 3, C3, [1024, False]], # 23 (P5/32-large)
  31. [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
  32. ]

from:第一列;代表输入来自哪一层,-1代表上一层,4代表第4层

number:第二列;卷积核的数量,最终数量需要乘上width

module:第三列;模块名称,包括:Conv Focus BottleneckCSP SPP #

args:第四列;模块的参数

二、迁移训练设置

1. 为迁移训练设置冻结层

通过冻结某些层进行迁移训练可以实现在新模型上快速进行重新训练,以节省训练资源。YOLOv5所有层的冻结通过设置其梯度为零来实现,执行的位置在train.py:

  1. # Freeze
  2. freeze = [f'model.{x}.' for x in (freeze if len(freeze) > 1 else range(freeze[0]))] # layers to freeze
  3. for k, v in model.named_parameters():
  4. v.requires_grad = True # train all layers
  5. if any(x in k for x in freeze):
  6. LOGGER.info(f'freezing {k}')
  7. v.requires_grad = False

在./model/yolov5x.yaml可以查看网络层:

backbone为0-9层

head为13-23层

  1. backbone:
  2. # [from, number, module, args]
  3. [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
  4. [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
  5. [-1, 3, C3, [128]],
  6. [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
  7. [-1, 6, C3, [256]],
  8. [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
  9. [-1, 9, C3, [512]],
  10. [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
  11. [-1, 3, C3, [1024]],
  12. [-1, 1, SPPF, [1024, 5]], # 9
  13. ]
  14. # YOLOv5 v6.0 head
  15. head:
  16. [[-1, 1, Conv, [512, 1, 1]],
  17. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  18. [[-1, 6], 1, Concat, [1]], # cat backbone P4
  19. [-1, 3, C3, [512, False]], # 13
  20. [-1, 1, Conv, [256, 1, 1]],
  21. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  22. [[-1, 4], 1, Concat, [1]], # cat backbone P3
  23. [-1, 3, C3, [256, False]], # 17 (P3/8-small)
  24. [-1, 1, Conv, [256, 3, 2]],
  25. [[-1, 14], 1, Concat, [1]], # cat head P4
  26. [-1, 3, C3, [512, False]], # 20 (P4/16-medium)
  27. [-1, 1, Conv, [512, 3, 2]],
  28. [[-1, 10], 1, Concat, [1]], # cat head P5
  29. [-1, 3, C3, [1024, False]], # 23 (P5/32-large)
  30. [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
  31. ]

通过:

python train.py --freeze 10

冻结头部进行训练。

通过:

python train.py --freeze 24

冻结除了输出层以外的所有层进行训练。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号