首页 > 其他分享 >SCTNet-带状卷积

SCTNet-带状卷积

时间:2024-11-26 09:13:25浏览次数:7  
标签:__ heads 带状 卷积 self channels num inter SCTNet

import torch.nn as nn
import torch
import torch.nn.functional as F
class ConvolutionalAttention(nn.Module):
    def __init__(self,
                 in_channels,
                 out_channels,
                 inter_channels,
                 num_heads=8):
        super(ConvolutionalAttention,self).__init__()
        assert out_channels % num_heads == 0, \
            "out_channels ({}) should be be a multiple of num_heads ({})".format(out_channels, num_heads)
        self.in_channels = in_channels
        self.out_channels = out_channels
        self.inter_channels = inter_channels
        self.num_heads = num_heads
        self.norm = nn.BatchNorm2d(in_channels)

        self.kv =nn.Parameter(torch.zeros(inter_channels, in_channels, 7, 1))
        self.kv3 =nn.Parameter(torch.zeros(inter_channels, in_channels, 1, 7))


    def _act_dn(self, x):
        x_shape = x.shape  # n,c_inter,h,w
        h, w = x_shape[2], x_shape[3]
        x = x.reshape(
            [x_shape[0], self.num_heads, self.inter_channels // self.num_heads, -1])   #n,c_inter,h,w -> n,heads,c_inner//heads,hw
        x = F.softmax(x, dim=3)
        x = x / (torch.sum(x, dim =2, keepdim=True) + 1e-06)
        x = x.reshape([x_shape[0], self.inter_channels, h, w])
        return x

    def forward(self, x):
        # 分两条路径 第一条 先纵向卷积 _act_dn(每个头负责的若干个通道之间计算重要性)再横向卷积  第二条路径相反
        x = self.norm(x)
        x1 = F.conv2d(
                x,
                self.kv,
                bias=None,
                stride=1,
                padding=(3,0))
        x1 = self._act_dn(x1)
        x1 = F.conv2d(
                x1, self.kv.transpose(1, 0), bias=None, stride=1,
                padding=(3,0))
        x3 = F.conv2d(
                x,
                self.kv3,
                bias=None,
                stride=1,
                padding=(0,3))
        x3 = self._act_dn(x3)
        x3 = F.conv2d(
                x3, self.kv3.transpose(1, 0), bias=None, stride=1,padding=(0,3))
        x=x1+x3
        return x

if __name__ == '__main__':
    block = ConvolutionalAttention(in_channels=32,out_channels=32,inter_channels=64).cuda()
    input = torch.rand(1, 32, 64, 64).cuda()
    output = block(input)
    print(input.size())
    print(output.size())

标签:__,heads,带状,卷积,self,channels,num,inter,SCTNet
From: https://www.cnblogs.com/plumIce/p/18569251

相关文章

  • 通过例子理解概念——>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......
  • YOLOv10改进,YOLOv10添加DynamicConv(动态卷积),CVPR2024,二次创新C2f结构
    摘要大规模视觉预训练显著提高了大规模视觉模型的性能。现有的低FLOPs模型无法从大规模预训练中受益。在本文中,作者提出了一种新的设计原则,称为ParameterNet,旨在通过最小化FLOPs的增加来增加大规模视觉预训练模型中的参数数量。利用DynamicConv动态卷积将额外的参......
  • YOLOv11改进策略【Head】| 结合CVPR-2024 中的DynamicConv 动态卷积 改进检测头, 优化
    一、本文介绍本文记录的是利用DynamicConv优化YOLOv11的目标检测网络模型。在大规模训练中,模型的参数量越多,FLOPs也越高,但在一些对计算资源有限制的场景下,需要低FLOPs的模型同时又希望模型能从大规模预训练中受益。传统的方法很难在增加参数的同时保持低FLOPs,因此Dynamic......
  • 搞清楚这个老六的真面目!逐层‘剥开’人工智能中的卷积神经网络(CNN)
    第三章:超越基础——图像中的特征检测上一篇《揭开计算机视觉的神秘面纱,原来机器是这样“看图”的!》本篇序言:上一篇我们实现并训练了一个神经网络,成功让计算机“看懂”了图像。可以说,我们已经一只脚跨进了AI研发的大门。不过,虽然我们迈入了AI这个神秘的领域,实际上,我们还只是......
  • YOLOv11改进策略【卷积层】| ICCV-2023 SAFM 空间自适应特征调制模块 对C3k2进行二次
    一、本文介绍本文记录的是利用空间自适应特征调制模块SAFM优化YOLOv11的目标检测方法研究。SAFM通过更好地利用特征信息来实现模型性能和效率的平衡。本文通过二次创新C3k2,能够动态选择代表性特征,并结合局部上下文信息,提升模型的检测精度。专栏目录:YOLOv11改进目录一览......
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)3.5-3.
    目录第四门课卷积神经网络(ConvolutionalNeuralNetworks)第三周目标检测(Objectdetection)3.5BoundingBox预测(Boundingboxpredictions)3.6交并比(Intersectionoverunion)第四门课卷积神经网络(ConvolutionalNeuralNetworks)第三周目标检测(Objectdetection......
  • 卷积神经网络(CNN)的发展历程
    卷积神经网络(CNN)的发展历程是深度学习领域的一个重要篇章,以下是对其发展历程的深入讲解:早期探索(1980年代末至1990年代)LeNet(1989年):CNN的起源可以追溯到1989年,当时YannLeCun等人提出了LeNet,这是第一个成功的卷积神经网络,主要用于手写数字识别。LeNet引入了卷积层、池化层和反向传播......