基于Transformer的图像去模糊算法:Stripformer(条带注意力去运动模糊)
字数 3525 2025-12-11 14:02:07
基于Transformer的图像去模糊算法:Stripformer(条带注意力去运动模糊)
题目描述
图像去模糊旨在从模糊的输入图像中恢复出清晰的图像。运动模糊是由于相机与场景之间的相对运动引起的,其模糊核通常具有方向性,呈现条纹状。传统的去模糊算法往往依赖手工先验,而基于CNN的方法通常通过堆叠卷积层隐式建模全局依赖,效率较低。Stripformer提出一种基于Transformer的架构,核心创新是引入了“条带注意力”(Strip Attention)模块,显式地建模水平与垂直方向的长程依赖,以更高效地处理具有方向性的运动模糊。本题目将详细解析Stripformer的核心思想、网络结构、条带注意力机制以及其训练与推理过程。
解题过程
1. 问题建模与分析
- 输入与输出:模型输入是一张因相机或物体运动而产生的模糊图像 \(I_{blurry} \in \mathbb{R}^{H \times W \times 3}\),输出是对应的清晰图像估计 \(I_{sharp} \in \mathbb{R}^{H \times W \times 3}\)。
- 核心挑战:运动模糊具有方向性,意味着图像中像素的退化与特定方向(通常是水平或垂直)上相邻的像素强相关。标准卷积的局部感受野难以有效捕获这种长程、定向的依赖性。全局Transformer(如Vision Transformer)虽然能捕获长程依赖,但其计算复杂度高(与像素数的平方成正比),且其注意力是各向同性的,没有针对运动模糊的定向特性进行优化。
- 解决思路:Stripformer的核心思路是设计一种条带注意力(Strip Attention)机制,将传统的全局、密集注意力分解为沿水平方向和垂直方向的两个条带注意力操作。这能显式地、高效地捕获图像中与运动模糊方向一致的长程依赖。
2. 网络整体架构概览
Stripformer采用一个编码器-解码器结构,并加入了跳跃连接(类似U-Net),以融合多尺度特征。
- 编码器:包含多个层级,每级由多个Strip Transformer Block堆叠而成,并通过Patch Mergging(类似于卷积下采样)来降低空间分辨率、增加通道数,从而提取多尺度特征。
- 解码器:包含多个层级,每级由多个Strip Transformer Block堆叠而成,并通过Patch Expanding(上采样操作)来提高空间分辨率、减少通道数。解码器每一层的输入除了来自上一解码层的特征,还通过跳跃连接融合来自对应编码层的同尺度特征。
- 瓶颈层:位于编码器与解码器之间,也由Strip Transformer Block构成。
- 输入/输出投影:网络开始是一个卷积层(Embedding Layer),将输入RGB图像投影到高维特征空间。网络结尾是一个卷积层(Reconstruction Layer),将最终特征映射回RGB空间,并与输入模糊图像相加(残差学习),得到清晰图像。
3. 核心组件:条带注意力(Strip Attention)机制详解
这是Stripformer最核心的创新点。其目标是替换标准Transformer中的多头自注意力(MHSA),使其更适合处理方向性模糊。
- 步骤1:特征图准备
假设输入到Strip Transformer Block的特征图为 \(X \in \mathbb{R}^{H \times W \times C}\)。首先,通过LayerNorm进行归一化,然后通过线性投影生成查询(Query)、键(Key)、值(Value)向量。但关键在于,Strip Attention不直接在整个特征图上计算全局注意力。 - 步骤2:分解为水平与垂直条带注意力
Stripformer将完整的注意力计算分解为两个顺序执行的、更高效的操作:- 水平条带注意力:
- 重塑:将特征图 \(X\) 重塑为 \(X_h \in \mathbb{R}^{H \times W \times C}\)。这里,我们将每一行的像素视为一个“条带”。
- 注意力计算:计算行内的注意力。对于第 \(i\) 行,其查询向量 \(Q_{i,:}\) 会与同一行所有位置的键向量 \(K_{i,:}\) 计算注意力权重,然后对同一行的值向量 \(V_{i,:}\) 进行加权聚合。这相当于在水平方向上捕获长程依赖(因为一行可能横跨整个图像宽度),但垂直方向上(行与行之间)在此步没有交互。
- 复杂度:对于 \(H\) 行,每行有 \(W\) 个元素,计算复杂度为 \(O(H \times W^2)\)。相比于全局注意力的 \(O((H \times W)^2)\),显著降低。
- 垂直条带注意力:
- 重塑:将经过水平注意力处理后的特征图重塑为 \(X_v \in \mathbb{R}^{W \times H \times C}\)。这里,我们将每一列的像素视为一个“条带”。
- 注意力计算:计算列内的注意力。对于第 \(j\) 列,其查询向量与同一列所有位置的键值计算注意力。这捕获了垂直方向上的长程依赖。
- 复杂度:为 \(O(W \times H^2)\)。
- 水平条带注意力:
- 步骤3:组合与输出
将经过水平和垂直条带注意力处理后的特征图(需重塑回原始形状)通过一个可学习的权重进行融合,然后通过一个前馈网络(FFN,通常由两个线性层和GELU激活函数组成)进行非线性变换。最终,通过一个残差连接将输入 \(X\) 加到输出上,完成一个Strip Transformer Block的计算。 - 设计优势:
- 方向性建模:显式地沿水平和垂直两个主要方向建模长程依赖,这与许多运动模糊的物理模型(方向性模糊核)高度契合。
- 计算高效:总体复杂度为 \(O(HW(H+W))\),远低于全局注意力的 \(O((HW)^2)\),使其能处理更高分辨率的图像。
- 信息交互:虽然两个注意力是顺序执行的,但通过先水平后垂直(或反之),信息最终能在整个二维空间内间接传播,实现全局上下文的建模。
4. 训练策略与损失函数
- 数据集:通常在合成的运动模糊数据集(如GoPro、REDS)上进行训练。这些数据集包含模糊-清晰的图像对。
- 损失函数:通常结合多种损失函数来监督训练:
- 像素级损失:如L1损失(平均绝对误差),迫使预测图像在像素级上接近真实清晰图像。\(L_{L1} = \| I_{pred} - I_{gt} \|_1\)。
- 感知损失:使用预训练的VGG网络,比较预测图像与真实图像在特征空间的差异,以提升视觉质量。\(L_{perc} = \| \phi(I_{pred}) - \phi(I_{gt}) \|_2^2\),其中 \(\phi\) 表示VGG的某一层特征。
- 对抗损失(可选):引入一个判别器(Discriminator),与Stripformer(生成器)进行对抗训练,使生成的图像看起来更“真实”,从而提升细节的清晰度和自然度。
总的损失函数是这些损失的加权和:\(L_{total} = \lambda_1 L_{L1} + \lambda_2 L_{perc} + \lambda_3 L_{adv}\)。
- 优化:使用Adam优化器,采用逐步学习率衰减策略。
5. 推理过程
推理过程是前向传播:
- 输入模糊图像 \(I_{blurry}\)。
- 经过Embedding Layer得到初始特征。
- 特征依次通过编码器、瓶颈层、解码器的各层Strip Transformer Block,并融合多尺度跳跃连接特征。
- 通过Reconstruction Layer得到残差清晰图像 \(R\)。
- 输出清晰图像:\(I_{sharp} = I_{blurry} + R\)。
这个过程是端到端的,无需任何后处理。
总结
Stripformer通过引入条带注意力这一核心机制,为基于Transformer的图像去模糊提供了一个高效且有效的解决方案。它通过将全局注意力分解为水平和垂直方向上的顺序注意力,显式地建模了与运动模糊物理特性相符的长程、定向依赖,在保持较强去模糊能力的同时,显著降低了计算复杂度,实现了性能与效率的良好平衡。其编码器-解码器结构则帮助网络融合多尺度信息,以恢复不同尺度下的清晰细节。