SpectFormer:把频域和 Attention 结合起来,Vision Transformer 会更好吗

Date 2026-06-13 · Category tech · Status finished · Confidence likely
论文解读, 计算机视觉

论文信息

论文题目:SpectFormer: Frequency and Attention is what you need in a Vision Transformer

这篇论文关注的是视觉 Transformer 的 backbone 设计。作者试图回答一个很具体的问题:图像建模到底该主要依赖 attention,还是应该更多利用频域表示?

作者的结论不是二选一,而是认为这两类机制各有分工:

  • spectral / Fourier 更适合提取边缘、纹理、线条和周期性结构;
  • attention 更适合建模 token 和 token 之间的全局依赖关系。

因此论文提出了 SpectFormer,核心思想是:

前几层先用 spectral block 做频域建模,后几层再用 attention block 做语义交互。


动机:为什么不能只靠一种机制

论文首页中的 Figure 1 与 Figure 2

从第一页的 Figure 1 和 Figure 2 就能看出作者的出发点。

Figure 1 里作者把网络写成一串 block,其中:

  • 前面一部分是 Spectral Blocks
  • 后面一部分是 Attention Blocks

这里的超参数 α 表示 spectral block 的数量:

  • α = 0:全是 attention,接近 DeiT / ViT
  • α = L:全是 spectral,接近 GFNet
  • 0 < α < L:前 spectral、后 attention,就是 SpectFormer

这张图本质上在表达一个判断:视觉任务里的信息不只有一种,因此 backbone 也不该只用一种 mixing 机制。

Figure 2 给了更直观的解释:

  • 上方的 spectral module 先进入 Fourier Space,再 Inverse Fourier 回来;
  • 下方的 attention module 负责不同 token 之间的信息流动。

作者认为:

  • 图像中的局部纹理、边缘、方向性结构,更适合频域分析;
  • 图像中的非周期、跨区域依赖,更适合 attention。

因此 SpectFormer 的动机不是“谁取代谁”,而是:

让 spectral 和 attention 各做自己最擅长的部分。

这里的频域到底是什么

这篇论文里的“频域”不是小波 DWT 主线,而是 Fourier 频域。更准确地说,它使用的是 FFT / DFT 这类表示。

如果把图像看成一个二维信号,那么:

  • 低频 对应整体轮廓、平滑区域、慢变化;
  • 高频 对应边缘、纹理、线条、快变化。

论文里的 spectral block 做的事情是:

  1. 把 patch 特征送到 Fourier 频域;
  2. 在频域里做可学习加权;
  3. 再通过逆变换回到空间域。

所以它本质上更像一个 可学习的频域滤波器

这条路线和 GFNet 很接近。GFNet 也属于 frequency-domain 的视觉 backbone,强调用频域全局滤波做 token mixing。但 SpectFormer 认为:纯 spectral 方法虽然高效,却仍然不如强 attention 模型擅长复杂 token 交互,因此需要和 attention 结合。


Figure 3:SpectFormer 的结构到底长什么样

Figure 3 方法总览

Figure 3 是整篇论文最关键的一张图。

左边作者先画了标准 DeiT

  • 输入图像切成 patch;
  • patch 做线性投影;
  • 加 position embedding;
  • 堆叠一串 Transformer block;
  • 最后做分类。

它的 block 就是标准结构:

  • MHSA
  • MLP
  • 残差连接
  • LayerNorm

中间作者把 SpectFormer 的两类基本 block 单独拆了出来:

Attention Block

这部分和普通 Transformer 基本一致:

  • LayerNorm
  • Multi-Head Self-Attention
  • 残差
  • LayerNorm
  • MLP
  • 残差

作用是:

  • 建模 patch 与 patch 之间的关系;
  • 提供全局依赖和非局部语义交互。

Spectral Block

这部分对应论文真正的创新点。它的流程是:

  • LayerNorm
  • FFT
  • SGN
  • IFFT
  • MLP

其中 SGNSpectral Gating Network,也就是频域门控网络。

你可以把这个 block 理解成:

把原本 attention 做 token mixing 的那一段,
换成频域下的可学习 mixing。

注意作者并没有把 Transformer 的整体框架推翻,而只是把“前半段的 mixing 机制”从 attention 替换成了 spectral mixing。


SGN:频域门控模块具体在干什么

