赞
踩
1、修改common.py文件
2、新建一个yaml文件
3、修改yolo.py文件
4、修改train.py并运行
1、修改common.py文件
在代码的最后面添加下列代码:
- # BiFPN
- # 两个特征图add操作
- class BiFPN_Add2(nn.Module):
- def __init__(self, c1, c2):
- super(BiFPN_Add2, self).__init__()
- # 设置可学习参数 nn.Parameter的作用是:将一个不可训练的类型Tensor转换成可以训练的类型parameter
- # 并且会向宿主模型注册该参数 成为其一部分 即model.parameters()会包含这个parameter
- # 从而在参数优化的时候可以自动一起优化
- self.w = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)
- self.epsilon = 0.0001
- self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
- self.silu = nn.SiLU()
-
- def forward(self, x):
- w = self.w
- weight = w / (torch.sum(w, dim=0) + self.epsilon)
- return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1]))
-
-
- # 三个特征图add操作
- class BiFPN_Add3(nn.Module):
- def __init__(self, c1, c2):
- super(BiFPN_Add3, self).__init__()
- self.w = nn.Parameter(torch.ones(3, dtype=torch.float32), requires_grad=True)
- self.epsilon = 0.0001
- self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
- self.silu = nn.SiLU()
-
- def forward(self, x):
- w = self.w
- weight = w / (torch.sum(w, dim=0) + self.epsilon)
- # Fast normalized fusion
- 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,代码如下:
- # YOLOv5 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/248817推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。