前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Block总结】多尺度并行大卷积核和并行注意力

【Block总结】多尺度并行大卷积核和并行注意力

作者头像
AI浩
发布2025-01-10 12:29:53
发布2025-01-10 12:29:53
26800
代码可运行
举报
文章被收录于专栏:AI智韵
运行总次数:0
代码可运行

一、论文介绍

论文链接:https://arxiv.org/pdf/2305.17654

  • 研究背景:图像去雾是计算机视觉领域的重要任务,旨在从雾天图像中恢复出清晰的场景。传统方法存在不足,如未充分考虑雾分布的不均匀性。
  • 论文目的:提出一种新颖的MixDehazeNet框架,解决现有方法存在的问题。
  • 论文贡献:通过引入MixStructureBlock模块,提高了图像去雾的效果。

二、创新点

  • 多尺度并行大卷积核模块:采用多尺度并行大卷积核,能够同时捕获大范围的雾区域并恢复纹理细节。
  • 增强并行注意力模块:设计了一种增强并行注意力模块(EPA),能够并行地提取全局共享信息和位置依赖的局部信息,有效处理雾分布的不均匀性。

如下图:

MixDehazeNet 主要由两个核心模块组成:

  • 多尺度并行大卷积核模块(MSPLCK):该模块通过并行使用多个大卷积核,能够更好地捕捉图像中的局部纹理和多尺度特征。这种设计使得网络在去雾过程中能够考虑到不同尺度的雾霾分布,从而提高去雾效果。
  • 增强的并行注意力模块(EPA):该模块结合了通道注意力和像素注意力,通过并行连接的方式提取全局共享信息和位置相关的局部信息。这种设计使得网络在处理不均匀的雾度分布时表现得更加出色。

MSPLCK 模块解读

MSPLCK(Multi-Scale Parallel Large Convolution Kernel,多尺度并行大卷积核模块) 是一种创新的深度学习模块,旨在通过多尺度特征提取和大卷积核的结合,增强模型对局部和全局信息的捕获能力。以下是对 MSPLCK 模块的详细解读:


设计目标

MSPLCK 模块的设计目标是解决传统卷积神经网络(CNN)在特征提取中的两个主要问题:

  1. 局部特征与全局特征的平衡:传统小卷积核(如 3×3 或 5×5)虽然计算效率高,但感受野有限,难以捕获全局上下文信息;而大卷积核虽然能捕获全局信息,但计算开销较大。
  2. 多尺度特征提取不足:图像中的目标可能具有不同的尺度(大小),单一尺度的卷积核难以同时适应细节和整体结构的特征提取需求。

通过结合多尺度卷积核和并行设计,MSPLCK 模块能够在保持计算效率的同时,捕获多尺度的局部和全局特征。


模块组成

MSPLCK 模块主要由以下几个部分组成:

  1. 多尺度并行卷积核
    • 小卷积核(如 7×7):捕获局部细节信息,适合处理小尺度目标。
    • 中等卷积核(如 13×13):平衡局部和全局特征提取。
    • 大卷积核(如 19×19):捕获全局上下文信息,适合处理大尺度目标或背景信息。
    • 设计:模块中包含多个并行的卷积分支,每个分支使用不同大小的卷积核(例如 7×7、13×13 和 19×19 的深度可分离膨胀卷积)。
    • 功能
    • 膨胀卷积:通过膨胀因子扩展卷积核的感受野,进一步增强大卷积核的全局建模能力,同时减少计算开销。
  2. 特征融合
    • 操作:将不同卷积分支提取的特征在通道维度上进行拼接(Concatenation)。
    • 目的:融合多尺度特征,生成包含丰富语义信息的特征图。
  3. 多层感知机(MLP)
    • 调整特征维度,使其与输入特征图的维度一致。
    • 学习非线性组合,进一步增强特征表达能力。
    • 设计:融合后的特征图通过一个两层的点卷积(Point-wise Convolution)组成的 MLP。
    • 功能
  4. 残差连接
    • 操作:将输入特征图与经过 MLP 处理后的特征图相加,形成残差连接。
    • 目的:保留输入特征的原始信息,缓解梯度消失问题,同时提升训练稳定性。

工作原理

MSPLCK 模块的工作流程如下:

  1. 输入特征图通过多个并行卷积分支,每个分支使用不同大小的膨胀卷积核提取特征。
  2. 各分支的输出特征图在通道维度上拼接,形成融合后的多尺度特征图。
  3. 融合特征图通过 MLP 进行非线性变换,调整特征维度并增强特征表达。
  4. 最终,融合后的特征图与输入特征图通过残差连接相加,生成模块的输出。

优势与创新点

  1. 多尺度特征提取
    • 通过并行的多尺度卷积核,MSPLCK 模块能够同时捕获局部细节和全局上下文信息。
    • 适用于处理具有多尺度特征的复杂场景(如图像去雾、目标检测等)。
  2. 大卷积核的高效实现
    • 使用膨胀卷积代替传统大卷积核,显著降低了计算开销,同时保持了大感受野的优势。
    • 结合深度可分离卷积进一步减少参数量和计算复杂度。
  3. 特征融合与增强
    • 通过通道拼接和 MLP,模块能够有效整合多尺度特征,并提升特征的非线性表达能力。
    • 残差连接的引入增强了梯度流动,提升了训练效率和模型稳定性。
  4. 适应性强
    • MSPLCK 模块能够动态调整不同尺度特征的权重,适应不同任务和场景的需求。

