慢慢学,慢慢干。
大神博客:https://yolov5.blog.youkuaiyun.com/article/details/125148552
我老老实实的按照大神博主的方案进行修改。
第一步:common.py中添加BiFPN模型
# 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.s

本文介绍了如何在YOLOV5中添加BiFPN(Bi-directionalFeaturePyramidNetwork)结构,包括在common.py中定义BiFPN类,修改yolo.py以支持BiFPN,以及在train.py中调整优化器设置。在新版本的YOLOV5中,优化器的改动使得不需要手动处理BiFPN的参数。此外,还提到了在yaml配置文件中更新结构,并且针对显存不足的问题,通过设置训练的batchsize为-1来自动适应显存。
最低0.47元/天 解锁文章
7649





