1、在yolov7的utils中找到activation.py,在最后输入以下代码
#原理:将局部卷积后的输出与原始数据进行最大比较
类FReLU(nn.Module):
def __init__(self, c1, k=3): # ch_in, 内核
超级().__init__()
# 可分离卷积,不改变硬件和通道
self.conv=nn.Conv2d(c1, c1, k, 1, 1, 组=c1, 偏差=False)
self.bn=nn.BatchNorm2d(c1)
def 前进(自身,x):
# 卷积后的特征图与原始x的形状相同
return torch.max(x, self.bn(self.conv(x))) 2.将modules中common.py中的Conv模块改为以下代码
类Conv(nn.Module):
# 标准卷积
def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, 内核, 步幅, 填充, 组
super(Conv, self).__init__()
self.conv=nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, 偏差=False)
self.bn=nn.BatchNorm2d(c2)
self.act=FReLU(c2) if act 为True else (act if isinstance(act, nn.Module) else nn.Identity())
def 前进(自身,x):
返回self.act(self.bn(self.conv(x)))
def fusionforward(self, x):
返回self.act(self.conv(x))3。注释掉原来的Conv模块
4.再次训练即可。