目标检测算法——YOLOv5结合BiFPN

将YOLOv5中的PANet层修改为EfficientDet-BiFPN,实现自上而下与自下而上的深浅层特征双向融合,增强不同网络层之间特征信息的传递,明显提升YOLOv5算法检测精度,并且具有更加不错的检测性能。

那么,YOLOv5结合BiFPN需要修改以下几个地方:

1.修改common.py

class Concat_BiFPN(nn.Module):
    def __init__(self, c1):
        super(Concat, self).__init__()
        # self.relu = nn.ReLU()
        self.w = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)
        self.epsilon = 0.0001
        self.swish = Swish()
        
    def forward(self, x):
        weight = self.w / (torch.sum(self.w, dim=0) + self.epsilon)
        # Connections for P6_0 and P7_0 to P6_1 respectively
        x = self.swish(weight[0] * x[0] + weight[1] * x[1])
        return x

2.修改yolo.py

channel现在不是直接concat了,而是进行pairwise add操作,所以out-channel不再是sum。

# elif m is Concat:
#    c2 = sum([ch[x] for x in f])
  elif m is Concat:
     c2 = max([ch[x] for x in f])

3.修改配置文件

根据自身结构在yolov5代码的hub/yolov5s.yaml 中加入Concat_BiFPN,这样就大功告成啦~

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>