当前位置:   article > 正文

YOLOv5添加BiFPN

yolov5添加bifpn

1、修改common.py文件

2、新建一个yaml文件

3、修改yolo.py文件

4、修改train.py并运行

1、修改common.py文件

在代码的最后面添加下列代码:

  1. # BiFPN
  2. # 两个特征图add操作
  3. class BiFPN_Add2(nn.Module):
  4. def __init__(self, c1, c2):
  5. super(BiFPN_Add2, self).__init__()
  6. # 设置可学习参数 nn.Parameter的作用是:将一个不可训练的类型Tensor转换成可以训练的类型parameter
  7. # 并且会向宿主模型注册该参数 成为其一部分 即model.parameters()会包含这个parameter
  8. # 从而在参数优化的时候可以自动一起优化
  9. self.w = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)
  10. self.epsilon = 0.0001
  11. self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
  12. self.silu = nn.SiLU()
  13. def forward(self, x):
  14. w = self.w
  15. weight = w / (torch.sum(w, dim=0) + self.epsilon)
  16. return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1]))
  17. # 三个特征图add操作
  18. class BiFPN_Add3(nn.Module):
  19. def __init__(self, c1, c2):
  20. super(BiFPN_Add3, self).__init__()
  21. self.w = nn.Parameter(torch.ones(3, dtype=torch.float32), requires_grad=True)
  22. self.epsilon = 0.0001
  23. self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
  24. self.silu = nn.SiLU()
  25. def forward(self, x):
  26. w = self.w
  27. weight = w / (torch.sum(w, dim=0) + self.epsilon)
  28. # Fast normalized fusion
  29. return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1] + weight[2] * x[2]))

 2、新建yaml文件

新建一个BiFPN-yolov5s.yaml文件:将concat替换为BiFPN_Add2,代码如下:

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