当前位置:   article > 正文

YOLOv5改进(CONTEXT AUGMENTATION MODULE,CAM)

yolov5改进

1.CONTEXT AUGMENTATION MODULE

上下文增强模块。

论文地址:https://openreview.net/pdf?id=q2ZaVU6bEsT

2.策略 

         通过C5 之后经过3个卷积核大小为3*3,扩张卷积率为1、3、5的卷积,然后三个卷积再进行融合。这样做融合不同感受野获得的特征,丰富上下文信息,获得更好的特征提取效果,便于微笑目标的检测,

融合有三种策略(代码中在yaml文件中可以选择)。方法(a)是加权融合,方法(b)是自适应融合 ,即假设输入的大小可以表示为(bs,C,H,W),可以通过执行卷积运算来获得(bs,3,H,W)的空间自适应权重连接和Softmax。三个通道与三个输入一一对应,通过计算加权和,可以将上下文信息聚合到输出,方法(c)是做concatenation,例:a = np.array([[1,2],[3,4]]),b =np.arrat([[5,6]]),c=np.concatenate((a,b)),c=array([1,2],[3,4],[5,6]).

3.实现方法

(1)将下面代码复制到models/commen.py

  1. #CA
  2. class h_sigmoid(nn.Module):
  3. def __init__(self, inplace=True):
  4. super(h_sigmoid, self).__init__()
  5. self.relu = nn.ReLU6(inplace=inplace)
  6. def forward(self, x):
  7. return self.relu(x + 3) / 6
  8. class h_swish(nn.Module):
  9. def __init__(self, inplace=True):
  10. super(h_swish, self).__init__()
  11. self.sigmoid = h_sigmoid(inplace=inplace)
  12. def forward(self, x):
  13. return x * self.sigmoid(x)
  14. class CoordAtt(nn.Module):
  15. def __init__(self, inp, oup, reduction=32):
  16. super(CoordAtt, self).__init__()
  17. self.pool_h = nn.AdaptiveAvgPool2d((None, 1))
  18. self.pool_w = nn.AdaptiveAvgPool2d((1, None))
  19. mip = max(8, inp // reduction)
  20. self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)
  21. self.bn1 = nn.BatchNorm2d(mip)
  22. self.act = h_swish()
  23. self.conv_h = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
  24. self.conv_w = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
  25. def forward(self, x):
  26. identity = x
  27. n, c, h, w = x.size()
  28. # c*1*W
  29. x_h = self.pool_h(x)
  30. # c*H*1
  31. # C*1*h
  32. x_w = self.pool_w(x).permute(0, 1, 3, 2)
  33. y = torch.cat([x_h, x_w], dim=2)
  34. # C*1*(h+w)
  35. y = self.conv1(y)
  36. y = self.bn1(y)
  37. y = self.act(y)
  38. x_h, x_w = torch.split(y, [h, w], dim=2)
  39. x_w = x_w.permute(0, 1, 3, 2)
  40. a_h = self.conv_h(x_h).sigmoid()
  41. a_w = self.conv_w(x_w).sigmoid()
  42. out = identity * a_w * a_h

2.在models/yolo.py中的parse_model中增加CoordAtt

3.增加CAM.yaml

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