yolov5利用yaml文件生成模型

一、yolov5的yaml文件构成

yaml文件如下图

yolov5利用yaml文件生成模型_第1张图片

不论是backbone还是head,每一行都由一个列表组成,列表里面有四个元素,另外,还有两个参数depth和width。在搭建模型的时候,会利用每一行的信息生成一个模块,并按照顺序放进一个列表里面,这样子就得到一个模块列表

二、列表中每个元素的意义

[-1, 1, Conv, [128, 3, 2]]  
[[-1, 6], 1, Concat, [1]]

列表的第一个元素:

如果是一个-1,则不会用到其他层的信息,只做自己的前向传播就好,如果是一个列表,比如上面第二行代码,会将数字6保存下来,表示当前模块会用到模块列表中第六个模块的信息,那么在前向传播的时候第六个模块的输出将会被保存

列表的第二个元素:

把这个元素用n来表示,则n和上面提到的depth一起用来控制模型的深度,下面是代码

n = max(round(n * depth), 1) if n > 1 else n

通过上面的代码更新n的值,这个n将会被用来表示当前模块被重复的次数

列表的第三个元素:

这个元素用来实例化一个类,比如conv模块

class Conv(nn.Module):
    # Standard convolution
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groups
        super(Conv, self).__init__()
        self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)
        self.bn = nn.BatchNorm2d(c2)
        self.act = nn.ReLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

    def forward(self, x):
        return self.act(self.bn(self.conv(x)))

    def fuseforward(self, x):
        return self.act(self.conv(x))

列表的第四个元素:

这个会被作为参数输入到模块中,不过会被做一些处理,其中比较重要的是第一个元素将会乘以width参数作为这个模块的输出通道数,

你可能感兴趣的:(YOLO,python,人工智能,计算机视觉)