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

如何改成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
