YOLOv7-tiny网络结构图及yaml文件 详细备注

05-11 阅读 0评论

YOLOv7-tiny

  • 整体网络结构图
  • yolov7-tiny.yaml
  • 组件模块
    • MX
    • CBL
    • SPPCSP
      • 结构图
      • yaml
      • 构建代码
      • MCB
        • 结构图
        • yaml文件表示
        • common.py代码
        • 参考

          整体网络结构图

          YOLOv7-tiny网络结构图及yaml文件 详细备注

          yolov7-tiny.yaml

          # parameters
          nc: 80  # number of classes
          depth_multiple: 1.0  # model depth multiple
          width_multiple: 1.0  # layer channel multiple
          # anchors
          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
          # yolov7-tiny backbone
          backbone:
            # [from, number, module, args] ch_out, k=1, s=1, p=None, g=1, act=True
            [[-1, 1, Conv, [32, 3, 2, None, 1, nn.LeakyReLU(0.1)]],  # 0-P1/2  
            
             [-1, 1, Conv, [64, 3, 2, None, 1, nn.LeakyReLU(0.1)]],  # 1-P2/4    
             
             [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  #MCB
             [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 7
             
             [-1, 1, MP, []],  # 8-P3/8
             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 14
             
             [-1, 1, MP, []],  # 15-P4/16
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 21
             
             [-1, 1, MP, []],  # 22-P5/32
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [512, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 28
            ]
          # yolov7-tiny head
          head:
            #SPPCSP
            [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, SP, [5]],
             [-2, 1, SP, [9]],
             [-3, 1, SP, [13]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -7], 1, Concat, [1]],
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 37
            
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, nn.Upsample, [None, 2, 'nearest']],
             [21, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P4
             [[-1, -2], 1, Concat, [1]],
             
             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 47
            
             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, nn.Upsample, [None, 2, 'nearest']],
             [14, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P3
             [[-1, -2], 1, Concat, [1]],
             
             [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 57
             
             [-1, 1, Conv, [128, 3, 2, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, 47], 1, Concat, [1]],
             
             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 65
             
             [-1, 1, Conv, [256, 3, 2, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, 37], 1, Concat, [1]],
             
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 73
                
             [57, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [65, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [73, 1, Conv, [512, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[74,75,76], 1, IDetect, [nc, anchors]],   # Detect(P3, P4, P5)
            ]
          

          组件模块

          MX

          池化层,默认表示两倍下采样,

          class MP(nn.Module):
              def __init__(self, k=2):
                  super(MP, self).__init__()
                  self.m = nn.MaxPool2d(kernel_size=k, stride=k)
              def forward(self, x):
                  return self.m(x)
          
             [-1, 1, MP, []],  # 8-P3/8
          

          CBL

          就是表示Conv+BN+LeakyReLU

          [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]]

          class Conv(nn.Module):
              # Standard convolution
              def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groups
                  super(Conv, self).__init__()
                  self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)
                  self.bn = nn.BatchNorm2d(c2)
                  self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())
              def forward(self, x):
                  return self.act(self.bn(self.conv(x)))
              def fuseforward(self, x):
                  return self.act(self.conv(x))
          

          SPPCSP

          结构图

          YOLOv7-tiny网络结构图及yaml文件 详细备注

          yaml

          yaml文件中如下表示,直接看最后一层输出通道数,尺寸不会变化,SP模块默认设置卷积Pading为卷积核的一半大小

            #SPPCSP
            [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], #20*20*256
             [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], #20*20*256
             [-1, 1, SP, [5]],
             [-2, 1, SP, [9]],
             [-3, 1, SP, [13]],
             [[-1, -2, -3, -4], 1, Concat, [1]],                         #20*20*512
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],     #20*20*256
             [[-1, -7], 1, Concat, [1]],                                 #20*20*512
             [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],#20  #20*20*256
          

          构建代码

          yaml文件中的SP表示如下

          # i+2p-k
          class SP(nn.Module):
              def __init__(self, k=3, s=1):
                  super(SP, self).__init__()
                  self.m = nn.MaxPool2d(kernel_size=k, stride=s, padding=k // 2)
              def forward(self, x):
                  return self.m(x)
          

          MCB

          结构图

          YOLOv7-tiny网络结构图及yaml文件 详细备注

          yaml文件表示

          直接看最后一层输出的通道数看Concat后变化,

             [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],               #40*40*64
             [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
             [[-1, -2, -3, -4], 1, Concat, [1]],
             [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 30       #40*40*128
          

          common.py代码

          通过Conv函数构建即可

          参考

          yolov7-tiny网络结构图

          https://blog.csdn.net/weixin_51346544/article/details/129322706


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]