YOLOv8模型改进 第二十五讲 添加基于卷积调制(Convolution based Attention) 替换自注意力机制

早期视觉识别模型主要基于 ConvNets(如 VGGNet、Inception 系列、ResNet 系列),它们通过堆叠构建块和金字塔架构聚合大感受野响应,但忽略了全局上下文信息建模。2020 年起,视觉 Transformer(ViTs)推动了视觉识别模型发展,在 ImageNet 分类及下游任务表现更好,其自注意力机制能建模全局依赖关系,不过在处理高分辨率图像时计算成本很高。因此作者设计了简化的自注意力机制------卷积调制
YOLOv8原模型
改进后的

1. 卷积调制介绍

这张图展示了两种不同的注意力机制(Attention Mechanism)的实现方式,具体如下:

  1. 传统多头自注意力机制(左图)设计原因
    • 捕捉长距离依赖关系
      • 自注意力机制通过计算查询(Q)和键(K)的点积来生成注意力矩阵,这种方式可以让模型在处理序列数据时,能够直接考虑到序列中任意两个位置之间的关系,而不受距离的限制。在视觉领域,这意味着模型可以捕捉到图像中不同区域之间的长距离依赖关系,这对于理解图像的整体结构和内容非常重要。
      • 例如,在识别一个包含多个物体的场景时,一个物体的特征可能与远处另一个物体的特征存在关联,自注意力机制可以很好地捕捉这种关联。
    • 特征提取与融合
      • 通过将输入进行线性变换得到查询(Q)、键(K)和值(V),模型可以对输入特征进行不同维度的提取和表示。不同的线性变换可以学习到不同的特征,然后通过注意力权重将这些特征进行融合,从而得到更具代表性和信息量的特征表示。
      • 比如,在处理自然场景图像时,不同的线性变换可以分别学习到纹理、颜色、形状等特征,然后通过自注意力机制将这些特征进行有效融合。
  2. 基于卷积的注意力机制(右图)设计原因
    • 降低计算复杂度:在处理高分辨率图像时,传统自注意力机制中计算注意力矩阵(大小为)的操作会带来极高的计算成本和内存占用。而基于卷积的注意力机制通过使用卷积来生成注意力权重,卷积操作的计算复杂度相对较低,并且与图像的分辨率没有直接的平方关系,能够在处理高分辨率图像时显著降低计算量。
    • 利用卷积的局部感知特性
      • 卷积操作本身具有局部感知的特性,能够很好地捕捉图像中的局部结构和特征。在基于卷积的注意力机制中,通过卷积来生成注意力权重,可以在考虑局部特征的基础上,对特征进行加权融合,使模型能够更好地适应图像数据的特性。
      • 例如,在处理纹理丰富的图像时,卷积可以先捕捉到局部的纹理模式,然后通过注意力机制对这些局部特征进行有选择的加权,突出重要的纹理区域。

2. 接下来,我们将详细介绍如何将卷积调制集成到 YOLOv8 模型中

这是我的GitHub代码: tgf123/YOLOv8_improve (github.com)

这是改进讲解: YOLOv8模型改进 第二十五讲 添加基于卷积调制 替换自注意力机制_哔哩哔哩_bilibili

2.1 如何添加

1. 首先,在我上传的代码中yolov8_improve中找到ConvMod.py代码部分,它包含两个部分一个是ConvMod.py的核心代码,一个是yolov8模型的配置文件。

​​​​

2. 然后我们在ultralytics文件夹下面创建一个新的文件夹,名字叫做change_models, 然后再这个文件夹下面创建ConvMod.py文件,然后将ConvMod的核心代码放入其中

3. 在 task.py文件中导入C2f_AFE

复制代码
from ultralytics.change_models.ConvMod import C2f_ConvMod

4. 然后将 C2f_ConvMod添加到下面当中

5. 最后将配置文件复制到下面文件夹下

6. 运行代码跑通

python 复制代码
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld

if __name__=="__main__":

    # 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
    model = YOLO(r"D:\model\yolov8\ultralytics\cfg\models\v8\yolov8_cmod.yaml")\
        .load(r'D:\model\yolov8\yolov8n.pt')  # build from YAML and transfer weights

    results = model.train(data=r'D:\model\yolov8\ultralytics\cfg\datasets\VOC_my.yaml',
                          epochs=300,
                          imgsz=640,
                          batch=64,
                          # cache = False,
                          # single_cls = False,  # 是否是单类别检测
                          # workers = 0,
                         # resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
                         #  amp = True
                          )
相关推荐
AI波克布林4 分钟前
发文暴论!线性注意力is all you need!
人工智能·深度学习·神经网络·机器学习·注意力机制·线性注意力
Blossom.11830 分钟前
把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
人工智能·笔记·单片机·嵌入式硬件·深度学习·机器学习·搜索引擎
桃源学社(接毕设)2 小时前
基于人工智能和物联网融合跌倒监控系统(LW+源码+讲解+部署)
人工智能·python·单片机·yolov8
2502_927161282 小时前
DAY 40 训练和测试的规范写法
人工智能·深度学习·机器学习
jndingxin3 小时前
OpenCV图像注册模块
人工智能·opencv·计算机视觉
赵英英俊3 小时前
Python day46
python·深度学习·机器学习
荼蘼3 小时前
OpenCv(三)——图像平滑处理
人工智能·opencv·计算机视觉
Monkey PilotX3 小时前
机器人“ChatGPT 时刻”倒计时
人工智能·机器学习·计算机视觉·自动驾驶
盼小辉丶7 小时前
Transformer实战(4)——从零开始构建Transformer
pytorch·深度学习·transformer
paid槮13 小时前
机器学习总结
人工智能·深度学习·机器学习