逛博客的时候发现了很多关于yolov5的改进建议,看中了有些博主提出的为yolov5增加解耦头的改进方法,便想着用到自己下载的yolov5版本中看看最后的情况。但是这种增加解耦头的方式很多评论区的人说使用了这个解耦头后训练的map涨点了,但是detect的结果并不好,且训练的稳定度不高,我不太知道具体的情况是啥样的,但想着去试一试吧,就对我下载的yolov5进行了修改。修改过程如下:
首先在common.py文件中新增加了一个类,类名叫做DecoupledHead。具体的代码如下所示:
#---------------自己添加的DecoupledHead函数--------------------------------
class DecoupledHead(nn.Module):
def __init__(self, ch=256, nc=80, anchors=()):
super(DecoupledHead, self).__init__()
self.nc = nc #识别的种类
self.nl = len(anchors) #层数
self.na = len(anchors[0]) // 2
self.merge = Conv(ch, 256,1, 1)
self.cls_convs1 = Conv(256, 256, 3, 1, 1)
self.cls_convs2 = Conv(256, 256, 3, 1, 1)
self.reg_convs1 = Conv(256, 256, 3, 1, 1)
self.reg_convs2 = Conv(256, 256, 3, 1, 1)
self.cls_preds = nn.Conv2d(256, self