当前位置:   article > 正文

模块整理!YOLOv9中的“Silence”、“RepNCSPELAN4”、“ADown”、“CBLinear”创新模块汇总!

repncspelan


代码链接:https://github.com/WongKinYiu/yolov9/tree/main

论文链接:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information


同时推荐一下我的专栏,正在更新最新的YOLOv9改进!
在做深度学习、目标检测的同学来快看一看!

最新的YOLO系列模型,YOLOv9改进创新来啦!发论文必备!

趁现在做的人少,赶紧入手发论文呀!快人一步!

本周末推出YOLOv9创新点项目,目前已有20+创新,预计项目推出时创新点可达到30+!后期更新包含模块、卷积、检测头、损失等改进!

⭐大家可以搜搜看,这是CSDN最具性价比的YOLO系列改进项目⭐

⭐四月底预计创新点可达80-100+!⭐

⭐现在入手仅$ 59.9,早入早发论文!⭐

⭐即将涨价,创新点越多,价格越贵!⭐

联系QQ: 2668825911 ,欢迎交流!

本项目持续更新,不付费订阅也可关注等每周更新,每周开源1-2篇。

本项目可以帮你节省80%编码的时间,我的更新+你的努力,发文章将不再困难!

YOLOv9有效改进系列|包含卷积、主干、注意力等模块


大量文字图片来袭!

本文整理了YOLOv9中的创新模块,附代码和结构图,快收藏使用吧!


1.Silence

       Silence 代码:

  1. class Silence(nn.Module):
  2. def __init__(self):
  3. super(Silence, self).__init__()
  4. def forward(self, x):
  5. return x

        Silence 模块位于yolov9网络的第一层,从Silence的代码中我们可以看到,YOLOv9的Silence 模块的作用就是返回输入的图片变量,并不包含其余操作。这个操作可以将x保存在网络的结构中,极大的方便双主干(在YOLOv9中是辅助分支)的调用及其他工作。


