Restormer解析:转置注意力与门控前馈在高分辨率图像复原中的应用

最近完整读了几遍 Restormer 这篇论文,第一遍看结构图的时候觉得平平无奇,第二遍推公式才意识到转置注意力这个操作有多巧,等到自己动手复现、在几张高分辨率测试图上跑完推理之后,才算真正理解它为什么能成为高分辨率图像复原任务里绕不开的一个方案。

一句话概括这篇工作的核心:要做图像去雨、去模糊、降噪这类任务时,不能简单把视觉 Transformer 的全局自注意力直接搬过来,因为标准自注意力的复杂度会随分辨率平方级增长。Restormer 的思路是把自注意力从空间维度搬到通道维度,同时引入门控前馈网络,再搭配多尺度编码-解码结构,从而兼顾全局建模能力和可接受的计算开销。如果你正在学习视觉 Transformer 在底层视觉任务中的应用,或者准备复现一个图像复原模型,这份学习笔记应该能帮你省不少时间。

1. 先回答一个问题:CNN为什么搞不定高分辨率图像复原

1.1 局部算子的天花板

图像复原本质上是一个病态逆问题,我们只知道退化后的图像,要去推测原本清晰的图像。这种问题必须靠先验信息约束解空间,而卷积神经网络天然提供了一种先验:图像局部光滑、相邻像素高度相关。卷积核在特征图上滑动,每个输出位置只和输入特征图的一个小邻域有关,这种局部归纳偏置让 CNN 在提取边缘、纹理等细节时非常高效。

但局部性同时也是天花板。高分辨率图像里的退化模式往往不是局部的。雨线可以横跨整张图,运动模糊可能让同一个物体的信息扩散到大片区域,雾霾模糊了全局对比度。要恢复这类退化,模型需要建立远距离像素之间的联系,这恰恰是卷积不擅长的事。

有人会说:网络够深之后感受野不就变大了吗?理论上堆叠几十层 3x3 卷积,感受野确实能覆盖全图,但实际训练出来的有效感受野远小于理论值。深层网络的梯度很容易在反向传播中衰减,远端位置的贡献非常微弱,真正起作用的还是局部邻域。我之前在一张 2048 分辨率的模糊图上做过简单感受野可视化,中间位置的输出对几百像素以外区域的响应基本可以忽略,这就是 CNN 在高分辨率复原任务上力不从心的根源。

1.2 高分辨率场景里的"非局部"到底是什么

把 Transformer 的自注意力引入视觉,本质就是让任意两个位置直接交互,不需要信息经过中间像素逐层传递。在图像复原里,这种非局部交互恰好命中要害:远处干净区域的结构信息可以指导当前区域的去雨,天空区域的平滑先验可以约束噪声区域的复原结果。

但标准自注意力做不到高分辨率场景。把图像拉成序列以后,特征图维度是 B×C×H×W,序列长度 N=H×W。标准注意力的复杂度是 O(N²C),注意力的 N×N 矩阵在 512×512 输入下就是约 7 万个 token 之间的两两相似度,显存直接爆炸。1024 或更高分辨率的输入更是想都不用想。

所以 Restormer 要解决的根本问题不是"要不要用 Transformer",而是"怎么在合理计算开销内用 Transformer"。它给出的答案是转置注意力加门控前馈,接下来我拆开讲。

2. Restormer的两板斧:转置注意力与门控前馈网络

2.1 MDTA:把注意力从空间搬到通道

MDTA(Multi-Dconv Head Transpose Attention)是整个模型最核心的设计。标准多头自注意力中,Q、K、V 的序列长度都是空间维度,注意力矩阵形状是 N×N;MDTA 的思路是把 Q 和 K 的矩阵乘法转置一下,让注意力矩阵变成 C×C。由于底层视觉任务的通道数通常远小于空间像素数,这一步直接把复杂度从平方级降了下来。

具体的流程是这样的:输入特征先经过 LayerNorm,然后分别用 1x1 卷积加 3x3 深度卷积生成 Q、K、V。这里加深度卷积很关键,它是在通道注意力之前注入局部上下文信息,避免注意力只看到"全局平均感"的特征。生成 Q、K、V 之后,把它们展平成 B×C×N,注意这个 N 是 H×W 展平得到的空间长度。然后执行:

