当前位置:   article > 正文

YOLOV5学习笔记(六)——优化网络架构_下采样步长为2通道数翻倍

下采样步长为2通道数翻倍

目录

1 整体框架分析

1.1 Focus

1.2 Conv模块

1.3 Bottleneck模块

1.4 C3模块 跨尺度连接

1.5 SPP:空间金字塔池化

1.6 Concat

2 更改网络架构

2.2 小目标

2.1 轻量化


1 整体框架分析

Backbone作用:特征提取

Neck作用:对特征进行一波混合与组合,并且把这些特征传递给预测层

Head作用:进行最终的预测输出

  1. # anchors
  2. anchors:
  3. - [10,13, 16,30, 33,23] # P3/8 stride=8
  4. - [30,61, 62,45, 59,119] # P4/16
  5. - [116,90, 156,198, 373,326] # P5/32
  6. backbone:
  7. # [from, number, module, args]
  8. # from表示当前模块的输入来自那一层的输出,-1表示来自上一层的输出
  9. # number表示本模块重复的次数,1表示只有一个,3表示重复3次
  10. # module: 模块名
  11. [[-1, 1, Focus, [64, 3]], # 0-P1/2 [3, 32, 3]
  12. [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [32, 64, 3, 2]
  13. [-1, 3, C3, [128]], # 2 [64, 64, 1]
  14. [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [64, 128, 3, 2]
  15. [-1, 9, C3, [256]], # 4 [128, 128, 3]
  16. [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [128, 256, 3, 2]
  17. [-1, 9, C3, [512]], # 6 [256, 256, 3]
  18. [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [256, 512, 3, 2]
  19. [-1, 1, SPP, [1024, [5, 9, 13]]], # 8 [512, 512, [5, 9, 13]]
  20. [-1, 3, C3, [1024, False]], # 9 [512, 512, 1, False]
  21. # [nc, anchors, 3个Detect的输出channel]
  22. # [1, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]
  23. ]
  24. head:
  25. [[-1, 1, Conv, [512, 1, 1]], # 10 [512, 256, 1, 1]
  26. [-1, 1, nn.Upsample, [None, 2, 'nearest']], # 11 [None, 2, 'nearest']
  27. [[-1, 6], 1, Concat, [1]], # 12 cat backbone P4 [1]
  28. [-1, 3, C3, [512, False]], # 13 [512, 256, 1, False]
  29. [-1, 1, Conv, [256, 1, 1]], # 14 [256, 128, 1, 1]
  30. [-1, 1, nn.Upsample, [None, 2, 'nearest']], #15 [None, 2, 'nearest']
  31. [[-1, 4], 1, Concat, [1]], # 16 cat backbone P3 [1]
  32. [-1, 3, C3, [256, False]], # 17 (P3/8-small) [256, 128, 1, False]
  33. [-1, 1, Conv, [256, 3, 2]], # 18 [128, 128, 3, 2]
  34. [[-1, 14], 1, Concat, [1]], # 19 cat head P4 [1]
  35. [-1, 3, C3, [512, False]], # 20 (P4/16-medium) [256, 256, 1, False]
  36. [-1, 1, Conv, [512, 3, 2]], # 21 [256, 256, 3, 2]
  37. [[-1, 10], 1, Concat, [1]], # 22 cat head P5 [1]
  38. [-1, 3, C3, [1024, False]], # 23 (P5/32-large) [512, 512, 1, False]
  39. [[17, 20, 23], 1, Detect, [nc, anchors]], # 24 Detect(P3, P4, P5)
  40. ]

1.1 Focus

作用:下采样

Focus模块的作用是对图片进行切片,类似于下采样,先将图片变为320×320×12的特征图,再经过3×3的卷积操作,输出通道32,最终变为320×320×32的特征图,是一般卷积计算量的4倍,如此做下采样将无信息丢失。

输入:3x640x640

输出:32×320×320

1.2 Conv模块

作用:卷积,步长为2下采样,步长为1大小不变

对输入的特征图执行卷积BN激活函数操作,在新版的YOLOv5中,作者使用Silu作为激活函数。

1.3 Bottleneck模块

作用:为了降低参数量

利用多个小卷积核替代一个大卷积核,先将channel 数减小再扩大(默认减小到一半),具体做法是先进行1×1卷积将channel减小一半,再通过3×3卷积将通道数加倍,并获取特征(共使用两个标准卷积模块),其输入与输出的通道数是不发生改变的。

  • 直接使用 3x3 的卷积核参数量:256×3×3×256 = 589824
  • 先经过 1x1 的卷积核,再经过 3x3 卷积核,最后经过一个 1x1 卷积核参数量:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69632

1.4 C3模块 跨尺度连接

作用:残差结构,让模型学习更多的特征。

  1.     C3相对于BottleneckCSP模块不同的是,经历过残差输出后的Conv模块被去掉了,concat后的标准卷积模块中的激活函数也由LeakyRelu变为了SiLU(同上)。
  2.     该模块是对残差特征进行学习的主要模块,其结构分为两支,一支使用了上述指定多个Bottleneck堆叠和3个标准卷积层,另一支仅经过一个基本卷积模块,最后将两支进行concat操作。

1.5 SPP:空间金字塔池化

作用:能将任意大小的特征图转换成固定大小的特征向量

  1. SPP是空间金字塔池化的简称,其先通过一个标准卷积模块将输入通道减半,然后分别做kernel-size为5,9,13的maxpooling(对于不同的核大小,padding是自适应的)。
  2. 对三次最大池化的结果与未进行池化操作的数据进行concat,最终合并后channel数是原来的2倍。

 1.6 Concat

作用:融合两层

大小通道相同的两层叠加,通道数相加

2 更改网络架构

2.2 小目标

添加一个小目标层,160*160。通道数的选择主要目的是为了和上层通道数一致从而能够concat

  1. # YOLOv5
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/136551
    推荐阅读
    相关标签