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
                          )
相关推荐
一花·一叶7 小时前
基于昇腾310B4的YOLOv8目标检测推理
yolo·目标检测·边缘计算
昵称是6硬币7 小时前
YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目标检测论文精读(逐段解析)
图像处理·人工智能·深度学习·yolo·目标检测·计算机视觉
OICQQ676580087 小时前
创建一个基于YOLOv8+PyQt界面的驾驶员疲劳驾驶检测系统 实现对驾驶员疲劳状态的打哈欠检测,头部下垂 疲劳眼睛检测识别
yolo·pyqt·疲劳驾驶·检测识别·驾驶员检测·打哈欠检测·眼睛疲劳
云天徽上9 天前
【目标检测】图像处理基础:像素、分辨率与图像格式解析
图像处理·人工智能·目标检测·计算机视觉·数据可视化
heimeiyingwang9 天前
【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
人工智能·深度学习·算法
IAM四十二9 天前
Google 端侧 AI 框架 LiteRT 初探
android·深度学习·tensorflow
小白菜3336669 天前
DAY 37 早停策略和模型权重的保存
人工智能·深度学习·算法
yizhimie379 天前
DAY 40 训练和测试的规范写法
深度学习
zeroporn9 天前
以玄幻小说方式打开深度学习词嵌入算法!! 使用Skip-gram来完成 Word2Vec 词嵌入(Embedding)
人工智能·深度学习·算法·自然语言处理·embedding·word2vec·skip-gram
LabVIEW开发9 天前
LabVIEW液位上升图像识别 附件有源码
计算机视觉·labview知识