1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

如何把yolov5里的PANet层改成BiFPN详析

小本本介绍

大家好,我是本际云服务器推荐网的小编小本本。今天我为大家分享一些有关如何将yolov5里的PANet层改成BiFPN的资料。BiFPN结构在efficient文章中被介绍,拥有很不错的特性,可以用于深度学习中,如果你需要这方面的帮助,可以借鉴一下本文的资料。

如何把yolov5里的PANet层改成BiFPN详析

如何改成BiFPN

要将yolov5里的PANet层改成BiFPN,需要进行以下几个步骤:

Add

1. 在common.py中插入如下编码:

#融合BiFPN设定可学习培训主要参数学习培训不一样支系的权重值
#2个支系add实际操作
class BiFPN_Add2(nn.Module):
    def __init__(self,c1,c2):
        super(BiFPN_Add2,self).__init__()
        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)
        return self.conv(self.silu(weight[0]*x[0]+weight[1]*x[1]+weight[2]*x[2]))

2. 修改yolov5s.yaml:

head:
[[-1,6],1,BiFPN_Add2,[256,256]],#cat backbone P4
[-1,3,C3,[512,False]],
[[-1,4],1,BiFPN_Add2,[128,128]],#cat backbone P3
[-1,3,C3,[256,False]],#17(P3/8-small)
[-1,1,Conv,[256,3,2]],
[[-1,13,6],1,BiFPN_Add3,[256,256]],#cat P4<---BiFPN change
[-1,3,C3,[512,False]],#20(P4/16-medium)
[[-1,10],

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6644.html