解释yolov8 tasks.py里的c1、c2和args

文章详细解释了在修改Yolov8的网络结构时如何处理Conv和CBAM模块的参数,涉及输入通道数c1、输出通道数c2、width_multiple、max_channels等概念,并分享了使用注意力机制CBAM的具体实例和参数设置优化对性能的影响。
该文章已生成可运行项目,

1.解释参数

        当修改yolov8的网络结构时基本都会遇到将新的模块导入tasks.py里的问题,就是加入判断分支elif m is 啥啥啥模块,基本都有c1、c2和args这3个参数。

以Conv所在的判断分支代码为例解释:

if m in (Classify, Conv, ConvTranspose, ..., C3x, RepC3):
    c1, c2 = ch[f], args[0]
    if c2 != nc:
        c2 = make_divisible(min(c2, max_channels) * width, 8)
    args = [c1, c2, *args[1:]]

yaml文件里backbone部分第一个Conv对应的参数:

- [-1, 1, Conv, [64, 3, 2]]

        c1表示这个模块的输入通道数,经常看到的组合是c1=ch[f],其中ch[f]就是上个模块的输出通道数,因此c1=ch[f]的意思就是大家都熟知的将上个模块的输出通道数作为这个模块的输入通道数。

        c2那就是这个模块的输出通道数喽,说c2之前要先弄懂args。

        初始的args就是backbone部分每个模块里的第4个参数,在这里那可不就是args=[64, 3, 2]嘛,那c2=args[0]=64就显而易见了,由代码可见还要改变输出通道数c2的值,这就跟不同大小的模型n、s、m等联系起来了。

        这里的width就是yaml文件里的width_multiple用于调节模型大小,函数make_divisible(x, 8)的作用就是找个一个能被8整除的最小的整数x,所以make_divisible(8, 8)=8,make_divisible(1

本文章已经生成可运行项目
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值