def mdta_core(q, k, v, scale): # q, k, v: [B, C, N] N = H * W attn = (q @ k.transpose(-1, -2)) * scale # [B, C, C] attn = attn.softmax(dim=-1) out = attn @ v # [B, C, N] return out

注意力矩阵的形状是 B×C×C,对最后维度做 softmax,相当于为每个空间位置在通道维度上计算一组权重,然后加权融合所有通道的特征。个人理解,这是把"哪些通道的模式应该被同时激活"看作全局关系,而"哪些空间位置共享相似内容"由前面的深度卷积在局部完成。两套机制一配合,既能看全局,又没有 N×N 矩阵的内存压力。

有人可能会质疑:C×C 的注意力真的能表达空间上的长距离依赖吗?从实验结果看能,至少在实际任务中够用。这背后的合理性在于,底层视觉特征本身是高度结构化的,空间上重复出现的纹理、边缘模式会反映在通道激活的相关性上,通道间的注意力相当于一种自适应滤波器组的选择机制。

2.2 GDFN:用门控替代简单激活

Transformer 的前馈网络通常是一个"全连接-激活-全连接"结构,作用是给注意力层补充非线性变换能力。Restormer 没有用这个标准结构,而是把激活函数的部分替换成了门控机制。

GDFN 的具体形式:输入先经过两个并行的 1x1 卷积展开分支,一个分支经过 GELU 激活后作为门控信号,另一个分支保持线性变换得到需要调制的特征,两者逐元素相乘,再通过一个 1x1 卷积投影回原始宽度。公式可以理解为 y = Linear( Gating(x) ⊙ Value(x) ),Gating 负责决定哪些信息应该被保留、哪些应该被压低,Value 负责提供变换后的特征内容。

为什么这样改有效?图像复原任务的输出和输入是非常相似的,大部分区域只需要微调,一小部分区域需要大幅重绘。门控机制天然适合这种"稀疏修正"的需求。它不像标准激活那样对特征做全局非线性映射,而是逐通道、逐位置地决定信息流的强度,表达能力强不少。作者在相同计算预算下对比了标准 FFN 和 GDFN,替换之后指标有明显提升。

2.3 一条复杂度对比

这里把标准自注意力和 MDTA 的复杂度放在一起看,会更直观。假设输入特征通道数为 C,空间位置数为 N=H×W:

模块计算复杂度典型变化趋势
标准多头自注意力O(N²·C)N 是空间分辨率,分辨率翻倍复杂度变四倍
MDTA 转置注意力O(C²·N)C 固定时与分辨率线性相关
标准 FFNO(N·C²)线性于分辨率,代价在通道变换
GDFN 门控前馈O(N·C²)线性于分辨率,非线性能力更强

一个简单数值印象:输入 512×512、通道数 64,N 约 26 万。标准自注意力的相似度计算量大约是 N²C,数量级在十的十二次方以上;MDTA 是 C²N,数量级只有十的八次方到九次方。差了三个数量级还多。当然实际实现里不会有人真的把 N×N 全矩阵展开,但即使有分块技巧,内存和算力的差距依然巨大。这也是为什么很多高分辨率模型最终都顺着这条思路走。

3. 编码-解码框架里,尺度与细节怎么配合

3.1 四级编码-解码流程

Restormer 的整体骨架是类似 U-Net 的多尺度编码-解码结构,一共四个层级。输入图像先通过一个卷积层把 RGB 映射到高维特征,然后进入第一层处理;每往下一层,特征图分辨率减半、通道数翻倍。这样最深层对应的分辨率最低,但通道数最多,MDTA 在这里的计算代价也最小。

有意思的地方在于,MDTA 的复杂度是 O(C²N),在浅层高分辨率、小通道数的配置下很划算,在深层低分辨率、大通道数的配置下也能承受。这刚好和 U-Net 结构互补。如果反过来用标准空间注意力,浅层 N 太大做不了,深层 N 虽然小了但信息量也少了,怎么都不合适。

