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
                          )
相关推荐
明明真系叻35 分钟前
第二十六周机器学习笔记:PINN求正反解求PDE文献阅读——正问题
人工智能·笔记·深度学习·机器学习·1024程序员节
XianxinMao1 小时前
Transformer 架构对比:Dense、MoE 与 Hybrid-MoE 的优劣分析
深度学习·架构·transformer
HyperAI超神经3 小时前
未来具身智能的触觉革命!TactEdge传感器让机器人具备精细触觉感知,实现织物缺陷检测、灵巧操作控制
人工智能·深度学习·机器人·触觉传感器·中国地质大学·机器人智能感知·具身触觉
一勺汤3 小时前
YOLO11改进-注意力-引入多尺度卷积注意力模块MSCAM
yolo·目标检测·计算机视觉·改进·魔改·yolov11·yolov11改进
请站在我身后4 小时前
复现Qwen-Audio 千问
人工智能·深度学习·语言模型·语音识别
西西弗Sisyphus4 小时前
开放世界目标检测 Grounding DINO
人工智能·目标检测·计算机视觉·大模型
风清扬雨5 小时前
【计算机视觉】超简单!傅里叶变换的经典案例
人工智能·计算机视觉
GISer_Jing5 小时前
神经网络初学总结(一)
人工智能·深度学习·神经网络
数据分析能量站6 小时前
神经网络-AlexNet
人工智能·深度学习·神经网络
Ven%6 小时前
如何修改pip全局缓存位置和全局安装包存放路径
人工智能·python·深度学习·缓存·自然语言处理·pip