Figure 3 最右边红框就是 SGN 的细节。

它的流程可以概括成:

  1. 输入 X
  2. FFT
  3. 得到频域表示的实部和虚部
  4. 分别与可学习参数 W_RW_I 相乘
  5. 组回复数表示
  6. IFFT
  7. 输出回空间域

由于 Fourier 变换后的结果是复数,所以这里必须同时处理:

  • 实部 Real
  • 虚部 Imaginary

这一步和普通卷积、普通线性层很不一样。SpectFormer 在频域里做的是:

对不同频率位置、不同通道的频率成分进行可学习加权。

这等价于在学习:

  • 哪些频率要放大;
  • 哪些频率要抑制;
  • 哪些方向的纹理更重要;
  • 哪些模式对后续任务更有帮助。

论文还强调,频域里的这种乘法,从空间域视角看可以解释成一种 global convolution。也就是说 Spectral block 虽然没有显式算 attention matrix,但它依然是一种全局 mixing 操作。


为什么一定是“前 spectral、后 attention”

这其实是论文最重要的结论,不只是一个经验做法。

作者先从直觉上给出解释:

  • 浅层更适合先学习边缘、线条、纹理和局部频率结构;
  • 深层更适合做长距离关系建模和高层语义交互。

然后他们又用消融去验证这个判断。后面实验表明:

  • 前面放 spectral、后面放 attention 的结构最好;
  • 如果反过来放,性能会明显下降;
  • 交替摆放也不如这种单向分工。

换句话说,SpectFormer 不是在说“spectral 和 attention 两个都加进去就行”,而是在说:

这两类机制在网络深度方向上也应该有明确分工。


实验设计:不只做分类,也做下游任务

论文实验部分主要包含四类任务:

  1. ImageNet-1K 图像分类
  2. 迁移学习分类
  3. 目标检测
  4. 实例分割

其中最核心的主任务还是 ImageNet-1K 分类
检测与分割更多是用来证明它可以作为通用 backbone 迁移到别的视觉任务。

除了主任务之外,作者还做了三类分析:

  • α 的消融分析:到底应该放多少个 spectral block
  • spectral layer 变体分析:到底该用哪种频域模块
  • 结构排布分析:spectral block 到底该放前面还是后面

另外还有一部分滤波器可视化分析,用来解释为什么它的表示更好。


主结果:ImageNet 上它到底强在哪

ImageNet-1K 主结果表

这页表 2 是主结果,作者把模型按 FLOPs 分成:

  • Small
  • Base
  • Large

然后和很多 backbone 比较,包括:

  • ResNet
  • DeiT
  • PVT
  • Swin
  • GFNet
  • Wave-ViT
  • VOLO
  • MaxViT
  • BiFormer

SpectFormer 的代表结果包括:

  • SpectFormer-H-S*84.3
  • SpectFormer-H-B*85.1
  • SpectFormer-H-L*85.7

这组结果的意义在于:

  • 它优于纯 spectral 模型,比如 GFNet
  • 它也能和强 attention / hierarchical 模型竞争
  • 而且不是靠特别夸张的计算成本换来的

因此论文想证明的主结论是:

混合 spectral + attention 的设计,确实能把纯 spectral 和纯 attention 两条路线的优点结合起来。


消融 1:alpha 到底取多少

论文里 α 表示 spectral block 的数量。

在一个 12 层的 vanilla 结构里:

  • α = 0:全 attention
  • α = 12:全 spectral
  • 中间值:混合结构

作者测试了多个取值,发现:

  • α = 4 最优
  • 继续增加 spectral block,性能反而下降

这说明:

  • 纯 attention 不是最优;
  • 纯 spectral 也不是最优;
  • 少量 spectral + 更多 attention 是最好的折中。

这正好对应论文一开始的假设:spectral 有价值,但不应完全替代 attention。


消融 2:为什么最后选 Fourier Gating

频域模块消融与结构排布分析

这页同时包含了表 3、表 4 和 Figure 4。

表 3 比较了几种 spectral layer 变体:

  • FN
  • FNO
  • DCT
  • WGN
  • FGN

其中:

  • WGN 更接近 wavelet / 小波路线
  • FGN 是 Fourier Gating Network

结果显示:

  • FGN 最好
  • WGN 并不是最佳

所以从代码和实验两边都能看出来,作者最终选择的是 Fourier gating,而不是 DWT / wavelet 主路线。


