YOLOv11添加CBAM注意力机制(小白修改)

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

修改

在YOLOv11中ultralytics->nn->tasks.py文件,导入CBAM模块,在

from ultralytics.nn.modules import # 添加CBAM模块

添加

def parse_model(d, ch, verbose=True): # 中添加CBAM模块

添加 elif m is CBAM:

            if m in {BottleneckCSP, C1, C2, C2f, C2fAttn, C3, C3TR, C3Ghost, C3x, RepC3}:
                args.insert(2, n)  # number of repeats
                n = 1
        elif m is AIFI:
            args = [ch[f], *args]
        elif m in {HGStem, HGBlock}:
            c1, cm, c2 = ch[f], args[0], args[1]
            args = [c1, cm, c2, *args[2:]]
            if m is HGBlock:
                args.insert(4, n)  # number of repeats
                n = 1
        elif m is ResNetLayer:
            c2 = args[1] if args[3] else args[1] * 4
        elif m is nn.BatchNorm2d:
            args = [ch[f]]
        elif m is Concat:
            c2 = sum(ch[x] for x in f)
        elif m in {Detect, WorldDetect, Segment, Pose, OBB, ImagePoolingAttn}:
            args.append([ch[x] for x in f])
            if m is Segment:
                args[2] = make_divisible(min(args[2], max_channels) * width, 8)
        elif m is RTDETRDecoder:  # special case, channels arg must be passed in index 1
            args.insert(1, [ch[x] for x in f])
        elif m is CBLinear:
            c2 = args[0]
            c1 = ch[f]
            args = [c1, c2, *args[1:]]
        elif m is CBFuse:
            c2 = ch[f[-1]]
        elif m is CBAM:
            c1, c2 = ch[f], args[0]
            if c2 != nc:
                c2 = make_divisible(min(c2, max_channels)*width, 8)
            args = [c1, *args[1:]]
        else:
            c2 = ch[f]
        elif m is CBAM:
            c1, c2 = ch[f], args[0]
            if c2 != nc:
                c2 = make_divisible(min(c2, max_channels)*width, 8)
            args = [c1, *args[1:]]

查看conv.py模块是否存在“CBAM”

查看__init__.py文件中CBAM模块

修改配置文件,复制一份yolov11-obb.yaml文件,命名位yolov11_CBAM.yaml文件

新建文件查看模块是否添加成功

添加成功

注:yolov11和yolov8一样,CBAM模块不易添加过多,过多模块容易引起模型过拟合,适得其反,一般情况n/s尺度的模型只在head中间层添加一个CBAM模块,m/l/x模块可以酌情添加2-3个CBAM模块,分别在backbone尾和head中间层添加,添加完成后一定记得修改head层中引用的层数

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### 如何在 YOLOv11添加 CBAM 模块 #### 添加 CBAM 的好处 CBAM(Convolutional Block Attention Module)能够显著提升YOLO系列模型的表现。通过引入通道注意力和空间注意力机制,可以实现更有效的特征提取与选择[^4]。 #### 修改 `__init__.py` 和 `conv.py` 为了使项目识别新的CBAM组件,在项目的初始化文件中声明该模块: ```python # __init__.py from . import conv # 假设CBAM位于此包下 ``` 接着,在`conv.py`里定义CBAM类并将其导入语句加入到`__all__`列表之中以便外部访问: ```python # conv.py class CBAM(nn.Module): def __init__(self, gate_channels, reduction_ratio=16, pool_types=['avg', 'max']): super(CBAM, self).__init__() ... def forward(self, x): ... __all__ = ['CBAM'] # 将CBAM添加到这里面 ``` #### 更新配置文件 (`yolov11.yaml`) 对于YOLOv11而言,通常会有一个对应的`.yaml`配置文档来描述网络架构细节。在此处指定要应用CBAM的位置非常重要。一种常见做法是在骨干网部分插入CBAM层,比如放在SPPF层前或是替代某些C3单元[^3]: ```yaml backbone: - from: [-1] module: models.common.Conv args: [64, 128, k=3] - from: [-1] module: models.attention.CBAM # 插入CBAM实例化命令 args: [128] ...其余保持不变... ``` #### 调整训练脚本 (`train.py`) 最后一步是对负责创建模型实例的任务函数做出相应调整,确保其能正确加载含有CBAM的新结构定义。这可能涉及到解析上述提到过的YAML格式设置以及构建相应的PyTorch模型对象[^2]. ```python import yaml from pathlib import Path from models.experimental import attempt_load from utils.general import check_img_size ... def create_model(cfg='path/to/yolov11.yaml'): with open(Path(__file__).parent / cfg) as f: model_dict = yaml.safe_load(f) model = Model(model_dict).to(device) return model ``` 以上就是关于如何向YOLOv11集成CBAM模块的具体方法介绍。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值