首页 > 其他分享 >YOLOv8模型改进 第二十三讲 添加自适应特征增强(AFE)模块 提高复杂场景中的检测精度

YOLOv8模型改进 第二十三讲 添加自适应特征增强(AFE)模块 提高复杂场景中的检测精度

时间:2024-12-19 12:31:55浏览次数:5  
标签:第二十三 特征 AFE FRM yolov8 模块 YOLOv8

        随着计算机视觉技术的发展,语义分割在诸多领域发挥着关键作用,但现有方法在复杂场景下面临困境。传统 CNN 方法受限于固定结构,难以处理长程依赖;视觉变换器方法虽引入新机制,却在语义级上下文、细节捕捉和数据需求上存在问题;混合注意力模型在杂乱背景及半透明对象分割时表现不佳。同时,复杂场景中的半透明对象边界不清、背景杂乱干扰及尺度变化多样等挑战,进一步凸显了现有方法的局限性。为攻克这些难题,自适应特征增强(AFE)模块被提出,以期改善复杂场景下的语义分割效果。基于此,本文将 AFE与YOLOv8 的C2f模块相结合,提出C2f_AFE模块,旨在解决复杂场景下的目标检测问题,进一步提升模型整体性能。

YOLOv8原模型
改进后的模型


 1. 自适应特征增强(AFE)模块介绍 

       自适应特征增强(AFE)模块在复杂场景语义分割中发挥着关键作用,其原理和结构设计旨在有效提取和增强特征,以应对复杂背景下的各种挑战,具体内容如下:

1.1 原理

         多模块协作增强特征:AFE 模块通过整合多个关键组件,实现对输入特征的自适应增强。它利用空间上下文模块(SCM)和特征细化模块(FRM)并行处理特征,使网络能够同时捕获更大的上下文信息和语义线索,从而全面提升特征的丰富度和质量。

         基于图像处理概念的特征细化:FRM 模块的设计灵感来源于图像锐化和对比度增强概念。在图像锐化中,通过突出高频细节来增强图像清晰度;在对比度增强中,拉伸特征强度范围以突出低频区域。FRM 将这些概念应用于特征处理,对输入特征进行下采样、平滑处理,并通过与原始特征的运算,分别突出高频细节和低频成分,然后将两者聚合,实现特征的细化和增强。

2.2 结构        

         卷积嵌入(CE):输入特征首先经过 LayerNorm 和 CE,CE 通过 1x1 卷积层将通道压缩为原来的一半。这不仅有助于减少计算开销,还能促使模型更好地进行特征混合,从而学习到更具泛化和判别能力的特征表示。

         空间上下文模块(SCM):压缩后的特征被送入 SCM,SCM 采用较大核(7x7)的组卷积。这种设计能够显著增加感受野,使模型能够捕捉到更广泛的空间上下文信息,有效应对复杂场景中对象尺度变化的挑战。

         特征细化模块(FRM):同时,压缩后的特征也被输入到 FRM。FRM 内部包含深度卷积层用于下采样和平滑特征图,然后通过上采样与原始特征进行运算,分别得到突出高频细节(R)和低频成分(S)的特征,最后将这些特征在通道维度上拼接并通过投影层,生成最终细化和放大的特征。

         卷积多层感知器(ConvMLP):SCM 和 FRM 的输出在通道维度上进行拼接后,通过 1x1 卷积层进行融合,然后输入到 ConvMLP 中,进一步增强特征表示,使网络能够更好地学习和利用这些丰富的特征信息进行语义分割任务。

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

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

这是改进讲解:YOLOv8模型改进 第二十三讲 添加自适应特征增强(AFE)模块 提高复杂场景中的检测精度_哔哩哔哩_bilibili

2.1  如何添加

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

​​​       

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

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

from ultralytics.change_models.AFE_Block import C2f_AFE

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

     ​​​

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

标签:第二十三,特征,AFE,FRM,yolov8,模块,YOLOv8
From: https://blog.csdn.net/qq_64693987/article/details/144432389

相关文章