应用场景

MSPLCK 模块广泛应用于需要多尺度特征提取的计算机视觉任务中,例如:

  • 图像去雾:通过捕获不同尺度的雾气分布特征,提升去雾效果。
  • 目标检测:增强对不同大小目标的检测能力。
  • 图像分割:在医学图像分割等任务中,提升对多尺度目标区域的识别精度。

MSPLCK 模块通过多尺度并行卷积核和特征融合的设计,显著提升了模型对局部和全局特征的捕获能力,同时保持了较高的计算效率。其创新点在于结合了膨胀卷积和深度可分离卷积的优势,为多尺度特征提取提供了一种高效、灵活的解决方案。这种模块设计在图像去雾、目标检测和图像分割等任务中表现出色,具有广泛的应用潜力。

增强并行注意力模块(EPA)的设计与功能

在这里插入图片描述

EPA 模块是 MixDehazeNet 的核心创新之一,其设计目的是通过混合不同类型的注意力机制,增强网络对特征图中重要信息的捕获能力。具体来说,EPA 模块包含以下三种注意力机制:

  • 简单像素注意力
  • 作用:关注特定像素点的重要性,强调图像中局部区域的细节。
  • 实现方式:通过简单的操作(如加权求和或激活函数)计算每个像素点的权重,从而突出关键像素。
  • 通道注意力
  • 作用:分析特征图的通道维度,判断哪些通道包含更重要的信息。
  • 实现方式:通常通过全局池化(如全局平均池化或全局最大池化)提取通道级别的统计信息,然后通过激活函数生成通道权重。
  • 像素注意力
  • 作用:进一步细化空间维度上的注意力分布,捕获更精确的局部特征。
  • 实现方式:结合卷积操作和激活函数,生成像素级别的注意力图。

模块的并行设计

EPA 模块的一个显著特点是将上述三种注意力机制并行化处理,而非依次串联。这种设计的优势在于:

  • 减少计算冗余:并行处理可以同时计算不同维度的注意力,避免串联操作带来的额外计算开销。
  • 信息融合更高效:并行机制允许不同注意力机制独立学习特征,然后通过融合操作(如加权求和或拼接)整合多维信息。

EPA 模块的优势

  • 多维度特征捕获:通过结合像素和通道注意力,EPA 模块能够同时关注空间和通道维度的信息,提升特征表达能力。
  • 适应性强:EPA 模块可以动态调整注意力分布,适应不同图像区域的特征差异。
  • 计算效率高:相比传统的串联注意力机制,EPA 模块的并行设计显著降低了计算复杂度。

在这里插入图片描述

MixDehazeNet 的增强并行注意力模块(EPA)通过结合简单像素注意力、通道注意力和像素注意力,显著提升了网络对图像特征的捕获能力。其并行设计不仅提高了计算效率,还实现了多维信息的高效融合,使得 MixDehazeNet 在图像去雾任务中表现出色。这种模块的设计理念也为其他计算机视觉任务(如图像分割和目标检测)提供了参考。

三、方法

  • MixDehazeNet框架:以U-net为骨干网络,嵌入MixStructureBlock模块。
  • 多尺度并行大卷积核模块:具体实现包括不同尺寸的卷积核,以捕获不同尺度的雾分布区域。
  • 增强并行注意力模块:包含简单像素注意力、通道注意力和像素注意力三种机制,通过多层感知机进行融合。

四、模块作用

  • 多尺度并行大卷积核模块作用:提高模型对雾区域的捕获能力,同时保留图像的纹理细节。
  • 增强并行注意力模块作用:并行地提取全局和局部信息,增强模型对雾分布不均匀性的处理能力。通过并行处理,使得模型能够更高效地去除雾特征。

五、效果

  • 实验数据集:在RESIDE和RESIDE-6K数据集上进行实验评估。
  • 性能指标:采用PSNR和SSIM作为评价指标,MixDehazeNet-L模型在RESIDE-IN数据集上首次超过42dB PSNR,且在所有数据集上均优于先前的方法。
  • 消融实验:通过消融实验验证了多尺度并行大卷积核模块和增强并行注意力模块的有效性,每个模块都能提高去雾性能。

六、代码

代码语言:javascript
代码运行次数:0
复制
import torch
import torch.nn as nn

