【医学图像分割模块】GFNet —— 全局滤波器网络 —— 用 FFT 在频域做“全局混频“

发布时间:2026/10/8 18:57:33

【医学图像分割模块】GFNet —— 全局滤波器网络 —— 用 FFT 在频域做“全局混频“ 【医学图像分割模块】GFNet —— 全局滤波器网络 —— 用 FFT 在频域做全局混频一、论文出处论文全名Global Filter Networks for Image Classification会议/年份NeurIPS 2021论文链接https://arxiv.org/abs/2107.00645官方代码https://github.com/raoyongming/GFNet二、模块图截自论文原文图注GFNet 的核心就是把 Transformer 里的自注意力换成「2D FFT → 频域逐元素乘可学习全局滤波器 → 2D IFFT」这一条支路token mixing 全程在频域完成。三、核心思想与作用一句话总括GFNet 用「频域里的可学习全局滤波器」替代自注意力让每个 token 以 O(N log N) 的代价和全图所有 token 交互。拆解成几步看变换到频域对特征图做 2D 实数 FFTtorch.fft.rfft2把空间特征搬到频率域。空间上分散的全局信息在频域里被压缩成一组频率分量。逐元素乘全局滤波器频域特征和一个形状为(H, W//21)的可学习复数张量做逐元素相乘。这一步就是 token mixing——每个频率分量被独立地缩放/旋转等价于在空间域做一次全局卷积global circular convolution。逆变换回空间域做 2D 逆 FFTtorch.fft.irfft2回到原分辨率再走后面的通道 MLP。为什么好全局感受野代价却很低。自注意力和 MLP-mixer 的 token mixing 是 O(N²)N 是 token 数GFNet 是 O(N log N)因为 FFT 本身是 log-linear 的中间那步乘法是 O(N)。高分辨率特征图上这个差距非常明显。参数极少。可学习的只有那个滤波器张量参数量是 H×(W//21)跟通道数无关比 QKV 投影轻得多。频域乘法 空间域全局卷积。这是信号处理里的卷积定理所以它天然建模的是「长程依赖」而不是局部窗口。归纳偏置介于 CNN 和 Transformer 之间。它不像卷积那样锁死局部性也不像纯注意力那样完全无先验鲁棒性和泛化在论文里表现都不错。四、在 U-Net 里的插入位置GFNet 这个子模块频域 token mixing 块最适合放在编码器深层和瓶颈层理由瓶颈层最划算。瓶颈处分辨率最低、通道最多但 token 数仍然可观全局建模收益大而且这里算力预算相对宽松O(N log N) 相比 O(N²) 的优势在高分辨率下才最突出放在瓶颈能吃到「全局依赖」的红利又不炸显存。编码器浅层慎用。浅层特征分辨率高、以边缘纹理为主全局混合收益有限反而 FFT/IFFT 的固定开销占比高。真要用建议只在 stage3/stage4 之后替换。解码器可选。解码器要恢复空间细节频域操作会引入轻微的空间模糊因为全局卷积是循环卷积边界处理不完美如果任务对边界极敏感如细小病灶分割建议只在解码器最深层放一个别每层都塞。一句话瓶颈层放 1~2 个 GFNet 块做全局建模编码器深层按需加浅层和解码器浅层保持卷积。五、复现代码PyTorch逐行中文注释说明这是简化教学版只保留 GFNet 最核心的两个组件——频域全局滤波GlobalFilter和它外面的残差块GFNetBlock。省略了论文里的多尺度滤波、LayerScale、DropPath 等训练技巧方便直接读懂结构。importtorchimporttorch.nnasnnclassGlobalFilter(nn.Module):频域全局滤波2D FFT - 逐元素乘可学习滤波器 - 2D IFFTdef__init__(self,dim,h,w):super().__init__()# 可学习的全局滤波器形状为 (dim, h, w//21)# 用复数存储实部 虚部两个实数张量# rfft2 的输出频率维度是 w//21实数输入的厄米对称性self.complex_weightnn.Parameter(torch.randn(dim,h,w//21,2)*0.02)self.hh self.wwdefforward(self,x):# x: (B, H, W, C) —— 注意这里用 channels-last方便和 rfft2 对齐B,H,W,Cx.shape# 1) 2D 实数 FFT输出复数张量 (B, H, W//21, C)xtorch.fft.rfft2(x,dim(1,2),normortho)# 2) 把可学习滤波器拼成复数real i*imagweighttorch.view_as_complex(self.complex_weight)# (C, H, W//21)# 3) 频域逐元素相乘广播到 batch 维—— 这一步就是 token mixingxx*weight# 4) 2D 逆 FFT回到空间域 (B, H, W, C)xtorch.fft.irfft2(x,s(H,W),dim(1,2),normortho)returnxclassGFNetBlock(nn.Module):一个最小的 GFNet 块全局滤波 通道 MLP 残差def__init__(self,dim,h,w,mlp_ratio4.0):super().__init__()self.filterGlobalFilter(dim,h,w)self.norm1nn.LayerNorm(dim)self.norm2nn.LayerNorm(dim)# 通道 MLP和 Transformer 里的 FFN 一个作用hiddenint(dim*mlp_ratio)self.mlpnn.Sequential(nn.Linear(dim,hidden),nn.GELU(),nn.Linear(hidden,dim),)defforward(self,x):# x: (B, C, H, W) —— 对外保持 NCHW方便塞进 U-NetB,C,H,Wx.shape# 转成 channels-last 给频域滤波用x_x.permute(0,2,3,1)# (B, H, W, C)x_self.norm1(x_)x_self.filter(x_)xxx_.permute(0,3,1,2)# 残差转回 NCHW# 通道 MLP 分支同样走残差x_x.permute(0,2,3,1)x_self.norm2(x_)x_self.mlp(x_)xxx_.permute(0,3,1,2)returnx六、插入示例几行塞进你的网络# 假设你的 U-Net 瓶颈层特征图是 (B, 512, 16, 16)bottlenecknn.Sequential(nn.Conv2d(256,512,3,padding1),nn.BatchNorm2d(512),nn.ReLU(inplaceTrue),GFNetBlock(dim512,h16,w16),# 直接插在瓶颈GFNetBlock(dim512,h16,w16),)七、实测经验与注意点h、w 必须和输入分辨率严格对齐。GlobalFilter里的滤波器形状是写死的输入尺寸变了就会广播报错。如果训练时用多尺度裁剪要么固定 crop size要么在 forward 里按实际 H、W 动态生成滤波器会牺牲一点速度。复杂度是真的低但常数不小。理论 O(N log N)但 FFT/IFFT 的常数因子比一次矩阵乘大在小分辨率如 7×7上未必比注意力快。分辨率越高越划算这也是建议放瓶颈/深层的原因。channels-last 和 NCHW 的来回 permute 有开销。教学版为了可读性做了 permute工程里如果整网都是 channels-last 可以省掉。别小看这几次 permute在浅层高分辨率下会明显拖速度。normortho建议保留。正交归一化让 FFT/IFFT 前后能量一致数值更稳也方便和论文对齐。滤波器初始化别用默认的 randn。论文用较小方差初始化教学版里乘了 0.02否则频域乘积一开始就把特征放大/缩小得离谱训练前期容易不稳。边界效应。频域乘法等价于循环卷积图像边界会被「卷」到对面。分割任务里如果病灶贴近图像边缘可能出现轻微伪影必要时配合 padding 或只在深层使用。八、完整工程以上代码已整理进即插即用模块仓库可直接 clone 取用https://github.com/CaiCy6/med-modules下一篇预告拆解另一个频域/全局建模方向的即插即用模块讲清它和 GFNet 在 token mixing 上的差异与适用场景。
延伸阅读

