YOLO11改进-模块-引入融合傅里叶卷积混合器 Fused Fourier Convolution Mixer

         当前主流的基于 Transformer 的单图像去雨方法在全局建模时,多依赖空间域操作(如自注意力机制),计算成本高昂。同时,在利用对比样本方面存在不足。而从频域角度分析,雨条纹模式在频域有显著差异,且频域特征处理具有全局建模能力,能为解决上述问题提供新途径。在此背景下,FFCM 应运而生,旨在通过融合频域特征,实现高效的全局建模,提升去雨效果。

上面是原模型,下面是改进模型

改进后的模型

 

1. 傅里叶卷积混合器介绍          

        FFCM(Fused Fourier Convolution Mixer)基于离散傅里叶变换(DFT)理论。离散傅里叶变换能将空间域的图像特征转换到频域。在图像去雨场景中,雨条纹在频域具有独特且相对稳定的特征模式,利用 DFT 可将图像的退化成分(如雨条纹)与正常图像成分在频域上进行一定程度的分离。同时,频域特征由整个空间域的成分计算得出,具备天然的全局特性,可作为全局特征提取器,有助于对图像进行全局建模分析,以实现有效的去雨等处理。

结合图片信息,FFCM的结构主要包含以下几个关键部分:

空间域处理:输入特征首先经过逐点卷积(PConv)提升特征维度,然后分裂为两组,分别采用不同核大小(3×3 和 5×5)的深度卷积(DConv)提取多尺度局部特征,接着经过激活函数(如 GELU)处理,再通过逐点卷积进一步变换,最终得到空间域特征。

频率域处理:将空间域处理过的特征通过离散傅里叶变换(DFT)转换到频域,得到实部和虚部,将其连接后进行 1×1 卷积操作,再经过调制和分裂等处理,最后利用逆离散傅里叶变换(Inv - FFT)将特征转换回空间域,得到频率域特征。

融合输出:将空间域特征和频率域特征通过残差连接相加,再经过逐点卷积进行通道压缩,得到 FFCM 模块的输出,这种结构设计实现了多尺度空间特征与频域全局特征的融合。

2. YOLOv11与FFCM的结合     

      本文使用FFCM替换最后一层的C3K2模块,增强YOLOv11模型最后一层的特征融合。

3. FFCM模块代码部分

YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub

视频讲解:YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili

YOLO11改进-模块-引入融合傅里叶卷积混合器 Fused Fourier Convolution Mixer_哔哩哔哩_bilibili

YOLOv11全部代码,现有几十种改进机制。

 4. 将FFCM模块 引入到YOLOv11中

第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。

   

第二:在task.py中导入

   

第三:在task.py中的模型配置部分下面代码

  

第四:将模型配置文件复制到YOLOV11.YAMY文件中

    

     第五:运行成功

from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld

if __name__=="__main__":

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

    results = model.train(data=r'D:\model\yolov11\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 = False
                          )

### YOLO模型模块改进方法 为了提升YOLO模型的性能,可以通过引入并行化补丁感知注意力模块(PPA, Parallelized Patch-Aware Attention Module),该模块能够有效善小目标检测中的信息丢失问题[^1]。以下是具体的实现方式: #### 1. 并行化多分支特征提取 PPA的核心在于其多分支设计,这种设计允许网络在同一层上处理多个尺度的信息。具体来说,PPA通过不同的卷积核大小来捕获多种空间分辨率下的特征图。这些分支可以分别采用 \(3 \times 3\) 和 \(5 \times 5\) 的卷积操作,从而覆盖更广的感受野范围。 ```python import torch.nn as nn class MultiBranchModule(nn.Module): def __init__(self, in_channels, out_channels): super(MultiBranchModule, self).__init__() self.branch_1 = nn.Conv2d(in_channels, out_channels//2, kernel_size=3, padding=1) self.branch_2 = nn.Conv2d(in_channels, out_channels//2, kernel_size=5, padding=2) def forward(self, x): branch_1_out = self.branch_1(x) branch_2_out = self.branch_2(x) return torch.cat([branch_1_out, branch_2_out], dim=1) ``` 上述代码展示了如何构建一个多分支模块,其中两个分支分别负责捕捉局部细节和全局上下文信息。 #### 2. 注意力机制的应用 在完成多分支特征提取之后,PPA进一步利用通道注意力机制来自适应地调整各个特征的重要性。SENet(Squeeze-and-Excitation Network)是一种经典的注意力机制框架,可被嵌入到PPA中以强化关键区域的表达能力。 ```python class ChannelAttentionModule(nn.Module): def __init__(self, channels, reduction_ratio=16): super(ChannelAttentionModule, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channels, channels // reduction_ratio), nn.ReLU(), nn.Linear(channels // reduction_ratio, channels), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) z = self.fc(y).view(b, c, 1, 1) return x * z.expand_as(x) ``` 此部分实现了基于通道维度上的权重分配逻辑,使得网络更加关注那些对于当前任务至关重要的特征。 #### 3. 集成至YOLOv11架构 最后一步是将PPA无缝集成到现有的YOLOv11骨干网路当中。通常情况下,可以在FPN(Feature Pyramid Network)或者PANet(Path Aggregation Network)阶段加入PPA模块,以便充分利用高层语义信息与低层精细纹理之间的互补关系。 ```python class PPAYoloBlock(nn.Module): def __init__(self, in_channels, out_channels): super(PPAYoloBlock, self).__init__() self.multi_branch = MultiBranchModule(in_channels, out_channels) self.channel_attention = ChannelAttentionModule(out_channels) def forward(self, x): multi_feature = self.multi_branch(x) attended_feature = self.channel_attention(multi_feature) return attended_feature ``` 以上代码片段定义了一个完整的PPA-YOLO块,它结合了前面提到的所有组件,并可以直接替换原始YOLO版本中的某些标准卷积单元。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值