• yolov5更换MobileNetV3的主干网络


    目录

    1.定义网络

     2.将test_MobileNetV3.py上面的代码复制粘贴到如下文件里面

    2.1复制需要更改的原来的网络如何改结构

    3.更改yolo.py注册网络 

    1.定义网络

    1. 宽度为0.5的YOLOV5网络的结构图

    在主干网络上面可以重新定义成三层,编号从0开始

     如图是MobileNetV3 的网络结构,要想重新定义的画需要保持每次输出图片的大小不变

     定义MobileNetV3 的代码如下,我们可以分为3层 test_MobileNetV3.py

    1. import torch
    2. from torch import nn
    3. from torchvision import models
    4. from torchinfo import summary
    5. class MobileNetV3(nn.Module):
    6. def __init__(self, n):
    7. super().__init__()
    8. model = models.mobilenet_v3_small(pretrained=True)
    9. if n == 0:
    10. self.model = model
    11. if n == 1:
    12. self.model = model.features[:4]
    13. if n == 2:
    14. self.model = model.features[4:9]
    15. if n == 3:
    16. self.model = model.features[9:]
    17. def forward(self, x):
    18. return self.model(x)
    19. if __name__ == '__main__':
    20. x = torch.randn(1, 3, 640, 640)
    21. net = MobileNetV3(0)
    22. out = net(x)
    23. print(x.shape)
    24. summary(net,(1,3,640,640))

    feature代表的含义 

     

     2.将test_MobileNetV3.py上面的代码复制粘贴到如下文件里面

    2.1复制需要更改的原来的网络如何改结构

    从这些里面挑一个

    做出如下更改

    1. # YOLOv5 🚀 by Ultralytics, GPL-3.0 license
    2. # Parameters
    3. nc: 80 # number of classes
    4. depth_multiple: 0.33 # model depth multiple
    5. width_multiple: 0.50 # layer channel multiple
    6. anchors:
    7. - [10,13, 16,30, 33,23] # P3/8
    8. - [30,61, 62,45, 59,119] # P4/16
    9. - [116,90, 156,198, 373,326] # P5/32
    10. # YOLOv5 v6.0 backbone
    11. backbone:
    12. # [from, number, module, args]
    13. [
    14. [-1, 1,MobileNetV3, [24, 1]], # 0-P1/2
    15. [-1, 1,MobileNetV3, [48,2]], # 1-P2/4
    16. [-1, 1,MobileNetV3, [576,3]],
    17. ]
    18. # YOLOv5 v6.0 head
    19. head:
    20. [[-1, 1, Conv, [512, 1, 1]],
    21. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
    22. [[-1, 1], 1, Concat, [1]], # cat backbone P4
    23. [-1, 3, C3, [512, False]], # 13
    24. [-1, 1, Conv, [256, 1, 1]],
    25. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
    26. [[-1, 0], 1, Concat, [1]], # cat backbone P3
    27. [-1, 3, C3, [256, False]], # 17 (P3/8-small)
    28. [-1, 1, Conv, [256, 3, 2]],
    29. [[-1, 7], 1, Concat, [1]], # cat head P4
    30. [-1, 3, C3, [512, False]], # 20 (P4/16-medium)
    31. [-1, 1, Conv, [512, 3, 2]],
    32. [[-1, 3], 1, Concat, [1]], # cat head P5
    33. [-1, 3, C3, [1024, False]], # 23 (P5/32-large)
    34. [[10, 13, 16], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
    35. ]

    下面几张图是解释

     

    3.更改yolo.py注册网络 

    如下位置

     添加如下代码,大概340行左右

    还是在yolo.py文件里面更改这一句可以进行测试

    run一下yolo.py

     更改完成!!!

  • 相关阅读:
    HTTP/HTTPS TCP/IP
    MIPS五种寻址方式
    Node.js躬行记(27)——接口管理
    TCP的连接套接口哈希表初始化
    【Python基础系列】Part2. 列表
    SQL SERVER LSN
    【设计模式】第3节:设计模式概论
    redis非关系型数据库
    oppok10pro和红米k50哪个值得买 两者配置对比
    Java入门第一步---配置环境、安装工具(超级详细)
  • 原文地址:https://blog.csdn.net/m0_53291740/article/details/141020178