(ECCV 2024)即插即用小波变换卷积,引入频域信息,涨点起飞

题目:Wavelet Convolutions for Large Receptive Fields

论文地址:https://arxiv.org/pdf/2407.05848

创新点

  • 引入WTConv层:提出了一种新的卷积层WTConv,通过结合小波变换扩展感受野,使CNN能够在不显著增加参数的情况下获得接近全局的感受野。

  • 多频率响应:WTConv层利用小波分解将输入分成不同频带,允许卷积层在低频和高频分量上分别进行处理,增强了模型对低频成分(即形状特征)的响应。

  • 低参数增长率:与传统方法中卷积核尺寸增大导致参数和计算量指数级增长不同,WTConv实现了参数的对数增长,使得在大感受野的情况下保持参数效率。

  • 即插即用性:WTConv被设计为可以直接替换现有CNN中的深度卷积操作,无需对架构进行额外修改,具有广泛适用性。

  • 增强鲁棒性与形状偏向:实验结果表明,WTConv能够提升CNN在图像分类、语义分割和目标检测等任务中的性能,并对图像腐蚀有更好的鲁棒性,同时提高了模型的形状偏向性。

方法

整体结构

       论文提出的WTConv层通过小波分解输入图像,将其分解为不同频率成分,在各频率上进行小卷积核操作,然后使用逆小波重构,形成增强的输出。这种设计允许WTConv层在CNN中替代深度卷积操作,不仅能扩大感受野,还能显著增强模型对低频信息的响应能力,从而提升图像分类、语义分割等任务的性能,同时保持参数增长的效率。

  • 基础网络架构:WTConv被集成到典型的CNN模型中,例如ConvNeXt和MobileNetV2,用于图像分类和其他下游任务。具体来说,WTConv替换了这些架构中的深度卷积层。

  • WTConv层的工作流程

    • 小波分解:输入图像首先通过小波变换(如Haar小波)分解为不同频带,产生低频和高频成分。低频部分用于扩大感受野,而高频部分则保留细节。

    • 多频卷积操作:在低频和高频分量上应用小卷积核,以覆盖大范围的感受野,确保模型对低频和高频信息都有良好响应。

    • 逆小波变换:卷积后的输出通过逆小波变换重建,组合成最终的输出。

  • 多层级处理:WTConv层可以分层级递归进行多级小波分解,逐步扩大感受野,适应不同分辨率的输入。

  • 整体效果:通过这种结构,模型在不显著增加参数的前提下实现了与更大卷积核类似的效果,适用于图像分类、语义分割和目标检测等任务。

即插即用模块作用

WT

### 小波变换卷积即插即用实现 为了实现在不同模型中轻松集成小波变换卷积(WTConv),可以考虑使用现有的深度学习框架扩展功能。当前的研究表明,通过利用小波变换可以在不显著增加参数数量的情况下扩大感受野[^1]。 #### 使用PyTorch实现WTConv层 下面是一个基于PyTorch的小波变换卷积层的简单实现: ```python import torch import torch.nn as nn import pywt # Python Wavelet Transform Library class WTConv2d(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, wavelet='db1'): super(WTConv2d, self).__init__() self.wavelet = wavelet self.conv = nn.Conv2d(in_channels * 4, out_channels, kernel_size) def forward(self, x): batch_size, channels, height, width = x.size() # Apply DWT (Discrete Wavelet Transform) coeffs = pywt.dwt2(x.permute(0, 2, 3, 1).cpu().numpy(), self.wavelet) cA, (cH, cV, cD) = coeffs # Convert back to tensor and concatenate along channel dimension transformed_x = torch.from_numpy(np.stack([cA, cH, cV, cD], axis=-1)).permute(0, 4, 1, 2, 3).reshape(batch_size, -1, height//2, width//2) if next(self.parameters()).is_cuda: transformed_x = transformed_x.cuda() output = self.conv(transformed_x) return output ``` 此代码片段定义了一个新的`WTConv2d`类继承自`torch.nn.Module`,其中包含了离散小波变换(DWT)操作来处理输入张量,并将其结果传递给标准二维卷积层进行进一步处理。 #### 集成到现有架构中 要将上述WTConv层应用到预训练好的CNN结构比如ResNet、EfficientNet等上作为替换部分原有convolutional layers的方式之一,则只需修改相应位置处的标准卷积调用为新创建的WTConv实例即可完成迁移工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值