yolov5利用yaml文件生成模型

一、yolov5的yaml文件构成

yaml文件如下图

在这里插入图片描述

不论是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参数作为这个模块的输出通道数,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值