每一层内部由若干 Restormer Block 堆叠组成。浅层放较少的 Block,主要做细节提取;深层放更多 Block,负责全局语义和结构恢复。这个配置逻辑和很多视觉模型一致:低层信息量大但处理简单,高层信息抽象但需要更多轮交互。

3.2 尺度分工与跳跃连接

编码器逐步压缩空间分辨率,解码器负责把特征逐步恢复到原始尺寸。解码过程中每上升一层,特征图分辨率翻倍,同时需要和对应编码器层的特征融合。这种跳跃连接设计保留了浅层的高频细节,避免恢复出来的图像一片光滑、丢失纹理。

我在学习中最深的感受是"多尺度不是锦上添花,而是必需品"。图像复原任务同时需要两类信息:一类是局部的边缘、结构、纹理,另一类是大范围的光照一致性、模糊核估计、背景上下文。单尺度模型无论把分辨率放在哪个层级都会顾此失彼。编码-解码结构通过不同层级的感受野天然实现了"由粗到精"的渐进恢复:深层先估计全局结构,浅层再修正局部细节。

这里也顺便理解了一个设计取舍:作者没有选择 Swin Transformer 那种窗口注意力来降低复杂度,而是用全图交互放在通道维度的方案。窗口注意力的问题是窗口之间信息交换依赖跨窗口 shift 操作,深层需要多次交互才能覆盖全局;MDTA 每次注意力都天然覆盖所有通道维度,配合深度卷积的局部建模,实现路径更直接。

4. 读消融实验时,我重新理解了各模块的分工

4.1 三个让我重新理解模型的消融结果

论文里的消融实验是这个模型真正的精华部分。我把几个关键组对比整理了一下,定性描述它们的影响方向:

配置相对基准的变化我的理解
去掉 MDTA,换成标准空间注意力高分辨率输入下训练不可行,指标也未受益复杂度限制是实际瓶颈,而不仅仅是理论问题
去掉生成 Q/K/V 前的 3x3 深度卷积复原指标下降局部信息注入是通道注意力的必要条件
把 GDFN 换回标准 FFN复原指标下降门控机制带来的非线性能力在复原任务中更关键
去掉多尺度结构,只用单尺度指标明显下降全局上下文和局部细节需要分层配合

第一组结果尤其值得玩味。我不是说标准空间注意力性能一定差,而是在高分辨率条件下它根本没法做同样的实验。这就让"转置注意力"看起来像专为高分辨率复原量身定做的方案。第三组结果说明,GDFN 不是一个可有可无的 trick,门控机制确实贡献了独立的增益。

4.2 真正值得抄进自己项目里的结论

如果你只想从这篇论文里拿点经验到自己的项目,我认为就两条。

第一条:做高分辨率图像复原时,可以把全局自注意力放在通道维而不是空间维。这个思路不限于 Restormer,很多后续工作都在用类似设计。通道注意力计算量小,可以放心地在每个 Block 里都用,不需要像窗口注意力那样考虑跨窗口交互问题。

第二条:在注意力算子里加一个深度卷积支路来补充局部信息,几乎是无成本提点。深度卷积的参数量和计算量都很小,但它能让通道注意力感知到空间结构,避免全局操作把细节拉平。我后来在另一个轻量去噪网络上尝试了这个设计,只加一层 3x3 深度卷积在 attention 之前,PSNR 就能涨零点几个 dB。

5. 复现Restormer时最容易被卡住的三个细节

5.1 显存控制

理论复杂度下来了,实际训练时显存该爆还是会爆。MDTA 只是把注意力矩阵变小了,但整个模型在前向过程中仍然要保留多尺度特征图,尤其是高层大通道数的特征,内存占用不小。

我的经验是第一优先控制 batch size,不要一上来就开大。其次可以开自动混合精度训练,fp16 对这类 Transformer 结构收益非常明显,显存能省不少,而且图像复原任务用混合精度基本不会掉点。还有一个容易被忽略的地方是梯度 checkpoint,把每个 Restormer Block 作为 checkpoint 的边界,用一点计算换大量显存,很划算。

