151、从理论到实战:SwinIR在单图像超分中的注意力机制深度解析与代码复现 📅 2026/7/15 16:10:11 151、从理论到实战:SwinIR在单图像超分中的注意力机制深度解析与代码复现上周调SwinIR的时候,一个batch的PSNR死活卡在32.5上不去,我盯着tensorboard的曲线看了半小时,最后发现是窗口划分时padding没对齐——这种坑,论文里不会写,但跑代码的人迟早会撞上。今天这篇笔记,就从我踩过的这个坑开始,把SwinIR的注意力机制掰开揉碎了讲清楚,再手撕一遍核心代码。为什么SwinIR能打?注意力机制的“手术刀”式改进先聊点背景。超分任务里,全局注意力(比如ViT那种)有个致命问题:计算复杂度是O(N²),N是像素数。一张256x256的图,N=65536,算一次自注意力,显存直接爆炸。SwinIR的解决方案很聪明——把注意力切成局部窗口,每个窗口内做自注意力,窗口之间通过移位操作交换信息。这就像用手术刀代替大砍刀,精度没丢,计算量降了两个数量级。具体到SwinIR的架构,它由三部分组成:浅层特征提取(一个卷积)、深层特征提取(一堆Swin Transformer Block堆叠)、重建模块(上采样+卷积)。真正核心的,是深层特征提取里的Swin Transformer Block,而Block里最关键的,就是基于窗口的多头自注意力(W-MSA)和移位窗口多头自注意力(SW-MSA)。窗口注意力:别把“局部”理解错了很多人以为窗口注意力就是简单地把图切成8x8的patch,每个patch内部做自注意力。这个理解没错,但不够。SwinIR的窗口划分有个细节:窗口