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

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