如果显存仍然不够,再考虑缩减通道数而不是缩减分辨率。通道数影响的是整体容量,缩减分辨率则直接影响模型处理细节的能力,在高分辨率复原任务里这是最不想动的维度。

5.2 训练数据裁剪

复现论文的时候,最容易犯的错是不看训练设置直接用自己的数据开跑。Restormer 这类模型训练时通常是在高分辨率退化图像上随机裁剪固定大小的 patch,比如 512x512 或 256x256。这里不要为了省事把整张图 resize 成固定方形再训练,因为 resize 本身会引入额外的重采样伪影,模型会把这种伪影也学进去,推理时反而对着真实退化图像不知所措。

更好的做法是保持原始图像的长宽比,随机裁剪固定大小的区域。数据增强方面,随机水平翻转和旋转基本够用,不需要太复杂的增强策略。还有一个小点:很多图像复原数据集的退化图是成对生成的,训练时确保输入图的裁剪位置和目标图的裁剪位置完全一致,否则模型会学到错误映射。

5.3 大图推理与拼接痕迹

训练用的小 patch,推理时面对的却是几千像素的大图。直接把整张大图喂进模型,即便显存允许,速度也很慢。更常见的做法是分块推理,把大图切成 overlap 的块,分别送入模型,再把结果拼回去。

拼接时要注意重叠区域的处理。如果只是硬拼接,重叠区域会看到明显的块状边界。我习惯用带羽化的加权融合:每个块保留中心区域的完整权重,边缘区域权重线性降低,重叠区域按权重叠加。重叠率一般设 1/8 到 1/4 就够,太高浪费计算,太低容易出现拼接缝。实测下来,这种处理方式在视觉上基本看不到分块痕迹,PSNR 也比硬拼接高一截。

6. 学完这篇论文,我脑子里留下的东西

6.1 能迁移到哪些任务

Restormer 的原始任务是去雨、去模糊和高斯噪声去除,但它的模块设计并不绑定具体任务。低光图像增强、水下图像复原、医学图像去噪这类底层视觉任务,只要退化模式里同时存在局部伪影和全局结构依赖,MDTA 加 GDFN 的组合基本都能直接迁移。

我后来在一个视频去噪的简化实验里试过类似结构,思路是把相邻帧对齐后的特征堆叠到通道维度,再用通道注意力做跨帧融合。效果比单独用 3D 卷积好一些,而且训练过程更稳定。这说明转置注意力在处理"通道之间关系"时的通用性很强,不只适用于图像复原。

还有一个更实际的应用方向是作为大模型的高效适配模块。比如把 MDTA 插到现有 U-Net 骨干网络的某些层,用很低的开销获得全局建模能力,而不是推倒重来换整个 backbone。

6.2 个人对MDTA机制的一点理解

读到最后,我对 MDTA 的理解可以浓缩成一句话:它把"空间全局交互"换成了"通道全局交互",但这个交换之所以有效,是因为图像复原任务里的低频全局信息更适合用通道相关性来表达。

高频的空间细节由卷积和深度卷积负责,它们天生擅长捕捉局部结构;而通道维度上承载的是特征的语义模式,比如某个通道响应雨纹、某个通道响应纹理边缘,这些模式之间的组合关系才是全局的。与其在一个像素和另一个像素之间算相关性,不如在一种模式和另一种模式之间算相关性,后者更抽象、更高效,也更符合图像复原的自适应滤波直觉。

当然,通道注意力不是万能的。它很难代替真正需要空间长距离关系的场景,比如视频帧之间的大位移匹配。这也不是 Restormer 想解决的问题。它真正做得好的是在给定约束下找到一个高效合理的平衡点,让 Transformer 在高分辨率图像复原里变得可用。这个"在约束下重新思考设计"的过程,比我记住模型结构本身更有价值。

相关新闻

PowerShell+计划任务:Windows服务自动化巡检与自愈实战

PowerShell+计划任务:Windows服务自动化巡检与自愈实战

接手这套Windows服务运维的事之前,我最怕的就是深夜手机突然响。服务崩了、进程挂了、依赖断了……每一次被叫起来抢修,基本都是一个不眠夜,而且第二天还要顶着黑眼圈处理一堆“遗留现场”。后来我实在受不了这种被动挨打的局面,花…

