012、SAN二阶注意力:非局部统计特征与空间自适应重建

📅 2026/7/1 2:20:26
012、SAN二阶注意力:非局部统计特征与空间自适应重建
012、SAN二阶注意力非局部统计特征与空间自适应重建一、从一次“过拟合”调试说起去年做遥感图像超分项目时我遇到一个诡异现象用RCAN在测试集上PSNR涨了0.3dB但实际部署到卫星影像上纹理细节反而糊成一团。当时百思不得其解直到把特征图可视化出来才发现——模型学会了“记忆”训练集中的高频模式而不是真正理解图像结构。这就是典型的“全局统计特征缺失”问题一阶注意力比如SENet的通道注意力只能捕捉每个通道的全局均值但图像中真正重要的纹理信息往往隐藏在二阶统计量里——比如方差、协方差它们描述了像素之间的相关性。这个坑让我彻底转向了SANSecond-order Attention Network。今天这篇笔记就聊聊二阶注意力如何通过非局部统计特征实现空间自适应的超分重建。二、二阶注意力不止是“平均池化”传统注意力机制的核心是“挤压-激励”Squeeze-and-Excitation用全局平均池化把空间信息压缩成一个标量。但这里有个隐藏假设图像特征服从高斯分布均值足以描述全局信息。实际超分任务中纹理区域的分布往往是多峰的——比如草地和天空的纹理方差天差地别用同一个均值去激励所有位置必然导致细节丢失。SAN的做法很直接用协方差矩阵替代均值向量。具体来说对输入特征图X形状为C×H×W先通过1×1卷积降维到C’通道减少计算量这里C’通常取64或128然后计算协方差矩阵Σ (1/N) * (X - μ)(X - μ)^T其中NH×Wμ是均值向量。这个Σ矩阵的维度是C’×C’它编码了不同通道之间的相关性——比如边缘检测通道和纹理通道的协方差就反映了它们共同激活的区域。踩坑提醒千万别直接对原始高维特征算协方差我一开始用256通道直接算显存直接爆了。降维到64通道后计算量从O(C2)降到O(C’2)而且实验证明C’64时性能已经饱和。三、非局部统计让特征“看见”全局二阶注意力的精髓在于“非局部”三个字。传统卷积的感受野是局部的即使堆叠很多层也只能通过逐层传播间接获取全局信息。而协方差矩阵的计算天然就是全局的——它把整个空间位置的统计特性浓缩成一个矩阵。但这里有个细节协方差矩阵是全局共享的怎么做到“空间自适应”SAN的解决方案是用协方差矩阵的逆或伪逆对每个位置的特征进行白化-染色操作。具体流程对每个空间位置(i,j)提取特征向量x_ijC’维计算全局协方差Σ并做特征分解Σ UΛU^T对每个位置做变换y_ij U * (Λ εI)^(-1/2) * U^T * (x_ij - μ)再通过一个可学习的缩放矩阵W进行重染色z_ij W * y_ij这个操作等价于先去除全局统计相关性白化再根据任务需求重新学习相关性染色。每个位置的特征都经过了全局统计的“校准”但又保留了局部差异——因为白化后的残差y_ij包含了每个位置偏离全局分布的信息。别这样写直接对协方差矩阵求逆。当特征维度较高时协方差矩阵可能奇异比如某些通道恒为0导致数值不稳定。一定要加正则项εIε取1e-5到1e-3之间具体值根据特征尺度调整。我习惯用1e-4效果稳定。四、空间自适应重建从“一刀切”到“因地制宜”有了二阶注意力重建过程就能做到空间自适应。传统超分模型对所有区域使用相同的卷积核而SAN会根据每个位置的统计特性动态调整特征响应。具体实现上SAN把二阶注意力模块插入到残差块之间。每个残差块输出特征后先经过二阶注意力模块再送入下一个残差块。这样做的效果是纹理丰富区域高方差会得到更强的激励平滑区域低方差则被抑制。可视化特征图时能明显看到草地、砖墙等纹理区域的响应值比天空、墙面高出一个数量级。我做过一个对比实验在Set5数据集上用SAN替换RCAN的一阶注意力模块PSNR从32.63dB涨到32.71dB×4倍超分。虽然涨幅不大但看主观效果差异明显——SAN重建的纹理更自然没有RCAN那种“油画感”。更关键的是在纹理密集的Urban100数据集上SAN比RCAN高了0.15dB说明二阶统计对复杂纹理确实有效。五、工程实现中的三个“坑”坑一协方差矩阵的计算顺序。PyTorch里直接算协方差时注意维度顺序。我习惯用torch.bmm批量计算先reshape特征为(B, C’, N)然后计算x.bmm(x.transpose(1,2)) / (N-1)。这里/ (N-1)是无偏估计但实际用/ N效果差别不大而且更稳定。坑二特征分解的梯度。特征分解torch.linalg.eigh是可微的但反向传播时计算量很大。如果显存紧张可以用牛顿迭代法近似求逆平方根比如用torch.matrix_power配合泰勒展开。不过我的经验是直接用eigh只要C’不超过128显存完全扛得住。坑三训练稳定性。二阶注意力模块在训练初期容易梯度爆炸因为协方差矩阵的逆平方根对特征尺度敏感。我的解决方案在二阶注意力模块前加一个LayerNorm把特征归一化到均值为0、方差为1。这样协方差矩阵就变成了相关矩阵数值范围稳定在[-1,1]之间训练瞬间稳如老狗。六、个人经验与建议如果你正在做超分项目我强烈建议在以下场景尝试二阶注意力纹理密集场景遥感、医学图像、布料纹理等一阶注意力往往力不从心跨域迁移从自然图像到特定领域如卫星图二阶统计能帮助模型适应分布偏移轻量化需求虽然二阶注意力计算量稍大但可以用C’32甚至16效果依然优于一阶但也要注意二阶注意力不是万能药。对于人脸、文字等结构规整的图像一阶注意力已经足够引入二阶反而可能过拟合。我的建议是先跑一版RCAN作为baseline如果发现纹理区域重建质量差再替换二阶注意力模块。不要为了用而用。最后分享一个调试技巧训练时把二阶注意力模块输出的特征图可视化如果看到所有位置响应值接近比如方差小于0.01说明白化操作过度需要减小正则项ε如果某些位置响应值异常大比如超过正常值10倍说明协方差矩阵估计不稳定需要增大ε或增加训练数据。超分重建的本质是让模型学会“看”图像的结构。一阶注意力看到的是“平均亮度”二阶注意力看到的是“纹理的分布”。当你开始用统计学的视角理解图像时很多问题就豁然开朗了。