行业资讯

DehazeFormer原理详解:Transformer如何重塑图像去雾技术

发布时间:2026/7/21 21:21:04
DehazeFormer原理详解:Transformer如何重塑图像去雾技术 DehazeFormer 原理详解Transformer 如何重塑图像去雾技术一、引言图像去雾是计算机视觉中的经典难题。传统方法依赖大气散射模型估计透射率和大气光而深度学习方法如 AOD-Net、FFA-Net基于 CNN感受野有限。DehazeFormer创新地将 Vision Transformer 引入去雾任务利用自注意力机制建模全局依赖关系在多个基准数据集上达到 SOTA。本文将深入解析 DehazeFormer 的架构设计和核心原理。二、大气散射模型回顾在理解 DehazeFormer 之前先回顾雾天成像的物理模型I(x) J(x) × t(x) A × (1 - t(x))其中I(x): 观测到的有雾图像J(x): 需要恢复的清晰图像t(x): 透射率图transmission mapt(x) e^(-β·d(x))A: 全局大气光global atmospheric lightβ: 大气散射系数d(x): 场景深度去雾的目标是从 I(x) 恢复 J(x)需要估计 t(x) 和 A。这是一个欠定问题。三、DehazeFormer 架构详解3.1 整体架构输入: 有雾图像 I ∈ ℝ^(3×H×W) │ ▼ ┌─────────────────────┐ │ Patch Embedding │ Conv 3→C, k3, 产生 patch 特征 │ (无重叠分块) │ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ SK Fusion Layer 0 │ SKFF: 选择性核特征融合 │ (多尺度特征融合) │ ┌─ 3×3 卷积分支 ─┐ │ │ ├─ 5×5 卷积分支 ─┤→ 自适应融合 │ │ └─ 7×7 卷积分支 ─┘ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ DehazeFormer Block │ × N (通常 N4~8) │ × 4 │ │ │ ┌── LayerNorm ──┐ │ │ │ │ │ ┌─────────────────┐ │ │ ┌──────────┐ │ │ │ LayerNorm │ │ ├──│ W-MSA │─┤ → │ └────────┬────────┘ │ │ └──────────┘ │ │ │ │ │ │ │ ┌────────▼────────┐ │ │ ┌──────────┐ │ │ │ W-MSA / SW-MSA │ │ ├──│ MLP │─┤ → │ │ (窗口/移位窗口) │ │ │ └──────────┘ │ │ └────────┬────────┘ │ │ │ │ │ │ └───────────────┘ │ ┌────────▼────────┐ │ │ │ LayerNorm │ │ │ └────────┬────────┘ │ │ │ │ │ ┌────────▼────────┐ │ │ │ FeedForward │ │ 深度可分离卷积 MLP │ │ (DWConv GELU) │ │ │ └────────┬────────┘ │ │ │ │ │ ▼ │ │ 残差 │ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ 重建头 (Refinement) │ Conv → PixelShuffle → Conv │ │ 或直接 Conv 输出 └─────────┬───────────┘ │ ▼ 输出: 去雾图像 J ∈ ℝ^(3×H×W)3.2 核心组件实现3.2.1 窗口多头自注意力W-MSAimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFclassWindowAttention(nn.Module):基于窗口的多头自注意力def__init__(self,dim,window_size,num_heads):super().__init__()self.dimdim self.window_sizewindow_size self.num_headsnum_heads head_dimdim//num_heads self.scalehead_dim**-0.5self.qkvnn.Linear(dim,dim*3,biasTrue)self.projnn.Linear(dim,dim)# 相对位置偏置可学习self.relative_position_bias_tablenn.Parameter(torch.zeros((2*window_size-1)*(2*window_size-1),num_heads))defforward(self,x):B_,N,Cx.shape# [B*num_windows, window_size², C]# QKV 投影qkvself.qkv(x).reshape(B_,N,3,self.num_heads,C//self.num_heads)qkvqkv.permute(2,0,3,1,4)q,k,vqkv[0],qkv[1],qkv[2]# 注意力attn(q k.transpose(-2,-1))*self.scale# 添加相对位置偏置relative_position_biasself.relative_position_bias_table[self.relative_position_index.view(-1)].view(self.window_size**2,self.window_size**2,-1)relative_position_biasrelative_position_bias.permute(2,0,1)attnattnrelative_position_bias.unsqueeze(0)attnF.softmax(attn,dim-1)x(attn v).transpose(1,2).reshape(B_,N,C)xself.proj(x)returnx3.2.2 移位窗口机制SW-MSAW-MSA 只在窗口内计算注意力缺少窗口间的信息交互。SW-MSA 通过将窗口移位来解决defwindow_partition(x,window_size):将特征图划分为窗口B,H,W,Cx.shape xx.view(B,H//window_size,window_size,W//window_size,window_size,C)windowsx.permute(0,1,3,2,4,5)windowswindows.contiguous().view(-1,window_size,window_size,C)returnwindowsdefwindow_reverse(windows,window_size,H,W):窗口恢复为特征图Bint(windows.shape[0]/(H//window_size*W//window_size))xwindows.view(B,H//window_size,W//window_size,window_size,window_size,-1)xx.permute(0,1,3,2,4,5)xx.contiguous().view(B,H,W,-1)returnx3.2.3 SKFFSelective Kernel Feature FusionSKFF 模块融合多尺度特征是 DehazeFormer 的另一个关键创新classSKFF(nn.Module):Selective Kernel Feature Fusiondef__init__(self,channels,num_features32):super().__init__()self.conv3nn.Conv2d(channels,channels,3,1,1,groupschannels)self.conv5nn.Conv2d(channels,channels,5,1,2,groupschannels)self.conv7nn.Conv2d(channels,channels,7,1,3,groupschannels)# 特征选择Squeeze → Excitationself.fc_reducenn.Conv2d(channels*3,num_features,1)self.fc_expand3nn.Conv2d(num_features,channels,1)self.fc_expand5nn.Conv2d(num_features,channels,1)self.fc_expand7nn.Conv2d(num_features,channels,1)defforward(self,x):f3self.conv3(x)f5self.conv5(x)f7self.conv7(x)# 全局平均池化 → 通道选择utorch.cat([f3,f5,f7],dim1)# [B, C×3, H, W]u_gapF.adaptive_avg_pool2d(u,1)# [B, C×3, 1, 1]u_gapself.fc_reduce(u_gap)# 软注意力a3self.fc_expand3(u_gap).sigmoid()a5self.fc_expand5(u_gap).sigmoid()a7self.fc_expand7(u_gap).sigmoid()# 自适应融合outf3*a3f5*a5f7*a7returnoutx四、与 CNN 方法的对比特性CNN 方法FFA-NetDehazeFormer感受野局部受卷积核大小限制全局自注意力特征交互逐层渐进自由长程交互多尺度处理多分支/特征金字塔SKFF 自适应融合参数量~4.5M~2.5M轻量版本PSNR (SOTS-indoor)36.3936.82五、训练要点5.1 损失函数DehazeFormer 使用组合损失classDehazeLoss(nn.Module):def__init__(self):super().__init__()self.l1nn.L1Loss()self.perceptualPerceptualLoss()# VGG 感知损失defforward(self,pred,target):l1_lossself.l1(pred,target)perc_lossself.perceptual(pred,target)returnl1_loss0.04*perc_loss5.2 数据增强随机裁剪 256×256水平/垂直翻转旋转90°、180°、270°色彩抖动六、总结DehazeFormer 将 Swin Transformer 架构成功应用于图像去雾核心创新包括W-MSA/SW-MSA 的窗口注意力机制降低了计算复杂度SKFF 多尺度自适应融合增强了细节恢复能力。相比传统 CNN 方法在全局信息建模和细节恢复上均有显著提升。