首页 > 其他分享 >【YOLOv8改进】CAFM(Convolution and Attention Fusion Module):卷积和注意力融合模块

【YOLOv8改进】CAFM(Convolution and Attention Fusion Module):卷积和注意力融合模块

时间:2024-06-20 21:42:50浏览次数:25  
标签:dim heads Convolution 卷积 self Attention Module num out

摘要

摘要——高光谱图像(HSI)去噪对于高光谱数据的有效分析和解释至关重要。然而,同时建模全局和局部特征以增强HSI去噪的研究却很少。在本文中,我们提出了一种混合卷积和注意力网络(HCANet),该网络结合了卷积神经网络(CNN)和Transformers的优势。为了增强全局和局部特征的建模,我们设计了一个卷积和注意力融合模块,旨在捕捉长距离依赖关系和邻域光谱相关性。此外,为了改进多尺度信息聚合,我们设计了一个多尺度前馈网络,通过在不同尺度上提取特征来增强去噪性能。在主流HSI数据集上的实验结果表明,所提出的HCANet具有合理性和有效性。所提出的模型在去除各种复杂噪声方面表现出色。我们的代码可在https://github.com/summitgao/HCANet获得。

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

这篇文章介绍了一种名为Hybrid Convolutional and Attention Network (HCANet)的模型,用于高光谱图像去噪。该模型结合了卷积神经网络和Transformer的优势,以有效地去除高光谱图像中的噪声。文章提出了注意力机制,用于捕获远程依赖性和邻域光谱相关性,以增强全局和局部特征建模。通过设计卷积和注意力融合模块以及多尺度前馈网络,该模型能够在不同尺度提取特征,从而提高去噪性能。

  1. 结构概述:HCANet采用了U型网络结构,其中包含多个Convolution Attention Mixing(CAMixing)块。每个CAMixing块由两部分组成:卷积和注意力融合模块(CAFM)以及多尺度前馈网络(MSFN)。

  2. CAFM模块:在CAFM模块中,局部分支利用卷积和通道重排来提取局部特征,全局分支则利用注意力机制来捕获长距离依赖关系。这种结合了卷积和注意力的设计使得模型能够综合建模全局和局部特征,从而提高去噪性能。

  3. MSFN模块:MSFN模块用于多尺度信息聚合,通过三个并行的具有不同步长的扩张卷积来实现。这有助于在不同尺度提取特征,有效地抑制多尺度的噪声。

  4. 训练过程:HCANet首先使用3x3x3卷积提取低级特征,然后通过U型网络结构和跳跃连接来生成噪声残差图。最终,通过重建损失和全局梯度正则化器来训练模型,以实现高光谱图像的去噪。

通过结合CAFM模块和MSFN模块,HCANet能够有效地利用卷积和注意力机制,同时在不同尺度提取特征,从而提高高光谱图像去噪的性能和效果。

CAFM

CAFM是指卷积和注意力融合模块(Convolution and Attention Fusion Module),在HCANet模型中起着关键作用。该模块包括局部分支和全局分支,用于融合卷积和注意力机制以捕获全局和局部特征。以下是关于CAFM的详细介绍:

  1. 局部分支:局部分支旨在提取局部特征,通过卷积和通道重排来实现。这一部分专注于在高光谱图像中提取局部信息,以帮助全局和局部特征的综合建模。

  2. 全局分支:全局分支利用注意力机制来建模长距离特征依赖关系。通过注意力机制,模型能够捕获更广泛的高光谱数据信息,从而更好地理解全局特征。

  3. 融合操作:在CAFM模块中,局部分支和全局分支的特征经过融合操作,通常是通过加法操作来融合两者的特征表示。这种融合操作能够有效地结合局部和全局信息,提高模型对高光谱图像的理解能力和去噪效果。

yolov8 加入代码

