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

server/2025/2/9 1:35:03/
模块出处

[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/server/166079.html

相关文章

PHP 调用 DeepSeek API 完整指南

简介 本文将介绍如何使用 PHP 调用 DeepSeek API,实现流式对话并保存对话记录。PHP 版本使用面向对象的方式实现,代码结构清晰,易于维护。 1. 环境准备 1.1 系统要求 PHP 7.0 或更高版本PHP cURL 扩展文件写入权限 1.2 项目结构 deepse…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 7

第07章_单行函数 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来, 需要的时候直接调用即可。这样既 提高了代码效率,又 提高了可维护性。在 SQL 中我们也可以使用函数 对检索出来的数…

deepseek API 调用-python

【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码: https://download.csdn.net/download/notfindjob/90343352

网络流算法及例题

题单 来源:https://www.cnblogs.com/ticmis/p/13211073.html 编号题目名字题目模型转化模型完成情况1飞行员配对方案问题二分图最大匹配二分图✅2孤岛营救问题分层图最短路径最短路径✅3汽车加油行驶问题分层图最短路径最短路径✅4软件补丁问题最小转移代价最短路…

【配置环境】VS Code中JavaScript环境搭建

一,环境 Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器VS Code 版本: 1.83.1 (user setup)Node.js 版本:20.9.0 二,为什么搭建JavaScript环境 因为在看《重构改善既有代码的设计第2版》的时候,书中的代码展…

ES6 Set 数据结构用法总结

1. Set 基本概念 Set 是 ES6 提供的新的数据结构,类似于数组,但成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。 1.1 基本用法 // 创建一个空Set const set new Set();// 创建一个带有初始…

预防和应对DDoS的方法

DDoS发起者通过大量的网络流量来中断服务器、服务或网络的正常运行,通常由多个受感染的计算机或联网设备(包括物联网设备)发起。 换种通俗的说法,可以将其想象成高速公路上的一次突然的大规模交通堵塞,阻止了正常的通勤…

java中equals和hashCode为什么要一起重写

文章目录 equals()方法常见的重写规则: hashCode()方法为什么通常需要一起重写 equals() 和 hashCode()?一致性要求哈希表的工作原理避免错误的行为例子说明总结 equals()方法 equa…