2.RepNCSPELAN4

       RepNCSPELAN4代码:

  1. class RepNCSPELAN4(nn.Module):
  2. # csp-elan
  3. def __init__(self, c1, c2, c3, c4, c5=1): # ch_in, ch_out, number, shortcut, groups, expansion
  4. super().__init__()
  5. self.c = c3//2
  6. self.cv1 = Conv(c1, c3, 1, 1)
  7. self.cv2 = nn.Sequential(RepNCSP(c3//2, c4, c5), Conv(c4, c4, 3, 1))
  8. self.cv3 = nn.Sequential(RepNCSP(c4, c4, c5), Conv(c4, c4, 3, 1))
  9. self.cv4 = Conv(c3+(2*c4), c2, 1, 1)
  10. def forward(self, x):
  11. y = list(self.cv1(x).chunk(2, 1))
  12. y.extend((m(y[-1])) for m in [self.cv2, self.cv3])
  13. return self.cv4(torch.cat(y, 1))
  14. def forward_split(self, x):
  15. y = list(self.cv1(x).split((self.c, self.c), 1))
  16. y.extend(m(y[-1]) for m in [self.cv2, self.cv3])
  17. return self.cv4(torch.cat(y, 1))

        RepNCSPELAN4模块是YOLOv9中的特征提取-融合模块。


3.ADown

       ADown代码:

  1. class ADown(nn.Module):
  2. def __init__(self, c1, c2): # ch_in, ch_out, shortcut, kernels, groups, expand
  3. super().__init__()
  4. self.c = c2 // 2
  5. self.cv1 = Conv(c1 // 2, self.c, 3, 2, 1)
  6. self.cv2 = Conv(c1 // 2, self.c, 1, 1, 0)
  7. def forward(self, x):
  8. x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True)
  9. x1,x2 = x.chunk(2, 1)
  10. x1 = self.cv1(x1)
  11. x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1)
  12. x2 = self.cv2(x2)
  13. return torch.cat((x1, x2), 1)

        ADown模块是YOLOv9中的下采样模块。


4.CBLinear

       CBLinear代码:

  1. class CBLinear(nn.Module):
  2. def __init__(self, c1, c2s, k=1, s=1, p=None, g=1): # ch_in, ch_outs, kernel, stride, padding, groups
  3. super(CBLinear, self).__init__()
  4. self.c2s = c2s
  5. self.conv = nn.Conv2d(c1, sum(c2s), k, s, autopad(k, p), groups=g, bias=True)
  6. def forward(self, x):
  7. outs = self.conv(x).split(self.c2s, dim=1)
  8. return outs

        CBLinear模块是YOLOv9中的特征提取模块。

YOLOv9配置文件

  1. # YOLOv9 backbone
  2. backbone:
  3. [
  4. [-1, 1, Silence, []],
  5. # conv down
  6. [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
  7. # conv down
  8. [-1, 1, Conv, [128, 3, 2]], # 2-P2/4
  9. # elan-1 block
  10. [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 3
  11. # avg-conv down
  12. [-1, 1, ADown, [256]], # 4-P3/8
  13. # elan-2 block
  14. [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 5
  15. # avg-conv down
  16. [-1, 1, ADown, [512]], # 6-P4/16
  17. # elan-2 block
  18. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 7
  19. # avg-conv down
  20. [-1, 1, ADown, [512]], # 8-P5/32
  21. # elan-2 block
  22. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 9
  23. ]
  24. # YOLOv9 head
  25. head:
  26. [
  27. # elan-spp block
  28. [-1, 1, SPPELAN, [512, 256]], # 10
  29. # up-concat merge
  30. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  31. [[-1, 7], 1, Concat, [1]], # cat backbone P4
  32. # elan-2 block
  33. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 13
  34. # up-concat merge
  35. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  36. [[-1, 5], 1, Concat, [1]], # cat backbone P3
  37. # elan-2 block
  38. [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]], # 16 (P3/8-small)
  39. # avg-conv-down merge
  40. [-1, 1, ADown, [256]],
  41. [[-1, 13], 1, Concat, [1]], # cat head P4
  42. # elan-2 block
  43. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 19 (P4/16-medium)
  44. # avg-conv-down merge
  45. [-1, 1, ADown, [512]],
  46. [[-1, 10], 1, Concat, [1]], # cat head P5
  47. # elan-2 block
  48. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 22 (P5/32-large)
  49. # multi-level reversible auxiliary branch
  50. # routing
  51. [5, 1, CBLinear, [[256]]], # 23
  52. [7, 1, CBLinear, [[256, 512]]], # 24
  53. [9, 1, CBLinear, [[256, 512, 512]]], # 25
  54. # conv down
  55. [0, 1, Conv, [64, 3, 2]], # 26-P1/2
  56. # conv down
  57. [-1, 1, Conv, [128, 3, 2]], # 27-P2/4
  58. # elan-1 block
  59. [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]], # 28
  60. # avg-conv down fuse
  61. [-1, 1, ADown, [256]], # 29-P3/8
  62. [[23, 24, 25, -1], 1, CBFuse, [[0, 0, 0]]], # 30
  63. # elan-2 block
  64. [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]], # 31
  65. # avg-conv down fuse
  66. [-1, 1, ADown, [512]], # 32-P4/16
  67. [[24, 25, -1], 1, CBFuse, [[1, 1]]], # 33
  68. # elan-2 block
  69. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 34
  70. # avg-conv down fuse
  71. [-1, 1, ADown, [512]], # 35-P5/32
  72. [[25, -1], 1, CBFuse, [[2]]], # 36
  73. # elan-2 block
  74. [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]], # 37
  75. # detection head
  76. # detect
  77. [[31, 34, 37, 16, 19, 22], 1, DualDDetect, [nc]], # DualDDetect(A3, A4, A5, P3, P4, P5)
  78. ]
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号