更多相关文章

2026/10/8 18:57:33

SCADA北向接口全解析:从数据建模到MQTT/OPC UA实操

1. 北向接口到底在解决什么问题做SCADA项目最容易被忽略、又最绕不开的一个环节,就是数据怎么从系统里拿出来给别家用。很多人一开始接触SCADA,都以为它就是个“画面上显示数据、做报警、存历史曲线”的组态软件,等真正进入到工厂数据集成阶段…

2026/10/8 18:52:32

三种手法绕过 XSS 过滤:DVWA medium 级实战

靶场:本地虚拟机 Metasploitable2 Kali,Host-only 隔离网络,全程在自有环境内操作。 一、先别急着打,先看清开发者加了什么锁 上一篇写的是反射型 XSS 在 low 级下的样子: 提交就弹窗。那是"空门"&#xff0…

2026/10/8 19:57:51

superpowers技能机制解析:从安装到自定义的完整指南

1. 从“superpowers”这个热词说起:它到底是什么最近一段时间,superpowers这个词在技术社区里被反复提起,很多人第一次看到它是在某个开源项目的 README 里,或者是在朋友转发的一段配置片段中。它不是一个具体的软件包&#xff0c…

2026/10/8 19:57:51

DeepSeek LoRA微调与API封装:打造爆款文案生成器的生产实践

简介:资源围绕内容创作行业落地场景,讲解如何基于 DeepSeek 训练爆款文案生成器,并完成 API 封装与部署,适合希望提升文案生产效率的运营、营销及相关技术开发者。文档内容共 21 页,以 PDF 格式提供,压缩包…

2026/10/8 19:57:51

学术洞察AI应用:大模型+向量知识库的工程化落地实践

这几年大模型落地的速度,让我最大的感受是“单点能力容易做,端到端价值很难堆”。尤其是在专业垂直领域做AI应用,光有聪明的大模型还不够,真正的分水岭在于: 你能否把模型能力、领域知识、用户场景和工程落地揉成一个…

2026/10/8 19:57:51

SpringBoot+Vue+MyBatis全栈图书管理系统实战与部署要点解析

看到这个标题,想必不少刚学完Java基础、准备找实战项目练手的朋友会会心一笑。图书管理系统,确实算是Web开发里最经典的“新手村”副本了。但真正从零把SpringBoot、Vue、MyBatis、MySQL这条链路完整打通,并把前后端整合成一个能跑、能部署、…

2026/10/8 19:52:47

非比较排序三兄弟:计数排序、桶排序、基数排序详解与C实现

排序算法里的“非比较排序三兄弟”,我愿称之为算法面试和工程项目里性价比被严重低估的一组工具。大多数人一提到排序就条件反射式地写快排,但真遇到特定形态的数据时,快排反而成了下策。这篇文章我把计数排序、桶排序、基数排序从原理到C语言…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