2026/10/20 17:57:57 阅读更多 →
AgentScope实战:多智能体框架的消息传递与Actor模型核心机制解析

AgentScope实战:多智能体框架的消息传递与Actor模型核心机制解析

做多智能体开发这几年,我一直在找一个能真正“省心”的框架。所谓省心,不是文档多、star多就行,而是从消息传递到Agent编排,从重放调试到故障恢复,整套机制是否原生贴合大模型应用的特点。AgentScope是我测下来比较符合…

2026/10/20 17:57:57 阅读更多 →
AI驱动中台破局:从服务检索到智能编排的落地路径

AI驱动中台破局:从服务检索到智能编排的落地路径

1. 中台困局,到底卡在哪几道坎先说个真实场景。上个月跟几个做技术管理的朋友聚会,聊到中台建设,基本上每个人的表情都一样——苦笑。有个在某零售企业带数字化团队的朋友说,他们中台建了三年,前后投入了小两千人天&am…

2026/10/20 17:57:57 阅读更多 →

最新新闻

全球AI模型榜前20名国产占6席:技术路线与选型指南

全球AI模型榜前20名国产占6席:技术路线与选型指南

1. 榜单背后的信号:国产模型进入第一梯队的真实含义第一次看到“全球AI模型榜前20名,国产占了6个”这个说法时,我的第一反应不是兴奋,而是想搞清楚三件事:这是哪个榜单、用什么指标排的、这6个模型分别强在哪。因为在大…

2026/10/20 22:39:53 阅读更多 →
多头自注意力机制详解:从原理到代码实战,用外卖订单讲透Transformer核心

多头自注意力机制详解:从原理到代码实战,用外卖订单讲透Transformer核心

1. 多头自注意力:别再死记公式,我用外卖订单给你讲明白第一次接触“多头自注意力”这个概念的时候,我盯着论文里的公式看了整整一个下午,脑子里全是“这到底是什么玩意儿”。后来做了几年深度学习相关的项目,踩过不少坑…

2026/10/20 22:39:53 阅读更多 →
计算器也能打穿?CTF中PHP eval黑名单绕过实战解析

计算器也能打穿?CTF中PHP eval黑名单绕过实战解析

1. 拿到题目的第一轮信息收集:页面、请求和异常输入探针1.1 先用肉眼和抓包把页面过一遍CTF的Web题里,最容易被低估的就是这种"门面干净"的题目。页面没有跳转、没有登录、没有文件上传点,只有一个孤零零的输入框和一个计算结果区&…

2026/10/20 22:39:53 阅读更多 →
用Python打造PPT生成工具:模板+数据+渲染三层架构实战

用Python打造PPT生成工具:模板+数据+渲染三层架构实战

1. 为什么我要自己动手做一个 PPT 生成工具 做技术分享、项目汇报、课程作业,甚至给客户做方案,PPT 几乎是绕不开的一环。我粗略算过,过去一年里我至少做了四十多份 PPT,平均每份从整理大纲到排版定稿要花三到五个小时。最让人抓狂…

2026/10/20 22:39:52 阅读更多 →
Python+TensorFlow+PyQt5人脸表情识别与情绪分类系统实战

Python+TensorFlow+PyQt5人脸表情识别与情绪分类系统实战

人脸表情识别这个方向,外行看起来就是“认个脸、判断一下表情”,真正动手做的人才知道,从摄像头画面到“开心、难过、惊讶”这些标签之间,至少隔着四座山:数据、模型、推理、界面。我最近把一套基于 Python TensorFlo…

2026/10/20 22:39:52 阅读更多 →
MySQL+Java+Swing学生宿舍管理系统课程设计全解析

MySQL+Java+Swing学生宿舍管理系统课程设计全解析

简介:面向高校数据库与Java课程设计场景,这套基于MySQLJavaSwing开发的学生宿舍管理系统提供了完整的可运行工程与配套文档。资源以学生信息管理、宿舍分配管理、管理员后台等核心模块为主线,包含数据库表设计、界面交互与业务逻辑分层实现&a…

2026/10/20 22:38:46 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →