首页 > 其他分享 >YOLOv8模型改进 第二十四讲 添加多尺度大核注意力(MLKA) 提高多尺度检测能力

YOLOv8模型改进 第二十四讲 添加多尺度大核注意力(MLKA) 提高多尺度检测能力

时间:2024-12-22 15:30:40浏览次数:6  
标签:卷积 尺度 大核 MLKA LKA YOLOv8 注意力

         在单图像超分辨率任务中,之前的 SR 模型采用的注意力机制虽能获取信息特征,但存在不足。它们无法同时兼顾局部与长距离信息,且多考虑固定感受野。大核注意力(LKA)虽能构建长距离关系,但存在空洞卷积导致的块状伪影及固定大小不够灵活的问题。受视觉注意力研究启发,本文提出的多尺度大核注意力(MLKA),通过结合大核分解与多尺度学习,由大核注意力建立依赖、多尺度机制获取异构尺度相关、门控聚合动态校准,解决了上述问题,能在不同粒度获取长距离依赖,提升模型表示能力并避免伪影。基于此,本文将MLKA与YOLOv8 的C2f模块相结合,提出C2f_AFE模块,旨在解决复杂场景下的目标检测问题,进一步提升模型整体性能。

YOLOv8原模型
改进后的模型

 1. 自适应特征增强(AFE)模块介绍 
        在单图像超分辨率任务中,先前的注意力机制存在不足。之前的方法难以同时获取局部信息和长距离依赖关系,且多考虑固定感受野的注意力图。例如大核注意力(LKA)存在问题,其采用的空洞卷积可能引发块状伪影,影响图像重建性能,且固定大小的 LKA 在利用待定特征时不够灵活。MLKA 的原理是结合大核分解和多尺度学习来解决这些问题,使模型能在不同粒度级别获取长距离依赖关系,避免块状伪影,更灵活地利用特征信息。
MLKA 的结构
        大核注意力(LKA):对于输入特征图,LKA 通过特定方式分解大核卷积来构建长距离关系。它把卷积分解为三个组件,分别是一个特定尺寸的深度卷积、一个深度空洞卷积和一个点卷积,通过这三个组件的组合操作来实现长距离关系的构建。
        多尺度机制:为获取全尺度信息,采用分组多尺度机制增强固定的 LKA。先将输入特征图拆分成多个部分,对于每组特征,使用由不同参数分解的 LKA 来生成同质尺度注意力图。文中使用了三组特定参数的 LKA,通过不同的卷积组合方式实现不同尺度的特征提取。
        门控聚合:考虑到超分辨率任务对空洞卷积和分区的容忍度低,门控聚合利用空间门来动态调整 LKA。空间门由特定尺寸的深度卷积生成,通过与 LKA 的运算,避免块效应并学习更多局部信息。不同尺度的生成结果具有不同特性,大感受野的更关注长距离依赖,小感受野的更倾向于保留局部纹理。
        整体结构关系:MLKA 由 LKA、多尺度机制和门控聚合这三个主要部分构成。LKA 建立相互依赖关系,多尺度机制获取不同尺度相关性,门控聚合进行动态重新校准。三者协同工作,让 MLKA 在不同粒度获取长距离依赖,提升模型表示能力,避免块状伪影,有效控制计算成本,从而提升超分辨率任务性能。

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

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

这是改进讲解:YOLOv8模型改进 第二十四讲 添加多尺度大核注意力(MLKA) 提高多尺度检测能力_哔哩哔哩_bilibili

2.1  如何添加

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

​​​       

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

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

from ultralytics.change_models.MLKA import MLKA_Ablation

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

     ​​​

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

        6. 运行代码跑通 


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_MLKA.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
                          )

标签:卷积,尺度,大核,MLKA,LKA,YOLOv8,注意力
From: https://blog.csdn.net/qq_64693987/article/details/144435450

相关文章