每日Attention学习21——Cascade Multi-Receptive Fields

news/2025/2/8 14:13:49/
模块出处

[MICCAI 24] [link] TinyU-Net: Lighter Yet Better U-Net with Cascaded Multi-receptive Fields


模块名称

Cascade Multi-Receptive Fields (CMRF)


模块作用

轻量感受野块


模块结构

在这里插入图片描述


模块特点
  • 起点使用PWConv(PointWise Convolution, 1×1卷积)压缩通道,终点使用PWConv恢复通道,构成bottle neck结构
  • 中间使用级联的DWConv(Depthwise Convolution, 深度卷积)提取特征

模块代码
import torch
import torch.nn as nn
import torch.nn.functional as F
import mathdef autopad(k, p=None, d=1):  if d > 1:k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k] # actual kernel-sizeif p is None:p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-padreturn pclass Conv(nn.Module):default_act = nn.GELU()def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):super().__init__()self.conv   = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)self.bn     = nn.BatchNorm2d(c2, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)self.act    = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()def forward(self, x):return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):return self.act(self.conv(x))class DWConv(Conv):def __init__(self, c1, c2, k=1, s=1, d=1, act=True):super().__init__(c1, c2, k, s, g=math.gcd(c1, c2), d=d, act=act)class CMRF(nn.Module):def __init__(self, c1, c2, N=8, shortcut=True, g=1, e=0.5):super().__init__()self.N         = Nself.c         = int(c2 * e / self.N)self.add       = shortcut and c1 == c2self.pwconv1   = Conv(c1, c2//self.N, 1, 1)self.pwconv2   = Conv(c2//2, c2, 1, 1)self.m         = nn.ModuleList(DWConv(self.c, self.c, k=3, act=False) for _ in range(N-1))def forward(self, x):x_residual = xx          = self.pwconv1(x)x          = [x[:, 0::2, :, :], x[:, 1::2, :, :]]x.extend(m(x[-1]) for m in self.m)x[0]       = x[0] +  x[1] x.pop(1)y          = torch.cat(x, dim=1) y          = self.pwconv2(y)return x_residual + y if self.add else yif __name__ == '__main__':x = torch.randn([1, 64, 44, 44])cmrf = CMRF(c1=64, c2=64)out = cmrf(x)print(out.shape)  # [1, 64, 44, 44]


http://www.ppmy.cn/news/1570336.html

相关文章

【C语言】数组名及其地址的理解与应用

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯数组名的本质1. 数组名实际上是一个指向第一个元素的指针2. 数组名与数组首元素地址的关系 💯数组名与指针算术操作1. 数组名的指针特性2. 数组名与数组整体…

四、GPIO中断实现按键功能

4.1 GPIO简介 输入输出(I/O)是一个非常重要的概念。I/O泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口。而GPIO(General-Purpose Input/Output)则是一个常见的术语&#xff0c…

GlusterFS源码讲解:如何实现最终一致性

引言 在分布式文件系统中,由于网络延迟、节点故障或临时分区原因,很难保证写操作在所有节点上立即生效。为了解决这一问题,很多系统采用最终一致性模型:写操作可能一开始没有同步到所有节点,但经过一段时间后&#xff…

mobaxterm 无法ssh连接ubuntu

0.查看IP地址 BASH homename -I ip addr show 1. 确保安装了 openssh-server 首先,确保你已经安装了 openssh-server,这是提供 SSH 服务的关键包。 步骤: 打开终端并更新包列表: BASH sudo apt update 安装 openssh-serve…

FocusAny v0.6.0 MacOS和Linux安装优化,独立窗口显示优化

FocusAny 是一个专注高效的AI工具条,可以使用 Alt / Option空格 一键唤起,通过插件快速安装,可以扩展出非常多的功能。 安装使用 访问 https://focusany.com 下载 对应系统 安装包,一键安装即可。 目前支持 Windows、MacOS、Linu…

windows电脑-ubuntu,传输文件

FileZilla是一款免费的工具,是基于 FTP 协议进行文件互传的,在传输过程中我们的ubuntu是作为服务器, FileZilla 工具则是作为客户端。 1.ubuntu安装 FTP服务:sudo apt-get install vsftpd 2.检查 /etc/vsftpd.conf 配置文件&…

Maven 构建命令详解

1. Maven 构建命令概述 Maven 是 Java 生态中最流行的构建工具之一,它提供了一套标准化的构建命令,使得开发者可以轻松管理项目的编译、测试、打包、安装和部署等任务。 本篇文章将深入解析 Maven 中最常用的构建命令,包括: mv…

C#面试常考随笔14: 方法如何传递不定数量的参数?params关键字怎么使用?

使用params关键字,就可以像python传参那样传递多个参数,类似元组 主要作用 params 关键字的主要作用是让方法可以接受不定数量的参数,而不需要在调用方法时显式地创建数组来传递多个参数。这为方法调用提供了更大的灵活性,使得代…