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

简介: **HCANet: 高光谱图像去噪新方法** HCANet是一种结合CNN与Transformer的深度学习模型,专为高光谱图像设计。它使用卷积注意力融合模块(CAFM)捕捉局部和全局特征,并通过多尺度前馈网络(MSFN)增强多尺度信息聚合,提升去噪效果。CAFM包含卷积和注意力分支,整合局部细节与长距离依赖。代码已开源:[GitHub](https://github.com/summitgao/HCANet)。

摘要

摘要——高光谱图像(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

相关文章
|
机器学习/深度学习 PyTorch Go
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
这篇文章是想要记录yolov5在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。
780 0
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
|
1月前
|
机器学习/深度学习 编解码 边缘计算
YOLOv5改进 | 卷积模块 | 用ShuffleNetV2卷积替换Conv【轻量化网络】
本文介绍了如何在YOLOv5中用ShuffleNetV2替换卷积以减少计算量。ShuffleNetV2是一个轻量级网络,采用深度可分离卷积、通道重组和多尺度特征融合技术。文中提供了一个逐步教程,包括ShuffleNetV2模块的代码实现和在YOLOv5配置文件中的添加方法。此外,还分享了完整的代码链接和GFLOPs的比较,显示了GFLOPs的显著减少。该教程适合初学者实践,以提升深度学习目标检测技能。
YOLOv5改进 | 卷积模块 | 用ShuffleNetV2卷积替换Conv【轻量化网络】
|
22小时前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进-卷积Conv】DualConv( Dual Convolutional):用于轻量级深度神经网络的双卷积核
**摘要:** 我们提出DualConv,一种融合$3\times3$和$1\times1$卷积的轻量级DNN技术,适用于资源有限的系统。它通过组卷积结合两种卷积核,减少计算和参数量,同时增强准确性。在MobileNetV2上,参数减少54%,CIFAR-100精度仅降0.68%。在YOLOv3中,DualConv提升检测速度并增4.4%的PASCAL VOC准确性。论文及代码已开源。
|
22小时前
|
存储 机器学习/深度学习 计算机视觉
【YOLOv8改进-卷积Conv】 OREPA(Online Convolutional Re-parameterization):在线卷积重参数化
**OREPA**是在线卷积重参数化的缩写,它提出了一种两阶段流程来减少深度模型训练的开销。该方法通过线性缩放层优化复杂训练块,并在训练完成后将其压缩为单个卷积层,降低内存使用和提高训练速度。与现有技术相比,OREPA能减少约70%的训练内存开销,提升2倍训练速度,并在ImageNet上提高最多0.6%的准确性。此外,它还在目标检测和语义分割任务中表现出色。论文和代码可在提供的链接中找到。
|
28天前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv8改进】CPCA(Channel prior convolutional attention)中的通道注意力,增强特征表征能力 (论文笔记+引入代码)
该专栏聚焦YOLO目标检测的创新改进与实战,介绍了一种针对医学图像分割的通道优先卷积注意力(CPCA)方法。CPCA结合通道和空间注意力,通过多尺度深度卷积提升性能。提出的CPCANet网络在有限计算资源下,于多个数据集上展现优越分割效果。代码已开源。了解更多详情,请访问提供的专栏链接。
|
28天前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力 (论文笔记+引入代码)
YOLO目标检测专栏介绍了创新的多尺度注意力模块EMA,它强化通道和空间信息处理,同时降低计算负担。EMA模块通过通道重塑和并行子网络优化特征表示,增强长距离依赖建模,在保持效率的同时提升模型性能。适用于图像分类和目标检测任务,尤其在YOLOv8中表现出色。代码实现和详细配置可在文中链接找到。
|
9天前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】 ODConv(Omni-Dimensional Dynamic Convolution):全维度动态卷积
ODConv是一种增强型动态卷积方法,通过多维注意力机制在卷积的四个维度上学习互补注意力,提升轻量级CNN准确性和效率。与现有动态卷积不同,ODConv覆盖了空间、输入/输出通道和核数维度。在ImageNet和MS-COCO上,对MobileNetV2|ResNet等模型有显著性能提升,减少参数的同时超越传统方法。代码和论文链接可用。在YOLO系列中,ODConv改进了特征学习,优化了目标检测性能。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv8改进 | 融合模块 | 用Resblock+CBAM卷积替换Conv【轻量化网络】
在这个教程中,介绍了如何将YOLOv8的目标检测模型改进,用Resblock+CBAM替换原有的卷积层。Resblock基于ResNet的残差学习思想,减少信息丢失,而CBAM是通道和空间注意力模块,增强网络对特征的感知。教程详细解释了ResNet和CBAM的原理,并提供了代码示例展示如何在YOLOv8中实现这一改进。此外,还给出了新增的yaml配置文件示例以及如何注册模块和执行程序。作者分享了完整的代码,并对比了改进前后的GFLOPs计算量,强调了这种改进在提升性能的同时可能增加计算需求。教程适合深度学习初学者实践和提升YOLO系列模型的性能。
|
1月前
|
数据可视化
FLatten Transformer:聚焦式线性注意力模块
FLatten Transformer:聚焦式线性注意力模块
FLatten Transformer:聚焦式线性注意力模块
|
1月前
|
计算机视觉
YOLOv5改进 | 2023Neck篇 | 利用Damo-YOLO的RepGFPN改进特征融合层
YOLOv5改进 | 2023Neck篇 | 利用Damo-YOLO的RepGFPN改进特征融合层
130 1
YOLOv5改进 | 2023Neck篇 | 利用Damo-YOLO的RepGFPN改进特征融合层