Mamba 不够,Transformer 太贵?CVPR 2025 这篇 ACL 给了图像恢复一个新答案

张开发
2026/4/10 0:57:08 15 分钟阅读

分享文章

Mamba 不够,Transformer 太贵?CVPR 2025 这篇 ACL 给了图像恢复一个新答案
最近顶级图像算法论文精读CVPR 2025《ACL》如何用线性注意力重做图像恢复摘要最近读到一篇很值得分析的图像算法论文ACL: Activating Capability of Linear Attention for Image Restoration。这篇论文发表在CVPR 2025聚焦的是经典低层视觉任务——图像恢复重点覆盖了去雨和去模糊两类任务。和很多继续在 CNN、Softmax Attention、Mamba 之间反复权衡的工作不同ACL 给出了一个更直接的思路保留 Mamba 风格的整体框架但把核心状态空间模块替换成线性注意力再配合一个多尺度空洞卷积模块增强局部细节建模能力。这篇工作的价值不只在于结果更强还在于它回答了一个很关键的问题线性注意力是不是在图像恢复里真的“能力不够”还是以前没有被放在合适的位置上本文将从问题背景、核心思想、模型结构、关键模块、实验效果、优缺点以及简化复现代码几个方面对这篇最近的顶级图像算法论文做一次系统分析。一、论文信息论文标题ACL: Activating Capability of Linear Attention for Image Restoration会议CVPR 2025研究方向图像恢复、去雨、去模糊、高效注意力机制核心关键词Linear Attention、Mamba、Image Restoration、Deblurring、Deraining二、这篇论文想解决什么问题图像恢复任务一直有一个典型矛盾一方面模型需要有足够大的感受野这样才能利用更大范围的上下文信息恢复结构和纹理另一方面模型又不能把计算量堆得太高否则训练成本、推理速度和部署复杂度都会变得很难接受。过去几年这个方向大致有三类典型方案CNN 路线局部建模强但长距离依赖建模能力有限Transformer 路线全局建模能力强但标准自注意力计算代价高Mamba 路线试图在效率和全局建模之间找平衡但原始结构更适合一维序列ACL 认为Mamba 虽然近来很火但它原本是按一维序列递归扫描设计的。图像是二维结构直接照搬到图像上会带来几个问题1. 一维扫描不天然适合图像空间关系图像中的像素关系是二维分布的而 Mamba 的核心过程更像顺着一条序列去扫。这样做虽然可以处理长序列但对于二维邻接关系来说表达方式并不自然。2. 多方向扫描虽然能补但会变复杂为了让 Mamba 适应图像很多工作会设计横向扫描纵向扫描反向扫描多分支扫描这些补丁确实能缓解问题但也让结构越来越复杂。3. 递归式计算仍会影响效率Mamba 的状态更新本质上仍带有递归特性。即使它比标准全局注意力更省也不意味着它已经是最适合图像恢复的方案。所以 ACL 想回答的核心问题就是能不能保留 Mamba 风格的高效框架同时用线性注意力来承担更自然的全局像素依赖建模三、论文的核心思路是什么ACL 的核心思路可以概括成一句话用 Linear Attention 替换 Mamba 中的 SSM 核心再用多尺度空洞卷积补足局部细节恢复能力。这篇论文的结构核心主要有两个模块LAMALA-based Mamba ModuleMDCMulti-Dilated Convolutions Module二者分工很明确。1. LAMA 负责全局建模LAMA 是整篇论文的核心。它把线性注意力嵌入到 Mamba 风格结构中让模型在保持整体高效框架的同时更直接地建立图像中的全局像素依赖关系。2. MDC 负责局部细节增强仅靠全局依赖还不够。图像恢复尤其依赖边缘、纹理和局部高频信息因此作者额外设计了 MDC通过多尺度空洞卷积增强局部建模能力。也就是说ACL 的设计逻辑并不复杂全局关系交给线性注意力局部细节交给多尺度卷积这个分工比“把所有能力都堆到一个大模块里”更清晰也更符合图像恢复任务本身的需求。四、模型结构怎么理解ACL 整体是一个比较标准的Encoder-Decoder框架并采用了三尺度输出的设计。可以把它理解成下面这样输入退化图像 ↓ Conv Stem ↓ Encoder 1 ── LAMA × N MDC ↓ Encoder 2 ── LAMA × N MDC ↓ Encoder 3 ── LAMA × N ↓ Bottleneck ↓ Decoder 3 ── LAMA × N ↓ Decoder 2 ── LAMA × N Skip MDC ↓ Decoder 1 ── LAMA × N Skip MDC ↓ 多尺度重建输出从这个结构里可以看出 ACL 的几个关键特点1. 用编码器逐步聚合更大范围信息编码器负责把图像从浅层细节逐步压缩成更高层的语义特征。2. 用解码器逐步恢复空间分辨率解码器负责把编码阶段聚合到的语义信息重新还原为清晰图像。3. 用跳跃连接保留浅层细节恢复任务很依赖浅层边缘和纹理因此 skip connection 非常关键。4. 在高分辨率阶段额外增强局部信息ACL 没有把 MDC 放满所有层而是更偏向放在高分辨率相关阶段这说明作者确实在结构上考虑了“哪里更需要细节增强”。五、LAMA 模块到底做了什么LAMA 是 ACL 最值得拆的部分。它本质上是一个LA-based Mamba Module也就是“基于线性注意力重写的 Mamba 风格模块”。从论文思路上看LAMA 把输入特征分成两条路径主分支残差分支1. 残差分支生成门控信息残差分支先做线性变换再经过激活函数得到一个类似门控的特征。这部分可以理解为后面主分支输出的“调制项”。2. 主分支做线性注意力建模主分支会先做特征映射和卷积再进入线性注意力部分。这一步的目标是建立更大范围的像素依赖关系。和标准 Softmax Attention 相比线性注意力的一个核心优势在于更容易控制计算开销更适合在大分辨率条件下使用3. 两条分支融合主分支完成全局特征聚合后会和残差分支的门控特征做逐元素融合再通过线性层和前馈网络输出。这样一来LAMA 既能利用注意力建立全局依赖又不会完全丢掉模块内部的稳定性和可控性。六、为什么还要加 MDC很多人第一眼看 ACL容易把重点全放在线性注意力上但其实MDC 同样重要。原因很简单图像恢复不只是“看得远”还要“看得细”。注意力擅长做的是建立大范围依赖建模远距离关联聚合全局信息但在图像恢复中真正决定视觉质量的往往还有边缘锐度纹理连续性高频细节局部噪声与伪影处理这类信息仅靠全局注意力并不一定稳定因此 ACL 加入了 MDC 模块。MDC 的作用可以理解为用多尺度卷积看不同粒度的局部区域用空洞卷积扩大局部感受野在较低成本下增强边缘和纹理恢复能力这也是 ACL 比较“聪明”的地方它没有强行让 attention 解决所有问题而是让卷积回到自己最擅长的位置。七、为什么这篇论文的方法有效我觉得 ACL 有效主要是因为它抓住了三个关键点。1. 它找准了 Mamba 在图像上的短板Mamba 对序列任务很有吸引力但图像毕竟不是天然的一维数据。ACL 没有继续围绕扫描策略做更多补丁而是直接换个思路用线性注意力承接全局建模任务。2. 它把全局和局部分工做清楚了很多恢复模型喜欢把所有能力塞进同一个 block 里。ACL 的做法更清晰LAMA处理全局依赖MDC增强局部细节这种结构化分工通常更利于恢复任务。3. 它不是只追指标也很在意复杂度ACL 在论文里明显强调了参数量和 FLOPs这说明它的目标不是“做一个很重的刷榜模型”而是想做一个在精度和效率之间平衡更好的方案。八、实验效果怎么样ACL 主要验证了两个经典恢复任务去雨去模糊1. 去雨任务表现很强在多个去雨基准上ACL 表现都很有竞争力。从论文给出的结果来看它在 Rain100L、Rain100H、Rain200L、Rain200H 以及 DID-Data 等数据集上都取得了很强的 PSNR/SSIM。从整体趋势上看ACL 在平均结果上优于多种经典恢复模型说明它的结构设计不只是某一个数据集上的偶然奏效而是对去雨这类任务确实有效。2. 去模糊任务表现均衡在 GoPro 数据集上的去模糊实验中ACL 取得了不错的结果同时保持了较低的参数量和 FLOPs。它未必是表中绝对最高分的方法但它在性能、参数量和计算量之间做到了比较合理的平衡。这类模型在工程里往往比“最高分但极重”的方法更有价值。九、消融实验说明了什么ACL 的消融实验很能说明问题。1. LAMA 单独就有效论文中加入 LAMA 后相比基础模型就已经能带来明显提升。这说明用线性注意力替代原始状态空间模块并不是“理论上好看”而是确实能提升恢复效果。2. MDC 还能继续补涨在已有 LAMA 的基础上再加 MDC结果还能进一步提升。这说明局部细节建模并不是可有可无而是恢复任务中必须认真对待的一部分。3. 普通线性注意力并不等于 ACL论文还对比了普通 LA、扫描式 Mamba 和 ACL 的 LA-based Mamba 结构。最终 ACL 的结果最好这说明问题不一定是线性注意力本身不行而可能是以前没有放在合适的结构里。十、这篇论文最大的亮点是什么如果只总结一句我会说ACL 不是单纯换一个注意力模块而是重新分配了“线性注意力”和“卷积”在图像恢复里的角色。具体来说它的亮点主要有下面几个。亮点一给线性注意力找到了新的落点过去线性注意力在很多视觉任务里不如 Softmax Attention 强势因此容易被认为“上限有限”。ACL 提示了另一种可能问题也许不在 LA 本身而在于它之前没有被嵌进合适的框架。亮点二结构设计非常清楚全局交给 LAMA局部交给 MDC职责明确。这种结构设计很适合写成工程分析文因为逻辑非常顺。亮点三更符合工程思维ACL 很适合工程党去看因为它不仅讲效果也讲参数量和复杂度。这种论文通常比单纯“大模型刷分论文”更有参考价值。十一、这篇论文的不足在哪里再好的论文也不会没有问题ACL 也一样。1. 任务范围还不够广这篇论文主要验证的是去雨和去模糊。虽然这两个任务已经能说明问题但如果要证明它是更通用的图像恢复框架还需要更多任务验证例如去噪去雾压缩伪影去除去 JPEG artifact2. 它更像“综合平衡型”方法ACL 的优势很明显但并不是在所有任务和所有指标上都绝对第一。它更强的地方在于以相对低的复杂度拿到很有竞争力的结果。3. 部署复杂度仍高于纯 CNN虽然它比很多 Transformer 更轻但毕竟还是 attention encoder-decoder 的组合设计。真到部署阶段复杂度依旧会高于纯卷积网络。十二、简化版复现代码下面给一份教学理解版的 PyTorch 代码帮助快速理解 ACL 的核心思路。它不是论文官方逐行实现但保留了两件最关键的事一个LAMA-like的全局建模模块一个MDC-like的多尺度空洞卷积模块importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassSimpleLinearAttention(nn.Module):def__init__(self,dim,heads4):super().__init__()self.dimdim self.headsheads self.head_dimdim//heads self.qnn.Linear(dim,dim)self.knn.Linear(dim,dim)self.vnn.Linear(dim,dim)self.projnn.Linear(dim,dim)defforward(self,x):# x: [B, N, C]B,N,Cx.shape qself.q(x).reshape(B,N,self.heads,self.head_dim).transpose(1,2)kself.k(x).reshape(B,N,self.heads,self.head_dim).transpose(1,2)vself.v(x).reshape(B,N,self.heads,self.head_dim).transpose(1,2)qF.elu(q)1kF.elu(k)1kvtorch.matmul(k.transpose(-2,-1),v)outtorch.matmul(q,kv)outout.transpose(1,2).reshape(B,N,C)outself.proj(out)returnoutclassLAMALite(nn.Module):def__init__(self,dim):super().__init__()self.normnn.LayerNorm(dim)self.main_fcnn.Linear(dim,dim)self.res_fcnn.Linear(dim,dim)self.dwconvnn.Conv2d(dim,dim,3,padding1,groupsdim)self.attnSimpleLinearAttention(dim)self.out_fcnn.Linear(dim,dim)self.ffnnn.Sequential(nn.LayerNorm(dim),nn.Linear(dim,dim*4),nn.GELU(),nn.Linear(dim*4,dim))defforward(self,x,h,w):# x: [B, N, C]identityx xself.norm(x)resF.silu(self.res_fc(x))mainself.main_fc(x)B,N,Cmain.shape main_2dmain.transpose(1,2).reshape(B,C,h,w)main_2dF.silu(self.dwconv(main_2d))mainmain_2d.flatten(2).transpose(1,2)attn_outself.attn(main)outself.out_fc(attn_out*res)xidentityout xxself.ffn(x)returnxclassMDC(nn.Module):def__init__(self,dim):super().__init__()self.conv1nn.Conv2d(dim,dim,3,padding1)self.dilated1nn.Conv2d(dim,dim,3,padding2,dilation2)self.dilated2nn.Conv2d(dim,dim,5,padding4,dilation2)self.fusenn.Conv2d(dim*3,dim,1)defforward(self,x):aself.conv1(x)bself.dilated1(x)cself.dilated2(x)outtorch.cat([a,b,c],dim1)outself.fuse(out)returnoutxclassACLLite(nn.Module):def__init__(self,in_ch3,dim32):super().__init__()self.stemnn.Conv2d(in_ch,dim,3,padding1)self.enc1LAMALite(dim)self.mdc1MDC(dim)self.down1nn.Conv2d(dim,dim*2,3,stride2,padding1)self.enc2LAMALite(dim*2)self.mdc2MDC(dim*2)self.down2nn.Conv2d(dim*2,dim*4,3,stride2,padding1)self.bottleneckLAMALite(dim*4)self.up2nn.Sequential(nn.Upsample(scale_factor2,modebilinear,align_cornersFalse),nn.Conv2d(dim*4,dim*2,3,padding1))self.dec2LAMALite(dim*2)self.up1nn.Sequential(nn.Upsample(scale_factor2,modebilinear,align_cornersFalse),nn.Conv2d(dim*2,dim,3,padding1))self.dec1LAMALite(dim)self.headnn.Conv2d(dim,in_ch,3,padding1)defforward(self,x):inpx x1self.stem(x)B,C,H,Wx1.shape t1x1.flatten(2).transpose(1,2)t1self.enc1(t1,H,W)x1t1.transpose(1,2).reshape(B,C,H,W)x1self.mdc1(x1)x2self.down1(x1)B,C2,H2,W2x2.shape t2x2.flatten(2).transpose(1,2)t2self.enc2(t2,H2,W2)x2t2.transpose(1,2).reshape(B,C2,H2,W2)x2self.mdc2(x2)x3self.down2(x2)B,C3,H3,W3x3.shape t3x3.flatten(2).transpose(1,2)t3self.bottleneck(t3,H3,W3)x3t3.transpose(1,2).reshape(B,C3,H3,W3)y2self.up2(x3)x2 B,C2,H2,W2y2.shape t4y2.flatten(2).transpose(1,2)t4self.dec2(t4,H2,W2)y2t4.transpose(1,2).reshape(B,C2,H2,W2)y1self.up1(y2)x1 B,C1,H1,W1y1.shape t5y1.flatten(2).transpose(1,2)t5self.dec1(t5,H1,W1)y1t5.transpose(1,2).reshape(B,C1,H1,W1)outself.head(y1)returnoutinpif__name____main__:modelACLLite()xtorch.randn(1,3,256,256)ymodel(x)print(input :,x.shape)print(output:,y.shape)十三、适合哪些人读这篇论文我觉得 ACL 特别适合下面几类人1. 做图像恢复方向的学生和研究者尤其是去雨去模糊去噪低层视觉增强这篇论文的结构思路很值得参考。2. 想研究高效注意力机制的人如果你关心“怎么减少注意力计算成本”ACL 提供了一个很有启发性的方向。3. 更偏工程部署的人这篇论文不是单纯追求最高分而是比较在意性能和复杂度之间的平衡这一点很适合工程向思考。十四、总结ACL 是一篇很典型的“问题抓得准”的顶级图像算法论文。它没有继续沿着“更复杂的扫描策略”或者“更重的 Softmax Attention”去卷而是换了一个角度既然 Mamba 的整体框架适合高效建模那就把真正不适合图像的那部分换掉。于是ACL 用LAMA负责全局依赖用MDC负责局部细节让线性注意力在图像恢复里真正发挥作用。从结果上看这条路是有效的。它在去雨任务上取得了很强的表现在去模糊任务上也做到了比较好的性能-复杂度平衡。从研究角度看这篇论文的价值不只是“分数涨了”而是它提醒我们模型设计里真正重要的不一定是某个模块是不是最新而是它有没有被放在合适的位置上。如果你最近想分析一篇最近、顶级、又有明确工程价值的图像算法论文ACL 很值得认真读一遍。

更多文章