消融 3:Spectral block 该放哪里

同一页的表 4 比较了几种结构摆放方式:

  • Init-Spectral
  • Init-CNN
  • Final-Spectral
  • Alt-Spectral

结果非常清楚:

  • Init-Spectral 最好
  • Final-Spectral 明显变差
  • 交替放也不如前 spectral 后 attention

这张表的重要性不亚于主结果,因为它直接支撑了论文的核心结构判断:

频域模块更适合放在前面,attention 更适合放在后面。

这不是拍脑袋设计,而是有实验支撑的。


Figure 4:为什么说 SpectFormer 学到的滤波器更锐利

同页右侧的 Figure 4 是滤波器可视化。

作者拿 DeiTGFNetSpectFormer 的前几层滤波器做比较,结论是:

  • SpectFormer 学到的滤波器更局部化;
  • 对线条、边缘和方向性结构的响应更清晰;
  • 比纯 spectral 的 GFNet 更锐利。

这个结果很有意思,因为它说明:

  • SpectFormer 不是单纯把 spectral 和 attention 堆起来;
  • 后面的 attention 层,会反过来帮助前面的 spectral 层学到更有区分力的频域特征。

作者的解释是:由于 deeper attention layers 存在,浅层 spectral blocks 会更倾向于学习后续语义建模真正需要的边缘和结构信息。


下游任务:检测、实例分割和迁移学习

检测、实例分割和迁移学习结果

这一页包含了 COCO 和迁移学习实验。

目标检测与实例分割

作者在 MS COCO 2017 上测试了:

  • RetinaNet:目标检测
  • Mask R-CNN:实例分割

评估指标包括:

  • AP
  • AP50
  • AP75
  • APS / APM / APL
  • AP^b / AP^m

结论上,SpectFormer 作为 backbone 的结果是有竞争力的,说明它并不是只适合分类任务。

迁移学习分类

作者还在这些数据集上做了迁移学习:

  • CIFAR-10
  • CIFAR-100
  • Flowers-102
  • Stanford Cars

他们先在 ImageNet-1K 上预训练,再 fine-tune 到这些数据集。结果显示 SpectFormer 的表示具有较好的通用性,并不是只在 ImageNet 上刷分有效。


官方代码实现:论文中的 Spectral block 在代码里怎么落地

作者公开了官方仓库,并分别实现了:

  • vanilla_architecture
  • hierarchical_architecture

源码里最核心的模块就是 SpectralGatingNetwork。它做的事情和论文 Figure 3 基本一致:

  1. 输入 x
  2. reshape 成二维 patch 网格
  3. torch.fft.rfft2
  4. complex_weight 做复数乘法
  5. torch.fft.irfft2
  6. 再还原成 token 序列

这说明论文不是只在概念上说“进入 Fourier space”,而是真的在代码里用 FFT 做了频域门控。

另一个关键点是,vanilla 代码里直接把最优配置写成了:

  • alpha = 4

而 hierarchical 版本则采用:

  • 前两个 stage 用 spectral block
  • 后两个 stage 用 standard attention block

这和论文实验结论是完全一致的。


如果把这篇论文的价值压缩成三点

我觉得 SpectFormer 最值得记住的是下面三点。

第一,它提出的不是“频域替代 attention”,而是 频域和 attention 的互补性

第二,它不只是说“混合有用”,而是进一步指出:

前 spectral、后 attention 才是更合理的视觉层级分工。

第三,它通过分类、迁移学习、检测、实例分割、消融和滤波器可视化,比较完整地证明了这套设计确实有效。


这篇论文的启发

如果从后续研究的角度看,SpectFormer 的启发很明确:

  • 图像任务不一定只能沿着纯 attention 扩展;
  • 频域表示仍然是有价值的;
  • 关键不在于“频域是否强于 attention”,而在于“频域应该在网络里扮演什么角色”。

这也是为什么这篇论文读起来比较舒服。它不是在一味堆新模块,而是在认真回答一个 backbone 设计问题:

对视觉 Transformer 来说,频域和注意力机制到底该如何协作。


一句话总结

SpectFormer 真正想表达的是:

纯 attention 太贵,纯 spectral 又不够强,因此更好的 Vision Transformer 设计,是让浅层先做频域建模,深层再做 attention 语义交互。


See also