每日Attention学习18——Grouped Attention Gate

news/2025/2/6 10:01:51 标签: 划水
模块出处

[ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation


模块名称

Grouped Attention Gate (GAG)


模块作用

轻量特征融合


模块结构

在这里插入图片描述


模块特点
  • 特征融合前使用Group Conv进行处理,比标准卷积更加轻量
  • 将融合得到的粗特征视为Spatial Attention Map, 并与Encoder特征相乘,从而实现名字中"Gate"的效果
  • 相较于特征融合模块,也可以视为一种利用辅助信息(Decoder)特征以增强Encoder特征的增强模块

模块代码
import torch
import torch.nn as nn
import torch.nn.functional as F


class GAG(nn.Module):
    def __init__(self, F_g, F_l, F_int, kernel_size=1, groups=1):
        super(GAG,self).__init__()
        if kernel_size == 1:
            groups = 1
        self.W_g = nn.Sequential(
            nn.Conv2d(F_g, F_int, kernel_size=kernel_size,stride=1,padding=kernel_size//2,groups=groups, bias=True),
            nn.BatchNorm2d(F_int)
        )
        self.W_x = nn.Sequential(
            nn.Conv2d(F_l, F_int, kernel_size=kernel_size,stride=1,padding=kernel_size//2,groups=groups, bias=True),
            nn.BatchNorm2d(F_int)
        )
        self.psi = nn.Sequential(
            nn.Conv2d(F_int, 1, kernel_size=1,stride=1,padding=0,bias=True),
            nn.BatchNorm2d(1),
            nn.Sigmoid()
        )
        self.activation = nn.ReLU(inplace=True)

        
    def forward(self,g,x):
        g1 = self.W_g(g)
        x1 = self.W_x(x)
        psi = self.activation(g1+x1)
        psi = self.psi(psi)
        return x*psi
    

if __name__ == '__main__':
    x1 = torch.randn([1, 64, 44, 44])
    x2 = torch.randn([1, 64, 44, 44])
    gag = GAG(F_g=64, F_l=64, F_int=64//2, kernel_size=3, groups=64//2)
    out = gag(x1, x2)
    print(out.shape)  # [1, 64, 44, 44]


http://www.niftyadmin.cn/n/5842859.html

相关文章

专门记录台式电脑常见问题

1、蓝屏死机,检查内存硬盘和cpu 2、拆内存条,用橡皮擦金手指 3、放主板静电,扣主板电池 4、系统时间不正确,主板电池没电 5、开机键坏了 6、电脑主机的风扇转,正常通电运行,但显示器没信号。看键盘的num键&…

游戏引擎学习第88天

仓库:https://gitee.com/mrxiao_com/2d_game_2 调查碰撞检测器中的可能错误 在今天的目标是解决一个可能存在的碰撞检测器中的错误。之前有人提到在检测器中可能有一个拼写错误,具体来说是在测试某个变量时,由于引入了一个新的变量而没有正确地使用它&…

【分布式架构理论3】分布式调用(2):API 网关分析

文章目录 一、API 网关的作用1. 业务层面:简化调用复杂性2. 系统层面:屏蔽客户端调用差异3. 其他方面: 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1:同步阻塞处理2. Zuul2:异步非阻塞处理 三…

30、Flink中操作已经配置好的远程文件系统

背景:flink作业中既配置了obs作为chk的远程文件系统,又在作业中读取obs文件内容时,使用obsclient会导致任务无法创建chk目录而启动失败。 解决办法:使用flink-core里的fileSystem来操作 。这样就不用去使用对应文件系统的客户端了…

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能,实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…

深度学习系列--02.损失函数

一.定义 损失函数(Loss Function)是机器学习和深度学习中用于衡量模型预测结果与真实标签之间差异的函数,它在模型训练和评估过程中起着至关重要的作用 二.作用 1.指导模型训练 提供优化方向:在训练模型时,我们的目…

Windows图形界面(GUI)-QT-C/C++ - QT Dock Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 工具栏 2. 侧边栏 3. 调试窗口 三、常见样式 1. 停靠位置 2. 浮动窗口 3. 可关闭 4. 可移动 四、属性设置 1. 设置内容 2. 获取内容 3. 设置标题 …

PyQt6/PySide6 的 QDialog 类

QDialog 是 PyQt6 或 PySide6 库中用于创建对话框的类。对话框是一种特殊的窗口,通常用于与用户进行短期交互,如输入信息、显示消息或选择选项等。QDialog 提供了丰富的功能和灵活性,使得开发者可以轻松地创建各种类型的对话框。下面我将详细…