## 卷积和注意力融合模块 (CAFM)
class CAFMAttention(nn.Module):
    def __init__(self, dim, num_heads, bias):
        super(Attention, self).__init__()
        self.num_heads = num_heads
        self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1))

        self.qkv = nn.Conv3d(dim, dim * 3, kernel_size=(1, 1, 1), bias=bias)
        self.qkv_dwconv = nn.Conv3d(dim * 3, dim * 3, kernel_size=(3, 3, 3), stride=1, padding=1, groups=dim * 3, bias=bias)
        self.project_out = nn.Conv3d(dim, dim, kernel_size=(1, 1, 1), bias=bias)
        self.fc = nn.Conv3d(3 * self.num_heads, 9, kernel_size=(1, 1, 1), bias=True)

        self.dep_conv = nn.Conv3d(9 * dim // self.num_heads, dim, kernel_size=(3, 3, 3), bias=True, groups=dim // self.num_heads, padding=1)

    def forward(self, x):
        b, c, h, w = x.shape
        x = x.unsqueeze(2)
        qkv = self.qkv_dwconv(self.qkv(x))
        qkv = qkv.squeeze(2)
        f_conv = qkv.permute(0, 2, 3, 1)
        f_all = qkv.reshape(f_conv.shape[0], h * w, 3 * self.num_heads, -1).permute(0, 2, 1, 3)
        f_all = self.fc(f_all.unsqueeze(2))
        f_all = f_all.squeeze(2)

        # 局部卷积
        f_conv = f_all.permute(0, 3, 1, 2).reshape(x.shape[0], 9 * x.shape[1] // self.num_heads, h, w)
        f_conv = f_conv.unsqueeze(2)
        out_conv = self.dep_conv(f_conv)
        out_conv = out_conv.squeeze(2)

        # 全局自注意力
        q, k, v = qkv.chunk(3, dim=1)

        q = rearrange(q, 'b (head c) h w -> b head c (h w)', head=self.num_heads)
        k = rearrange(k, 'b (head c) h w -> b head c (h w)', head=self.num_heads)
        v = rearrange(v, 'b (head c) h w -> b head c (h w)', head=self.num_heads)

        q = torch.nn.functional.normalize(q, dim=-1)
        k = torch.nn.functional.normalize(k, dim=-1)

        attn = (q @ k.transpose(-2, -1)) * self.temperature
        attn = attn.softmax(dim=-1)

        out = (attn @ v)

        out = rearrange(out, 'b head c (h w) -> b (head c) h w', head=self.num_heads, h=h, w=w)
        out = out.unsqueeze(2)
        out = self.project_out(out)
        out = out.squeeze(2)
        output = out + out_conv

        return output

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/139305822

标签:dim,heads,Convolution,卷积,self,Attention,Module,num,out
From: https://www.cnblogs.com/banxia-frontend/p/18259542

相关文章

  • 【YOLOv10改进[注意力]】使用迭代注意力特征融合(iterative attentional feature fusio
    本文将进行使用迭代注意力特征融合(iterativeattentionalfeaturefusion,iAFF)改进c2f ,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。改进前和改进后的参数对比: 目录一AttentionalFeatureFusion(2020)二使用......
  • ModuleNotFoundError: No module named 'gi'
    ForDebian/Ubuntu-basedLinuxdistributions,youcaninstallitviatheterminalwith:bash sudoapt-getinstallpython3-gibashpipinstallPyGObject$python3frames_into_pytorch.pyTraceback(mostrecentcalllast):File"frame......
  • nginx增加 nginx-vod-module模块实现MP4视频点播
    一、安装Nginx需要提前以预编译方式安装好Nginx具体安装步骤点击下面链接:预编译方式安装nginx二、下载nginx-vod-module模块nginx-vod-module模块是基于nginx来提供VOD(videoondemand)服务的第三方模块,它支持基于DASH、HDS、HLS、MSS的点播服务搭建。nginx-vod-module下......
  • SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测
    GWO(GreyWolfOptimizer)是一种基于灰狼行为的优化算法,用于优化问题的求解。CNN(ConvolutionalNeuralNetwork)是卷积神经网络,主要用于图像处理和模式识别。LSTM(LongShort-TermMemory)是一种递归神经网络,用于处理和预测时序数据。self-attention(自注意力)是一种机制,用于在序列......
  • [YOLOv10涨点改进:注意力魔改 | 轻量级的 Mixed Local Channel Attention (MLCA),加强通
    本文属于原创独家改进:一种轻量级的MixedLocalChannelAttention(MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果1.YOLOv10介绍论文:[https://arxiv.org/pdf/2405.14458]代码:https://gitcode.com/THU-MIG/yolov10?utm_source=c......
  • QtCreator CMakeLists.txt添加模块(Modules)
    修改以下位置,添加模块...set(CMAKE_CXX_STANDARD20)#设置C++标准#查找Qt6find_package(QTNAMESQt6Qt5REQUIREDCOMPONENTSWidgets**Multimedia**)find_package(Qt${QT_VERSION_MAJOR}REQUIREDCOMPONENTSWidgets**Multimedia**)...#链接Qt6模块和库target_l......
  • git submodule小记
    这是一篇记录gitsubmodule中存在的坑的文档引用一个模块的命令gitsubmoduleaddhttp://your-submodule-url.com/local/path这个命令可以将一个子模块添加到当前的主仓库中(注意,这样添加的是最新版的) 这个gitsubmodule有一些坑爹的地方当你本地添加了一个子模块后,一旦......
  • SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环
    要在Matlab中实现NGO-TCN-BiGRU-Attention北方苍鹰算法进行多变量时间序列预测,需要按照以下步骤进行:准备数据:首先,准备多变量时间序列数据。确保数据已经进行了预处理,例如归一化或标准化,以便神经网络能够更好地进行学习和预测。构建NGO-TCN-BiGRU-Attention模型:根据算法的......
  • 从零手写实现 nginx-21-modules 模块
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 基于注意力机制卷积神经网络结合门控单元CNN-GRU-SAM-Attention实现柴油机故障诊断附m
    以下是一个基于注意力机制卷积神经网络结合门控单元(CNN-GRU)和自适应注意力机制(SAM-Attention)的柴油机故障诊断的示例Matlab代码:matlab%设置参数inputSize=[32323];%输入图像尺寸numClasses=10;%类别数numFilters=32;%卷积核数量filterSize=3;%卷积......