首页 > 其他分享 >大核选择卷积模块 LSK

大核选择卷积模块 LSK

时间:2024-11-28 09:55:55浏览次数:6  
标签:dim 卷积 核选择 self LSK height 32 attn size

import torch
import torch.nn as nn
#Github地址:https://github.com/zcablii/Large-Selective-Kernel-Network
#论文地址:https://openaccess.thecvf.com/content/ICCV2023/papers/Li_Large_Selective_Kernel_Network_for_Remote_Sensing_Object_Detection_ICCV_2023_paper.pdf

class LSKblock(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)
        self.conv_spatial = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3)
        self.conv1 = nn.Conv2d(dim, dim // 2, 1)
        self.conv2 = nn.Conv2d(dim, dim // 2, 1)
        self.conv_squeeze = nn.Conv2d(2, 2, 7, padding=3)
        self.conv = nn.Conv2d(dim // 2, dim, 1)


    def forward(self, x):
        attn1 = self.conv0(x)  # 3 64 32 32
        attn2 = self.conv_spatial(attn1) # 3 64 32 32

        attn1 = self.conv1(attn1) # 3 32 32 32
        attn2 = self.conv2(attn2) # 3 32 32 32

        attn = torch.cat([attn1, attn2], dim=1) # 3 64 32 32
        avg_attn = torch.mean(attn, dim=1, keepdim=True) # 3 1 32 32
        max_attn, _ = torch.max(attn, dim=1, keepdim=True)  # 3 1 32 32
        agg = torch.cat([avg_attn, max_attn], dim=1) # 3 2 32 32
        sig = self.conv_squeeze(agg).sigmoid() # 3 2 32 32
        # sig[:, 0, :, :].unsqueeze(1)  3 1 32 32   3 32 32 32
        attn = attn1 * sig[:, 0, :, :].unsqueeze(1) + \
               attn2 * sig[:, 1, :, :].unsqueeze(1)
        attn = self.conv(attn)  # 3 64 32 32
        return x * attn
        '''
        初始输入 x:形状为 (batch_size, dim, height, width)
        
        conv0 卷积 attn1:形状为 (batch_size, dim, height, width)
        
        conv_spatial 卷积 attn2:形状为 (batch_size, dim, height, width)
        
        conv1 调整通道数 attn1:形状为 (batch_size, dim // 2, height, width)
        
        conv2 调整通道数 attn2:形状为 (batch_size, dim // 2, height, width)
        
        连接 attn:形状为 (batch_size, dim, height, width)
        
        按通道求平均值 avg_attn:形状为 (batch_size, 1, height, width)
        
        按通道求最大值 max_attn:形状为 (batch_size, 1, height, width)
        
        连接 agg:形状为 (batch_size, 2, height, width)
        
        conv_squeeze 和 sigmoid 激活 sig:形状为 (batch_size, 2, height, width)
        
        加权 attn:形状为 (batch_size, dim // 2, height, width)
        
        最终 conv 卷积 attn:形状为 (batch_size, dim, height, width)
        
        输出 x * attn:形状为 (batch_size, dim, height, width)
        '''


if __name__ == '__main__':
    block = LSKblock(64).cuda()
    input = torch.rand(3, 64, 32, 32).cuda() #输入B C H W
    output = block(input)
    print(input.size(), output.size())

大核卷积的目的是为了获取权重 而不是最后的输出 嘴壶的输出是由大核卷积的权重和输入相乘得到的
原:先做55 然后在这个基础上做77 可以这样改 1、55 和77并列做 2、再加一个99 99和7*7并列 还可以尝试一下修改不同卷积核卷积的权重计算方式,原方式的权重是根据特征算出来的 能不能直接初始化一个权重,然后将这个权重作为可训练参数

标签:dim,卷积,核选择,self,LSK,height,32,attn,size
From: https://www.cnblogs.com/plumIce/p/18573594

相关文章

  • 无循环无卷积!上海交大提出时空预测学习新里程碑PredFormer
    前言 时空预测,真的需要RNN吗?真的需要CNN吗?是否能够设计一个模型,可以自动地学习数据中的时空依赖,而不需要依赖于归纳偏置呢?欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。本文转载自PaperWeekly仅用于学术分享,若侵权请联......
  • OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核
    本文主要介绍如何使用Python和OpenCV库通过卷积操作来应用不同的图像滤波效果。主要分为几个步骤:图像的读取与处理、自定义卷积函数的实现、不同卷积核的应用,以及结果的展示。卷积在图像处理中,卷积是一种重要的操作,它通过将图像与一个小的矩阵(称为卷积核或滤波器)进行运算......
  • 如何使用Matlab实现基于柯西变异和正余弦改进的麻雀搜索算法(SCSSA)优化卷积-长短期记忆
    4-SCSSA-CNN-BiLSTM时间序列预测柯西变异和正余弦改进的麻雀搜索算法(SCSSA)优化卷积-长短期记忆神经网络的数据预测模型Matlab语言1.Matlab版本要在2020B以上。优化的参数为:学习率,隐藏层节点数,正则化参数。评价指标包括:R2、MAE、RMSE和MAPE等,图很多,出图结果如图所示,2......
  • 如何实现基于柯西变异和正余弦改进的麻雀搜索算法(SCSSA)优化卷积-长短期记忆神经网络(CN
    97-融合正余弦和柯西变异的麻雀搜索算法左侧窗口:列出了多个.m文件,这表明这是一个MATLAB项目,包含了不同的脚本和函数文件。例如,“SSA.m”,“PSO.m”,“GWO.m”,“SCSSA.m”等,这些都是不同优化算法的实现文件。右侧窗口:展示了一张三维图形(左上角),可能是某个测试函数的表面图,通......
  • Group Convolution(分组卷积)
    分组卷积的优点:减少参数数量:在分组卷积中,每个分组只与一部分输入通道进行卷积运算,这意味着模型的参数数量会减少。例如,如果一个卷积层有8个输入通道和8个输出通道,且不使用分组,那么将有64个权重参数(8个输入通道*8个输出通道)。如果使用2组分组卷积,每个分组将只有4个输入通道......
  • SCTNet-带状卷积
    importtorch.nnasnnimporttorchimporttorch.nn.functionalasFclassConvolutionalAttention(nn.Module):def__init__(self,in_channels,out_channels,inter_channels,num_heads=8):......
  • 通过例子理解概念——>01_CNN卷积神经网络(通俗易懂)
    卷积神经网络(CNN)是什么?想象一下你是一名艺术鉴赏家,你要鉴定一幅画是否是某个著名画家的作品。你不会仅仅只看画的一小部分,而是会观察整幅画的整体风格、颜色运用、笔触技巧等。这个过程实际上和卷积神经网络的工作方式有些类似。卷积神经网络是一种特殊的神经网络,非常适合处......
  • (71)卷积码的维特比软判决译码与硬判决译码MATLAB仿真
    文章目录前言一、卷积码1.卷积码编码2.卷积码解码二、硬判决译码三、软判决译码四、MATLAB仿真1.仿真代码2.代码说明3.仿真结果总结前言本文首先介绍了卷积码原理与卷积码的维特比软判决译码与硬判决译码,然后给出卷积码的维特比软判决译码与硬判决译码的MATLAB......
  • AI嵌入式系统卷积算法优化——卷积核的分段近似
    AI嵌入式系统卷积算法优化——卷积核的分段近似目录引言AI嵌入式系统简介卷积算法在AI中的作用卷积核的分段近似概述定义优点卷积算法优化方法传统卷积算法优化需求分段近似方法详解基本思想分段线性近似分段多项式近似高阶近似方法误差分析数学公式与理论卷积运算......
  • AI嵌入式系统卷积算法优化——分段线性卷积核近似详解
    AI嵌入式系统卷积算法优化——分段线性卷积核近似详解目录引言卷积算法概述2.1卷积运算的基本原理2.2二维卷积的数学表达式嵌入式系统中的卷积计算挑战3.1计算资源限制3.2存储资源限制3.3能耗管理3.4实时性要求分段线性卷积核近似4.1基本概念4.2数学模型4.3......