class MixStructureBlock(nn.Module):
    def __init__(self, dim):
        super().__init__()
        # 初始化两个批归一化层
        self.norm1 = nn.BatchNorm2d(dim)
        self.norm2 = nn.BatchNorm2d(dim)

        # 定义不同大小的卷积层
        self.conv1 = nn.Conv2d(dim, dim, kernel_size=1)  # 1x1卷积
        self.conv2 = nn.Conv2d(dim, dim, kernel_size=5, padding=2, padding_mode='reflect')  # 5x5卷积,反射填充
        # 膨胀率3的分组卷积,用于捕捉不同范围的特征
        self.conv3_19 = nn.Conv2d(dim, dim, kernel_size=7, padding=9, groups=dim, dilation=3, padding_mode='reflect')
        self.conv3_13 = nn.Conv2d(dim, dim, kernel_size=5, padding=6, groups=dim, dilation=3, padding_mode='reflect')
        self.conv3_7 = nn.Conv2d(dim, dim, kernel_size=3, padding=3, groups=dim, dilation=3, padding_mode='reflect')

        # 简单像素注意力机制
        self.Wv = nn.Sequential(
            nn.Conv2d(dim, dim, 1),  # 1x1卷积用于维度变换
            nn.Conv2d(dim, dim, kernel_size=3, padding=3 // 2, groups=dim, padding_mode='reflect')  # 分组卷积
        )
        self.Wg = nn.Sequential(
            nn.AdaptiveAvgPool2d(1),  # 全局平均池化
            nn.Conv2d(dim, dim, 1),  # 1x1卷积
            nn.Sigmoid()  # Sigmoid激活函数
        )

        # 通道注意力机制
        self.ca = nn.Sequential(
            nn.AdaptiveAvgPool2d(1),  # 全局平均池化
            nn.Conv2d(dim, dim, 1, padding=0, bias=True),  # 1x1卷积
            nn.GELU(),  # GELU激活函数
            # nn.ReLU(True),  # 可选:ReLU激活函数
            nn.Conv2d(dim, dim, 1, padding=0, bias=True),  # 1x1卷积
            nn.Sigmoid()  # Sigmoid激活函数
        )

        # 像素注意力机制
        self.pa = nn.Sequential(
            nn.Conv2d(dim, dim // 8, 1, padding=0, bias=True),  # 1x1卷积降维
            nn.GELU(),  # GELU激活函数
            # nn.ReLU(True),  # 可选:ReLU激活函数
            nn.Conv2d(dim // 8, 1, 1, padding=0, bias=True),  # 1x1卷积升维
            nn.Sigmoid()  # Sigmoid激活函数
        )

        # 多层感知机(MLP),用于特征融合
        self.mlp = nn.Sequential(
            nn.Conv2d(dim * 3, dim * 4, 1),  # 1x1卷积,特征融合
            nn.GELU(),  # GELU激活函数
            # nn.ReLU(True),  # 可选:ReLU激活函数
            nn.Conv2d(dim * 4, dim, 1)  # 1x1卷积,恢复维度
        )
        self.mlp2 = nn.Sequential(
            nn.Conv2d(dim * 3, dim * 4, 1),  # 第二个1x1卷积,特征融合
            nn.GELU(),  # GELU激活函数
            # nn.ReLU(True),  # 可选:ReLU激活函数
            nn.Conv2d(dim * 4, dim, 1)  # 1x1卷积,恢复维度
        )

    def forward(self, x):
        # 第一个分支
        identity = x  # 保存输入x作为残差连接
        x = self.norm1(x)  # 批归一化
        x = self.conv1(x)  # 1x1卷积
        x = self.conv2(x)  # 5x5卷积
        # 融合不同膨胀率的分组卷积输出
        x = torch.cat([self.conv3_19(x), self.conv3_13(x), self.conv3_7(x)], dim=1)
        x = self.mlp(x)  # MLP进行特征融合
        x = identity + x  # 残差连接

        # 第二个分支,包含注意力机制
        identity = x  # 保存上一步的输出作为新的残差连接
        x = self.norm2(x)  # 批归一化
        # 融合简单像素注意力、通道注意力和像素注意力
        x = torch.cat([self.Wv(x) * self.Wg(x), self.ca(x) * x, self.pa(x) * x], dim=1)
        x = self.mlp2(x)  # 第二个MLP进行特征融合
        x = identity + x  # 残差连接
        return x

if __name__ == '__main__':
    # 创建一个随机输入张量,形状为 (batch_size, channels, height, width)
    input = torch.rand(1, 64, 640, 640)

    # 实例化MixStructureBlock模块
    block = MixStructureBlock(dim=64)
    # 前向传播
    output = block(input)

    # 打印输入和输出的形状
    print(input.size())
    print(output.size())

输出结果:

代码语言:javascript
代码运行次数:0
复制
torch.Size([1, 64, 640, 640])
torch.Size([1, 64, 640, 640])

应用案例

https://blog.csdn.net/m0_47867638/article/details/145043041?spm=1001.2014.3001.5501

https://blog.csdn.net/m0_47867638/article/details/145043022?spm=1001.2014.3001.5501

https://blog.csdn.net/m0_47867638/article/details/145042690?spm=1001.2014.3001.5501

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI智韵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、论文介绍
  • 二、创新点
    • MSPLCK 模块解读
      • 设计目标
      • 模块组成
      • 工作原理
      • 优势与创新点
      • 应用场景
    • 增强并行注意力模块(EPA)的设计与功能
      • 模块的并行设计
      • EPA 模块的优势
  • 三、方法
  • 四、模块作用
  • 五、效果
  • 六、代码
  • 应用案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档