[Base]WTComv-Wavelet Convolutions for Large Receptive Fields

1. BaseInfo

TitleWavelet Convolutions for Large Receptive Fields
Adresshttps://arxiv.org/pdf/2407.05848
Journal/TimeECCV 2024
Author以色列本古里安
Codehttps://github.com/BGU-CS-VIL/WTConv

2. Creative Q&A

  1. 卷积核 7x7 时性能饱和。 卷积层 CNN 响应高频较多,Attention head 响应低频较多。增加卷积的感受野,而不会受到过度参数化的影响 -> 利用小波变换(Wavelet Transform, WT)来放大卷积感受野,并通过级联引导CNN更好地响应低频。
    对于 k × k 感受野,我们的可训练参数数量仅随 k 呈对数增长。
    把 WTConv 替代 Depth-wise Conv

3. Concrete

3.1. Model

基于 MobileNetV2 的
小波变换和逆小波变换。

WTConv/wtconv/wtconv2d.py 定义了 WTConv2d

from wtconv import WTConv2d
conv_dw = WTConv(32, 32, kernel_size=5, wt_levels=3)

3.2. Training

在 分类、分割和检测三个下游任务上实验。

3.3. Eval

  1. ImageNet-1K Classification
    在这里插入图片描述
    在这里插入图片描述

  2. Semantic Segmentation (ADE20K)
    在这里插入图片描述

  3. Object Detection
    Cascade Mask R-CNN on the COCO dataset

3.4. Ablation

4. Reference

5. Additional

相关工作部分写的极其完善!
包括附录。
参数变多,运行时间长。可能因为是并行执行。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Here is an example code for a one-dimensional convolutional wavelet neural network using PyTorch: ```python import torch import torch.nn as nn import pywt class ConvWaveletNet(nn.Module): def __init__(self, num_classes): super(ConvWaveletNet, self).__init__() self.conv1 = nn.Conv1d(1, 16, kernel_size=3, stride=1, padding=1) self.relu1 = nn.ReLU() self.pool1 = nn.MaxPool1d(kernel_size=2, stride=2) self.conv2 = nn.Conv1d(16, 32, kernel_size=3, stride=1, padding=1) self.relu2 = nn.ReLU() self.pool2 = nn.MaxPool1d(kernel_size=2, stride=2) self.conv3 = nn.Conv1d(32, 64, kernel_size=3, stride=1, padding=1) self.relu3 = nn.ReLU() self.pool3 = nn.MaxPool1d(kernel_size=2, stride=2) self.fc1 = nn.Linear(64 * 4, 128) self.relu4 = nn.ReLU() self.fc2 = nn.Linear(128, num_classes) def forward(self, x): # Apply wavelet transform to the input signal cA, cD = pywt.dwt(x, 'db1') x = cA + cD x = torch.tensor(x).unsqueeze(0).unsqueeze(0).float() # add batch and channel dimensions # Convolutional layers x = self.conv1(x) x = self.relu1(x) x = self.pool1(x) x = self.conv2(x) x = self.relu2(x) x = self.pool2(x) x = self.conv3(x) x = self.relu3(x) x = self.pool3(x) # Fully connected layers x = x.view(-1, 64 * 4) x = self.fc1(x) x = self.relu4(x) x = self.fc2(x) return x ``` This network consists of three convolutional layers followed by two fully connected layers. The input signal is first transformed using the discrete wavelet transform, and then passed through the convolutional layers. The output of the last convolutional layer is flattened and passed through the fully connected layers to produce the final classification result. Note that this implementation uses the 'db1' wavelet for the wavelet transform, but other wavelets can also be used.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值