问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

小波卷积:扩大卷积感受野新方案

创作时间:
作者:
@小白创作中心

小波卷积:扩大卷积感受野新方案

引用
CSDN
1.
https://m.blog.csdn.net/m0_73707009/article/details/145504803

在计算机视觉领域,卷积神经网络(CNN)一直是核心模型架构。然而,传统 CNN 在处理大尺度特征和全局信息时存在一定局限性,因此扩大卷积的感受野成为了提升模型性能的关键方向。近期,研究人员提出了一种基于小波变换的卷积层 ——WTConv,能够在不引入过多参数的情况下有效扩大卷积的感受野。本文将详细介绍如何实现一个即插即用的 WTConv2d 模块,并展示其在深度可分离卷积中的应用。

WTConv2d 模块原理

WTConv2d 模块的核心思想是利用小波变换将输入特征图分解为不同频率的分量,然后对这些分量分别进行小核深度卷积,最后通过逆小波变换将处理后的分量重新组合成输出特征图。这种方法能够在增加感受野的同时,避免因增大卷积核尺寸而导致的过参数化问题。

import pywt
import pywt.data
import torch
from torch import nn
from functools import partial
import torch.nn.functional as F

def create_wavelet_filter(wave, in_size, out_size, type=torch.float):
    w = pywt.Wavelet(wave)
    dec_hi = torch.tensor(w.dec_hi[::-1], dtype=type)
    dec_lo = torch.tensor(w.dec_lo[::-1], dtype=type)
    dec_filters = torch.stack([dec_lo.unsqueeze(0) * dec_lo.unsqueeze(1),
                               dec_lo.unsqueeze(0) * dec_hi.unsqueeze(1),
                               dec_hi.unsqueeze(0) * dec_lo.unsqueeze(1),
                               dec_hi.unsqueeze(0) * dec_hi.unsqueeze(1)], dim=0)
    dec_filters = dec_filters[:, None].repeat(in_size, 1, 1, 1)
    rec_hi = torch.tensor(w.rec_hi[::-1], dtype=type).flip(dims=[0])
    rec_lo = torch.tensor(w.rec_lo[::-1], dtype=type).flip(dims=[0])
    rec_filters = torch.stack([rec_lo.unsqueeze(0) * rec_lo.unsqueeze(1),
                               rec_lo.unsqueeze(0) * rec_hi.unsqueeze(1),
                               rec_hi.unsqueeze(0) * rec_lo.unsqueeze(1),
                               rec_hi.unsq

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号