1. 从“水下朦胧”到“清澈通透”为什么传统方法力不从心如果你尝试过在水下拍照或者处理过别人拍的水下照片大概率会感到一阵头疼。那些照片通常带着一层挥之不去的蓝绿色“滤镜”整体发暗、发绿对比度低细节模糊就像隔着一层浑浊的玻璃在看世界。这背后的罪魁祸首是光在水下传播时发生的复杂物理衰减和散射效应。不同波长的光红、绿、蓝在水中的衰减程度不同红光最先被吸收导致图像严重偏蓝绿同时水中悬浮的颗粒物会散射光线造成图像模糊和对比度下降。这种退化不是均匀的它随着拍摄深度、水质、光照条件剧烈变化使得水下图像增强成为一个极具挑战性的计算机视觉任务。传统的增强方法比如基于直方图均衡化HE或白平衡WB的算法往往只能做全局调整。它们假设整张图像的退化模式是一致的试图用一个简单的数学模型比如调整全局色彩通道的增益来“拉回”颜色。但水下图像的问题恰恰在于其空间异质性——近处的物体颜色可能相对正常而远处的背景则完全被蓝绿色淹没物体边缘由于散射效应变得模糊但中心区域可能还保留着一些细节。这种“一刀切”的全局方法要么矫正不足要么矫正过度很容易在增强一部分区域的同时在另一部分区域引入不自然的色彩或噪声。深度学习尤其是卷积神经网络CNN的兴起为这个问题带来了转机。通过在海量的“退化-清晰”图像对上进行训练CNN可以学习到从模糊、偏色的水下图像到清晰、色彩正常的图像之间的复杂映射关系。一时间各种基于CNN的水下图像增强模型如雨后春笋般出现。它们确实取得了比传统方法好得多的效果能够在一定程度上恢复色彩和细节。然而CNN本身也存在其固有的局限性。CNN的核心操作是卷积它通过在局部感受野内进行加权求和来提取特征。这种操作有两个特点一是局部性一个卷积核每次只能看到图像的一小块区域二是静态权重无论输入图像的内容是什么卷积核的权重在推理时是固定不变的。这就引出了水下图像增强任务中的一个核心矛盾我们需要模型既能关注全局的上下文信息比如判断整张图像的整体色偏趋势和光照条件又能对局部细节进行自适应的精细处理比如精确恢复珊瑚的纹理、鱼鳞的细节而不放大水中的悬浮颗粒噪声。CNN的局部感受野特性使其在捕捉长距离依赖关系即图像中相距很远的两个像素点之间的关联时效率不高通常需要堆叠非常深的网络层通过一次次卷积的累积来扩大感受野这无疑增加了计算复杂度和模型参数量。更重要的是其静态的卷积核对于水下图像这种退化模式复杂多变的场景显得有些“笨拙”——它用同一套固定的“滤镜”去处理图像中退化程度完全不同的区域效果自然难以达到最优。正是在这样的背景下注意力机制和状态空间模型SSM进入了研究者的视野。注意力机制尤其是Transformer中的自注意力能够显式地建模图像中所有像素对之间的关系无论它们相距多远从而完美解决了长距离依赖问题。但它的计算复杂度与图像尺寸的平方成正比处理高分辨率图像时开销巨大。而状态空间模型特别是最近大放异彩的Mamba模型提供了一种全新的思路。它借鉴了控制理论中的状态空间方程能够以线性复杂度对长序列进行建模同时具备输入依赖的动态性——模型可以根据当前输入的内容动态地决定哪些信息需要被记住保留在状态中哪些信息可以被忽略。这种特性仿佛为模型装上了一双“智能的眼睛”让它能够根据图像不同区域的具体情况动态调整处理策略。那么将Mamba这种擅长处理长序列、具备动态推理能力的模型与图像处理中经典的频域分析思想结合起来会发生什么这就是“Hero-Mamba基于Mamba的双域学习模型”想要回答的问题。它不再仅仅在像素空间我们肉眼看到的图像里“硬刚”退化问题而是同时开辟了频域这个战场试图从信号的本质层面更优雅、更高效地分离噪声、模糊与真实细节。2. 双域学习在像素与频率两个战场协同作战要理解Hero-Mamba的“双域学习”我们首先得搞清楚“域”指的是什么。在图像处理中我们最熟悉的是空间域也就是像素域。一张图像由成千上万个像素点组成每个点有它的颜色值R G B。在这个域里我们直接操作这些像素值比如调整亮度、对比度或者用卷积核进行滤波。所有基于CNN的增强方法主要都是在空间域进行操作。然而图像还有另一种极其重要的表示形式——频域。任何一个信号包括图像都可以被分解为一系列不同频率、不同振幅的正弦波的叠加。这个概念可能有点抽象我们可以用一个简单的类比一段音乐。在时间域类似于空间域我们听到的是声音强度随时间变化的波形。而在频率域通过傅里叶变换得到我们看到的是这张“乐谱”它清晰地标明了每个音符频率的强度振幅。图像也是如此高频分量通常对应着图像的边缘、纹理等细节部分变化剧烈而低频分量则对应着图像中平缓变化的区域比如大片的天空、水面或墙壁。水下图像的退化在频域里会呈现出非常特征性的模式。由于光的散射和吸收图像的高频细节信息会严重衰减这表现为边缘模糊、纹理消失。同时水介质和悬浮颗粒会引入一种特定的噪声这种噪声往往在频域中具有特定的分布。此外由于颜色通道的不均衡衰减不同颜色通道R G B在频域的能量分布也会发生畸变。传统方法有时也会用到频域比如小波变换但通常是将图像变换到频域进行一些滤波操作如削弱某些频率、增强另一些频率然后再变换回空间域。这种流程是串行的、分离的。而Hero-Mamba提出的“双域学习”是并行且深度融合的。它的核心思想是为什么不构建一个模型让它同时从空间域和频域两个视角来观察和理解一张水下图像呢两个视角获取的信息是互补的。空间域分支主要负责处理图像的局部结构、颜色和光照。它更擅长于理解“这是什么物体”、“它的颜色应该是什么”。例如判断一片区域是红色的珊瑚还是绿色的海藻并对其进行颜色校正。频域分支主要负责分析图像的全局结构和纹理细节。它更擅长于判断“图像的清晰度如何”、“哪些频率的信息丢失了”、“噪声主要分布在哪些频段”。例如识别出由于散射导致的高频缺失并尝试从低频信息中或通过模型先验知识进行重建。Hero-Mamba模型会同时将输入的水下图像送入两个并行的处理分支。空间域分支直接在像素层面上操作而频域分支则会先将图像通过快速傅里叶变换FFT转换到频域。关键在于这两个分支并非独立工作它们中间设计了密集的跨域交互机制。比如空间域分支在恢复某个物体颜色时可以询问频域分支“这个区域的边缘高频信号强度如何是否可信” 频域分支在试图重建某个高频成分时也可以参考空间域分支的信息“根据颜色和上下文这里应该是一条鱼的鳍那么它的边缘大概率是这种形状。” 通过这种持续的、双向的信息交换模型能够做出更全局、更一致的决策。这种双域架构的优势是显而易见的。首先它提供了更丰富的特征表示。有些在空间域难以区分的退化模式比如不同类型的模糊叠加在频域可能一目了然。其次它有助于更精准地分离信号与噪声。噪声和真实细节在空间域可能纠缠在一起但在频域它们可能占据不同的频带更容易被区分和处理。最后它为模型提供了更强的先验知识。自然图像在频域通常具有某些统计规律如能量随频率升高而衰减这些规律可以作为指导模型重建的强有力约束。3. Mamba登场为双域模型注入“动态选择性”灵魂双域架构搭建了一个优秀的作战平台但每个分支内部需要强大的“士兵”来处理信息。这就是Mamba模型大显身手的地方。为什么是Mamba而不是更流行的Vision TransformerViT或者更经典的CNN让我们回顾一下前面提到的挑战处理高分辨率图像的长距离依赖以及应对水下退化模式的空间异质性。ViT通过自注意力机制解决了长距离依赖问题但其计算量随着图像分块数量的平方增长。对于需要精细处理细节的图像增强任务我们往往需要将图像切分成很多小块例如16x16像素这使得计算开销变得难以承受。虽然有一些线性注意力变体试图降低复杂度但它们通常在性能上有所妥协。CNN计算效率高但感受野有限且权重静态。堆叠很深的CNN或使用空洞卷积可以扩大感受野但这是一种“被动”的、固定模式的感受野扩大无法根据图像内容动态调整关注范围。Mamba则提供了一种截然不同的范式。它源于状态空间序列模型SSM其核心是一个可以随时间在图像中就是沿空间维度如按行扫描更新状态的系统。这个系统的关键创新在于选择性扫描机制。简单来说当Mamba处理一个序列比如图像的一行像素时它不是对所有的历史信息都一视同仁地记住而是会根据当前输入的内容动态地决定哪些信息需要被压缩进一个紧凑的、持续更新的“状态”中例如当前图像的整体色调、光照条件。哪些过往的信息可以被忽略或遗忘例如已经处理过的、与当前区域无关的背景噪声。如何将当前输入与记忆中的状态进行融合以产生输出。这种“输入依赖的动态性”是Mamba的灵魂也是它特别适合水下图像增强的原因。想象一下模型正在处理一张水下照片当它扫描到一片颜色严重偏蓝的远景区时Mamba机制可以动态地强化“颜色校正”这个处理模式并记住“这片区域需要大幅提升红色通道”。当它扫描到一个前景物体如一条鱼的边缘时机制可以切换到“细节增强”模式专注于从状态中提取有用的上下文信息来锐化边缘同时忽略来自浑浊背景的干扰信息。当它处理一片纹理复杂的珊瑚区时机制可以动态调整专注于捕捉和重建中高频的纹理信息。这种能力就好比一个经验丰富的修图师在处理照片的不同部分时会动态地选择不同的工具和参数用曲线工具整体调色用局部画笔修复细节用降噪工具处理平滑区域。Mamba让模型具备了这种“因地制宜”的智能。在Hero-Mamba的具体实现中Mamba模块被深度集成到了双域分支中。通常图像会被重塑成一个长序列例如将空间维度展平然后送入Mamba块进行处理。Mamba块内部包含了上述的选择性扫描状态空间S6层以及必要的归一化层和前馈网络。由于Mamba的线性复杂度它可以高效地处理这个长序列捕获整个图像范围内的长距离依赖关系。更重要的是Mamba的这种动态选择性与双域学习形成了完美的互补。在空间域分支Mamba可以动态地整合全局的颜色和结构上下文指导局部区域的增强。在频域分支Mamba可以沿着频率维度扫描动态地判断哪些频率成分需要被增强、哪些需要被抑制可能是噪声并考虑不同频率分量之间的关联。两个分支的Mamba模块通过跨域交互连接可以交换它们动态选择出的“重要信息”从而实现全局协同的增强决策。4. Hero-Mamba模型架构拆解从输入到输出的增强流水线理解了双域学习和Mamba的核心思想后我们现在可以深入Hero-Mamba模型的技术细节看看它是如何将这些理念转化为一个可工作的、高效的神经网络架构的。请注意以下架构描述是基于该研究方向常见的设计模式和对“双域学习Mamba”这一组合的合理推演旨在揭示其核心工作原理。4.1 整体流程与输入预处理模型的输入是一张退化的水下图像 I ∈ R^(H×W×3)。首先会经过一个浅层的特征提取层通常由几个卷积层组成将输入图像映射到一个更高维的特征空间 F_0 ∈ R^(H×W×C)其中C是通道数。这一步的目的是初步提取一些低级的图像特征如边缘和颜色信息为后续的双域深度处理做准备。接下来特征 F_0 被复制成两份分别送入空间域分支和频域分支。4.2 空间域分支像素世界的修复师空间域分支直接在图像的二维网格结构上操作。它的主干通常由多个空间Mamba块堆叠而成。每个空间Mamba块的核心步骤包括序列化将二维特征图 F_spatial ∈ R^(H×W×C) 重塑为一个二维序列。常见的方式是按行扫描得到序列 X ∈ R^(L×C)其中 L H × W。Mamba处理将序列 X 送入Mamba层S6层。Mamba层会沿着序列长度 L 进行选择性扫描。对于图像而言这相当于让模型以一种特定的、内容感知的顺序通常是行优先来“阅读”整张图像的所有位置并动态地建立远距离像素之间的联系。例如当处理右下角一个暗点时Mamba的状态中可能已经记忆了图像左上角有一个明亮光源的上下文信息。反序列化将处理后的输出序列重新 reshape 回二维特征图 F_spatial‘ ∈ R^(H×W×C)。局部增强在Mamba块前后通常会配合使用一些轻量级的卷积层或前馈网络用于处理Mamba可能忽略的极端局部细节并实现特征的进一步非线性变换。多个这样的块级联使得空间域分支能够从局部到全局逐步理解和修复图像的色彩、光照和结构。4.3 频域分支频率世界的分析家频域分支的工作流程略有不同傅里叶变换对输入的特征 F_0或经过初步处理的特征进行快速傅里叶变换FFT将其从空间域转换到频域得到频域表示 F_freq ∈ R^(H×W×C)。注意这里的C个通道每个都有独立的实部和虚部或振幅和相位通常会被分开或组合处理。频域Mamba处理频域特征 F_freq 同样需要被序列化后送入频域Mamba块。这里的序列化方式可能有多种。一种有效的方式是将频率坐标u v和通道 c 一起视为序列的维度。Mamba层会沿着频率维度进行扫描学习不同频率分量之间的依赖关系。例如它可能学习到“如果某个低频分量很强那么与之谐相关的高频分量也应该相应增强”这样的规律。更重要的是Mamba的选择性机制可以让它动态地关注那些对图像清晰度至关重要的关键频带通常是中高频而抑制那些可能被噪声污染的频带。逆傅里叶变换经过数个频域Mamba块处理后得到的增强后的频域特征需要通过逆傅里叶变换IFFT转换回空间域与空间域分支的特征进行对齐和融合。4.4 跨域交互融合双剑合璧的关键两个分支并非各自为政。Hero-Mamba的核心创新之一就在于其密集的跨域交互融合模块。这些模块被插入在分支的多个层级例如在每个Mamba块之后。交互方式通常采用交叉注意力Cross-Attention或简单的特征拼接/相加后接卷积的方式。例如一个“空间问频域”的交互模块会以空间域特征作为Query以频域特征作为Key和Value计算注意力权重。这样空间域在处理某个区域时可以直接从频域特征中查询“这个区域的频谱能量分布是否健康高频是否缺失”从而指导其增强力度。融合时机除了中间层的交互在网络的最后两个分支输出的特征图会通过一个融合模块进行最终整合。这个模块需要谨慎设计以权衡空间域的颜色校正能力和频域域的细节恢复能力。常见的做法是使用一个可学习的权重图通过1x1卷积和Sigmoid函数生成来自适应地融合两个分支的特征在纹理丰富的区域给予频域分支更高的权重在颜色失真严重的平滑区域则更依赖空间域分支。4.5 输出与损失函数融合后的特征经过一个或多个重建卷积层最终输出增强后的图像 I_enhanced ∈ R^(H×W×3)。整个模型的训练需要大量的“退化-清晰”图像对。常用的损失函数是多任务组合像素级损失如L1或L2损失确保输出图像与清晰目标在像素值上接近。感知损失使用预训练网络如VGG提取的特征进行对比使增强图像在高级语义特征上与目标一致有助于保持内容真实性。频域损失直接计算输出图像与目标图像在频域如傅里叶振幅谱的差异强制模型在频率层面进行优化。对抗损失可选引入判别器让增强图像看起来更接近自然清晰的图像分布有助于提升视觉真实感。通过联合优化这些损失Hero-Mamba被训练成一位既懂色彩构图空间域又懂信号本质频域且能动态调整策略Mamba的“全能修图师”。5. 实战指南从零开始尝试Hero-Mamba思路虽然原生的Hero-Mamba模型可能尚未有官方开源代码但其核心思想——结合双域学习和选择性状态空间模型——为我们提供了一个非常强大的水下图像增强框架。我们可以基于现有的深度学习工具尝试搭建一个简化版的实现来验证这一思路的有效性。这里我将以PyTorch为例勾勒出关键步骤和代码逻辑。5.1 环境搭建与依赖安装首先你需要一个配置了GPU的Python环境。推荐使用Conda进行环境管理。# 创建并激活一个虚拟环境 conda create -n underwater-enhance python3.9 conda activate underwater-enhance # 安装PyTorch请根据你的CUDA版本访问PyTorch官网获取对应命令 # 例如对于CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装Mamba相关库。目前Mamba的官方实现是mamba-ssm pip install mamba-ssm # 安装其他必要库 pip install opencv-python pillow matplotlib scikit-image numpy tqdm5.2 构建核心模块选择性状态空间层我们需要实现Mamba的核心即选择性状态空间S6层。这里我们直接使用mamba-ssm库中提供的Mamba模块它已经高效地实现了选择性扫描机制。import torch import torch.nn as nn from mamba_ssm import Mamba class SelectiveSSMBlock(nn.Module): 一个简化的Mamba块用于处理序列数据。 def __init__(self, dim, d_state16, d_conv4, expand2): super().__init__() self.norm nn.LayerNorm(dim) # Mamba层是核心 self.mamba Mamba( d_modeldim, # 输入维度 d_stated_state, # 状态维度 d_convd_conv, # 卷积核大小 expandexpand, # 扩展因子 ) self.ffn nn.Sequential( nn.Linear(dim, dim * expand), nn.GELU(), nn.Linear(dim * expand, dim), ) self.ffn_norm nn.LayerNorm(dim) def forward(self, x): # x shape: (batch, length, dim) residual x x self.norm(x) x self.mamba(x) # Mamba处理 x residual x # 残差连接 residual x x self.ffn_norm(x) x self.ffn(x) x residual x return x5.3 构建双域处理分支接下来我们构建空间域分支和频域分支。这里的关键是将二维图像特征转换为序列以及进行傅里叶变换。import torch.fft class SpatialDomainBranch(nn.Module): 空间域分支使用Mamba处理空间序列。 def __init__(self, in_channels, hidden_dim, num_blocks, img_size): super().__init__() self.proj nn.Conv2d(in_channels, hidden_dim, kernel_size3, padding1) self.blocks nn.ModuleList([ SelectiveSSMBlock(dimhidden_dim) for _ in range(num_blocks) ]) self.img_size img_size self.hidden_dim hidden_dim def forward(self, x): # x: (B, C, H, W) x self.proj(x) B, C, H, W x.shape # 序列化将空间维度展平 x x.permute(0, 2, 3, 1).reshape(B, H*W, C) # (B, L, C) for block in self.blocks: x block(x) # 反序列化恢复空间结构 x x.reshape(B, H, W, C).permute(0, 3, 1, 2) return x class FrequencyDomainBranch(nn.Module): 频域分支将特征转换到频域用Mamba处理频率关系再转换回来。 def __init__(self, in_channels, hidden_dim, num_blocks): super().__init__() self.proj nn.Conv2d(in_channels, hidden_dim, kernel_size1) self.blocks nn.ModuleList([ SelectiveSSMBlock(dimhidden_dim*2) for _ in range(num_blocks) # *2 for real and imag ]) self.hidden_dim hidden_dim def forward(self, x): # x: (B, C, H, W) x self.proj(x) # 傅里叶变换得到实部和虚部 x_freq torch.fft.rfft2(x, normortho) # (B, C, H, W//21) complex real x_freq.real imag x_freq.imag # 拼接实部和虚部作为特征 x_combined torch.cat([real, imag], dim1) # (B, C*2, H, W//21) B, C2, H, W_half x_combined.shape # 序列化这里我们将频率坐标(u,v)和通道展平 # 一种简单方式将特征视为 (H, W_half) 个 C2 维的向量 x_seq x_combined.permute(0, 2, 3, 1).reshape(B, H*W_half, C2) for block in self.blocks: x_seq block(x_seq) x_combined x_seq.reshape(B, H, W_half, C2).permute(0, 3, 1, 2) # 分离实部虚部 real, imag torch.chunk(x_combined, 2, dim1) # 逆傅里叶变换 x_freq_enhanced torch.complex(real, imag) x_spatial torch.fft.irfft2(x_freq_enhanced, sx.shape[-2:], normortho) return x_spatial5.4 实现跨域交互与融合我们实现一个简单的跨域注意力交互模块和一个自适应融合模块。class CrossDomainAttention(nn.Module): 一个简单的跨域交叉注意力模块。 def __init__(self, dim): super().__init__() self.to_q nn.Linear(dim, dim) self.to_kv nn.Linear(dim, dim*2) self.scale dim ** -0.5 def forward(self, x_domain_a, x_domain_b): # x_domain_a, x_domain_b: (B, L, C) q self.to_q(x_domain_a) k, v self.to_kv(x_domain_b).chunk(2, dim-1) attn (q k.transpose(-2, -1)) * self.scale attn attn.softmax(dim-1) out attn v return out # 交互后的特征可以加回到原分支 class AdaptiveFusion(nn.Module): 自适应融合两个分支的特征。 def __init__(self, channels): super().__init__() self.weight_gen nn.Sequential( nn.Conv2d(channels*2, channels, 3, padding1), nn.ReLU(), nn.Conv2d(channels, 2, 1), # 输出两个通道的权重图 nn.Softmax(dim1) # 在通道维做softmax保证两个权重和为1 ) def forward(self, feat_spatial, feat_freq): combined torch.cat([feat_spatial, feat_freq], dim1) weights self.weight_gen(combined) # (B, 2, H, W) w_spatial, w_freq weights.chunk(2, dim1) fused w_spatial * feat_spatial w_freq * feat_freq return fused5.5 组装完整的Hero-Mamba简化模型现在我们将所有组件组装起来。class SimpleHeroMamba(nn.Module): 一个简化版的Hero-Mamba模型。 def __init__(self, in_ch3, base_ch32, num_blocks4, img_size256): super().__init__() self.initial_conv nn.Conv2d(in_ch, base_ch, 3, padding1) self.spatial_branch SpatialDomainBranch(base_ch, base_ch, num_blocks, img_size) self.freq_branch FrequencyDomainBranch(base_ch, base_ch, num_blocks) # 假设在中间层进行一次交互这里简化实际可有多层 self.cross_attn CrossDomainAttention(base_ch) self.fusion AdaptiveFusion(base_ch) self.final_conv nn.Sequential( nn.Conv2d(base_ch, base_ch, 3, padding1), nn.ReLU(), nn.Conv2d(base_ch, 3, 3, padding1), nn.Tanh() # 假设输出归一化到[-1,1] ) def forward(self, x): # x: (B, 3, H, W) 输入图像值域假设为[-1,1] feat self.initial_conv(x) feat_spatial self.spatial_branch(feat) feat_freq self.freq_branch(feat) # 简单的跨域交互将空间特征作为query频域特征提供信息 B, C, H, W feat_spatial.shape feat_spatial_seq feat_spatial.permute(0,2,3,1).reshape(B, H*W, C) feat_freq_seq feat_freq.permute(0,2,3,1).reshape(B, H*W, C) interacted self.cross_attn(feat_spatial_seq, feat_freq_seq) interacted interacted.reshape(B, H, W, C).permute(0,3,1,2) feat_spatial feat_spatial interacted * 0.1 # 残差连接可调系数 # 融合两个分支 fused self.fusion(feat_spatial, feat_freq) out self.final_conv(fused) return out5.6 数据准备、训练与评估模型搭建好后你需要准备水下图像增强数据集如UIEB水下图像增强基准或EUVP。数据预处理包括随机裁剪、翻转、归一化等。训练循环是标准的PyTorch流程使用组合损失函数import torch.optim as optim from torch.utils.data import DataLoader # 假设有 dataset 和 model train_loader DataLoader(dataset, batch_size4, shuffleTrue) model SimpleHeroMamba(img_size256).cuda() optimizer optim.Adam(model.parameters(), lr1e-4) criterion_l1 nn.L1Loss() # 可以添加VGG感知损失等 for epoch in range(num_epochs): for batch in train_loader: input_img, target_img batch input_img, target_img input_img.cuda(), target_img.cuda() optimizer.zero_grad() output model(input_img) loss criterion_l1(output, target_img) # 基础L1损失 # loss lambda_perceptual * perceptual_loss(output, target_img) loss.backward() optimizer.step()评估时可以使用峰值信噪比PSNR、结构相似性SSIM等客观指标以及主观视觉对比。注意以上代码是一个高度简化的概念验证实现。真实的Hero-Mamba模型会有更复杂的交互机制、更多的处理层、以及针对Mamba和FFT的精心优化如处理序列顺序、归一化等。这个实现旨在帮助你理解双域Mamba模型的数据流和核心组件。在实际研究中还需要大量的调参、结构优化和实验验证。6. 潜在挑战与优化方向理论到实践的鸿沟将Hero-Mamba这样新颖的想法从论文图表转化为稳定高效的模型中间隔着一条需要精心探索的鸿沟。在实际动手实现和训练的过程中你几乎一定会遇到以下几个核心挑战6.1 计算复杂度与内存瓶颈尽管Mamba的理论复杂度是线性的优于Transformer的平方复杂度但“双域”意味着计算量几乎翻倍。傅里叶变换FFT/IFFT本身是O(N log N)的复杂度对于高分辨率图像如4K频繁的域变换会成为显著的负担。此外Mamba层在处理超长序列H*W时其状态维度d_state和扩展因子expand的设置会直接影响内存占用。在训练初期很容易遇到GPU内存溢出的问题。优化策略分级处理与分块不要一次性处理整张高分辨率图像。可以采用图像金字塔或分块patch的方式。例如将图像下采样到较低分辨率进行粗增强再上采样后与原始图像融合进行细增强。对于Mamba序列也可以探索更高效的序列化方式如使用空间金字塔或轴向扫描。频域分支的简化并非所有层都需要进行完整的FFT。可以考虑只在网络的深层或特定阶段引入频域分支。或者使用实数变换如离散余弦变换DCT替代复数FFT以减少计算和存储开销。混合精度训练使用PyTorch的AMP自动混合精度工具将部分计算转换为FP16可以显著减少内存占用并加速训练但需注意梯度缩放以防下溢。6.2 跨域交互的设计难题如何设计有效的跨域交互机制是双域模型成败的关键。简单的特征拼接或相加可能不足以让两个分支充分沟通。而使用交叉注意力Cross-Attention虽然强大但其计算量也不容小觑尤其是在两个分支的特征图都很大的情况下。优化策略稀疏化交互不必在每个层级、每个空间位置都进行密集交互。可以设计一种门控机制或显著性检测只让模型在那些“不确定”或“信息冲突”的区域进行跨域查询。例如可以计算空间域特征的熵或方差在纹理复杂、颜色异常的区域才触发与频域分支的深度交互。轻量级交互模块用深度可分离卷积、线性投影等轻量级操作替代标准的交叉注意力。或者将交互设计在特征图的通道维度上进行而非空间维度因为通道数通常远小于空间分辨率。渐进式融合早期层的交互可以更侧重于低级特征如边缘的对齐后期层的交互则侧重于高级语义和全局结构的协调。这种分阶段的策略比一刀切的交互更有效率。6.3 训练不稳定与收敛困难双域模型加上Mamba这类新颖结构损失曲面可能非常复杂容易导致训练不稳定、收敛慢甚至发散。频域操作FFT的数值范围与空间域不同梯度流经这两个分支时可能需要不同的缩放。优化策略谨慎的初始化与归一化Mamba层参数的初始化至关重要。需要遵循原论文或相关实现的建议。在频域分支前后考虑加入特殊的归一化层如Instance Norm或Layer Norm来稳定特征的幅值。对于FFT的输出复数需要小心处理其实部/虚部的归一化。损失函数的精心配比像素损失L1、感知损失、频域损失、对抗损失等的权重需要仔细调校。一个常见的策略是课程学习训练初期以强约束的像素损失为主让模型先学会基本的颜色校正中期引入感知损失提升视觉质量后期再引入对抗损失进行微调让结果更自然。频域损失可以作为正则项权重不宜过大。学习率热身与调度使用学习率热身Warmup策略让模型在训练初期缓慢适应。采用余弦退火或带重启的调度器有助于跳出局部最优。6.4 对真实数据的泛化能力实验室数据集如UIEB上的高分数未必能直接转化为对互联网上海量、未知水域拍摄的真实照片的良好效果。真实水下图像的退化模式更加多样和不可预测可能存在模型从未见过的光照条件、浑浊度或生物遮挡。优化策略数据增广的针对性强化在训练时不仅仅使用简单的旋转、翻转。应该模拟真实的水下退化过程进行增广例如随机调整颜色通道的衰减系数模拟不同深度、添加不同浓度和颗粒大小的散射噪声、模拟非均匀光照如手电筒光斑等。使用物理模型如Jaffe-McGlamery模型生成更逼真的合成数据也是一个方向。无监督/自监督学习收集大量无配对的水下图像利用循环一致性损失CycleGAN思想、对比学习或者基于物理先验的损失函数进行训练可以极大提升模型的泛化能力。在线自适应或测试时增强在模型推理时可以对输入图像进行多种预处理如不同的白平衡试探将多个结果进行融合或者让模型包含一个轻量级的自适应模块根据输入图像快速调整参数。踩过这些坑之后我的体会是双域学习与Mamba的结合是一条充满希望但需要耐心打磨的技术路径。它的优势在于提供了一个更本质、更全面的问题分析视角。成功的诀窍不在于堆砌最复杂的模块而在于理解每个组件为何有效以及如何以最低的代价实现最必要的交互。从一个简单的、可运行的基线模型开始逐步添加复杂性并持续用消融实验验证每个设计选择的价值是探索这类前沿架构最务实的方法。
Hero-Mamba:基于状态空间模型与频域分析的水下图像增强新范式
发布时间:2026/6/22 3:06:56
1. 从“水下朦胧”到“清澈通透”为什么传统方法力不从心如果你尝试过在水下拍照或者处理过别人拍的水下照片大概率会感到一阵头疼。那些照片通常带着一层挥之不去的蓝绿色“滤镜”整体发暗、发绿对比度低细节模糊就像隔着一层浑浊的玻璃在看世界。这背后的罪魁祸首是光在水下传播时发生的复杂物理衰减和散射效应。不同波长的光红、绿、蓝在水中的衰减程度不同红光最先被吸收导致图像严重偏蓝绿同时水中悬浮的颗粒物会散射光线造成图像模糊和对比度下降。这种退化不是均匀的它随着拍摄深度、水质、光照条件剧烈变化使得水下图像增强成为一个极具挑战性的计算机视觉任务。传统的增强方法比如基于直方图均衡化HE或白平衡WB的算法往往只能做全局调整。它们假设整张图像的退化模式是一致的试图用一个简单的数学模型比如调整全局色彩通道的增益来“拉回”颜色。但水下图像的问题恰恰在于其空间异质性——近处的物体颜色可能相对正常而远处的背景则完全被蓝绿色淹没物体边缘由于散射效应变得模糊但中心区域可能还保留着一些细节。这种“一刀切”的全局方法要么矫正不足要么矫正过度很容易在增强一部分区域的同时在另一部分区域引入不自然的色彩或噪声。深度学习尤其是卷积神经网络CNN的兴起为这个问题带来了转机。通过在海量的“退化-清晰”图像对上进行训练CNN可以学习到从模糊、偏色的水下图像到清晰、色彩正常的图像之间的复杂映射关系。一时间各种基于CNN的水下图像增强模型如雨后春笋般出现。它们确实取得了比传统方法好得多的效果能够在一定程度上恢复色彩和细节。然而CNN本身也存在其固有的局限性。CNN的核心操作是卷积它通过在局部感受野内进行加权求和来提取特征。这种操作有两个特点一是局部性一个卷积核每次只能看到图像的一小块区域二是静态权重无论输入图像的内容是什么卷积核的权重在推理时是固定不变的。这就引出了水下图像增强任务中的一个核心矛盾我们需要模型既能关注全局的上下文信息比如判断整张图像的整体色偏趋势和光照条件又能对局部细节进行自适应的精细处理比如精确恢复珊瑚的纹理、鱼鳞的细节而不放大水中的悬浮颗粒噪声。CNN的局部感受野特性使其在捕捉长距离依赖关系即图像中相距很远的两个像素点之间的关联时效率不高通常需要堆叠非常深的网络层通过一次次卷积的累积来扩大感受野这无疑增加了计算复杂度和模型参数量。更重要的是其静态的卷积核对于水下图像这种退化模式复杂多变的场景显得有些“笨拙”——它用同一套固定的“滤镜”去处理图像中退化程度完全不同的区域效果自然难以达到最优。正是在这样的背景下注意力机制和状态空间模型SSM进入了研究者的视野。注意力机制尤其是Transformer中的自注意力能够显式地建模图像中所有像素对之间的关系无论它们相距多远从而完美解决了长距离依赖问题。但它的计算复杂度与图像尺寸的平方成正比处理高分辨率图像时开销巨大。而状态空间模型特别是最近大放异彩的Mamba模型提供了一种全新的思路。它借鉴了控制理论中的状态空间方程能够以线性复杂度对长序列进行建模同时具备输入依赖的动态性——模型可以根据当前输入的内容动态地决定哪些信息需要被记住保留在状态中哪些信息可以被忽略。这种特性仿佛为模型装上了一双“智能的眼睛”让它能够根据图像不同区域的具体情况动态调整处理策略。那么将Mamba这种擅长处理长序列、具备动态推理能力的模型与图像处理中经典的频域分析思想结合起来会发生什么这就是“Hero-Mamba基于Mamba的双域学习模型”想要回答的问题。它不再仅仅在像素空间我们肉眼看到的图像里“硬刚”退化问题而是同时开辟了频域这个战场试图从信号的本质层面更优雅、更高效地分离噪声、模糊与真实细节。2. 双域学习在像素与频率两个战场协同作战要理解Hero-Mamba的“双域学习”我们首先得搞清楚“域”指的是什么。在图像处理中我们最熟悉的是空间域也就是像素域。一张图像由成千上万个像素点组成每个点有它的颜色值R G B。在这个域里我们直接操作这些像素值比如调整亮度、对比度或者用卷积核进行滤波。所有基于CNN的增强方法主要都是在空间域进行操作。然而图像还有另一种极其重要的表示形式——频域。任何一个信号包括图像都可以被分解为一系列不同频率、不同振幅的正弦波的叠加。这个概念可能有点抽象我们可以用一个简单的类比一段音乐。在时间域类似于空间域我们听到的是声音强度随时间变化的波形。而在频率域通过傅里叶变换得到我们看到的是这张“乐谱”它清晰地标明了每个音符频率的强度振幅。图像也是如此高频分量通常对应着图像的边缘、纹理等细节部分变化剧烈而低频分量则对应着图像中平缓变化的区域比如大片的天空、水面或墙壁。水下图像的退化在频域里会呈现出非常特征性的模式。由于光的散射和吸收图像的高频细节信息会严重衰减这表现为边缘模糊、纹理消失。同时水介质和悬浮颗粒会引入一种特定的噪声这种噪声往往在频域中具有特定的分布。此外由于颜色通道的不均衡衰减不同颜色通道R G B在频域的能量分布也会发生畸变。传统方法有时也会用到频域比如小波变换但通常是将图像变换到频域进行一些滤波操作如削弱某些频率、增强另一些频率然后再变换回空间域。这种流程是串行的、分离的。而Hero-Mamba提出的“双域学习”是并行且深度融合的。它的核心思想是为什么不构建一个模型让它同时从空间域和频域两个视角来观察和理解一张水下图像呢两个视角获取的信息是互补的。空间域分支主要负责处理图像的局部结构、颜色和光照。它更擅长于理解“这是什么物体”、“它的颜色应该是什么”。例如判断一片区域是红色的珊瑚还是绿色的海藻并对其进行颜色校正。频域分支主要负责分析图像的全局结构和纹理细节。它更擅长于判断“图像的清晰度如何”、“哪些频率的信息丢失了”、“噪声主要分布在哪些频段”。例如识别出由于散射导致的高频缺失并尝试从低频信息中或通过模型先验知识进行重建。Hero-Mamba模型会同时将输入的水下图像送入两个并行的处理分支。空间域分支直接在像素层面上操作而频域分支则会先将图像通过快速傅里叶变换FFT转换到频域。关键在于这两个分支并非独立工作它们中间设计了密集的跨域交互机制。比如空间域分支在恢复某个物体颜色时可以询问频域分支“这个区域的边缘高频信号强度如何是否可信” 频域分支在试图重建某个高频成分时也可以参考空间域分支的信息“根据颜色和上下文这里应该是一条鱼的鳍那么它的边缘大概率是这种形状。” 通过这种持续的、双向的信息交换模型能够做出更全局、更一致的决策。这种双域架构的优势是显而易见的。首先它提供了更丰富的特征表示。有些在空间域难以区分的退化模式比如不同类型的模糊叠加在频域可能一目了然。其次它有助于更精准地分离信号与噪声。噪声和真实细节在空间域可能纠缠在一起但在频域它们可能占据不同的频带更容易被区分和处理。最后它为模型提供了更强的先验知识。自然图像在频域通常具有某些统计规律如能量随频率升高而衰减这些规律可以作为指导模型重建的强有力约束。3. Mamba登场为双域模型注入“动态选择性”灵魂双域架构搭建了一个优秀的作战平台但每个分支内部需要强大的“士兵”来处理信息。这就是Mamba模型大显身手的地方。为什么是Mamba而不是更流行的Vision TransformerViT或者更经典的CNN让我们回顾一下前面提到的挑战处理高分辨率图像的长距离依赖以及应对水下退化模式的空间异质性。ViT通过自注意力机制解决了长距离依赖问题但其计算量随着图像分块数量的平方增长。对于需要精细处理细节的图像增强任务我们往往需要将图像切分成很多小块例如16x16像素这使得计算开销变得难以承受。虽然有一些线性注意力变体试图降低复杂度但它们通常在性能上有所妥协。CNN计算效率高但感受野有限且权重静态。堆叠很深的CNN或使用空洞卷积可以扩大感受野但这是一种“被动”的、固定模式的感受野扩大无法根据图像内容动态调整关注范围。Mamba则提供了一种截然不同的范式。它源于状态空间序列模型SSM其核心是一个可以随时间在图像中就是沿空间维度如按行扫描更新状态的系统。这个系统的关键创新在于选择性扫描机制。简单来说当Mamba处理一个序列比如图像的一行像素时它不是对所有的历史信息都一视同仁地记住而是会根据当前输入的内容动态地决定哪些信息需要被压缩进一个紧凑的、持续更新的“状态”中例如当前图像的整体色调、光照条件。哪些过往的信息可以被忽略或遗忘例如已经处理过的、与当前区域无关的背景噪声。如何将当前输入与记忆中的状态进行融合以产生输出。这种“输入依赖的动态性”是Mamba的灵魂也是它特别适合水下图像增强的原因。想象一下模型正在处理一张水下照片当它扫描到一片颜色严重偏蓝的远景区时Mamba机制可以动态地强化“颜色校正”这个处理模式并记住“这片区域需要大幅提升红色通道”。当它扫描到一个前景物体如一条鱼的边缘时机制可以切换到“细节增强”模式专注于从状态中提取有用的上下文信息来锐化边缘同时忽略来自浑浊背景的干扰信息。当它处理一片纹理复杂的珊瑚区时机制可以动态调整专注于捕捉和重建中高频的纹理信息。这种能力就好比一个经验丰富的修图师在处理照片的不同部分时会动态地选择不同的工具和参数用曲线工具整体调色用局部画笔修复细节用降噪工具处理平滑区域。Mamba让模型具备了这种“因地制宜”的智能。在Hero-Mamba的具体实现中Mamba模块被深度集成到了双域分支中。通常图像会被重塑成一个长序列例如将空间维度展平然后送入Mamba块进行处理。Mamba块内部包含了上述的选择性扫描状态空间S6层以及必要的归一化层和前馈网络。由于Mamba的线性复杂度它可以高效地处理这个长序列捕获整个图像范围内的长距离依赖关系。更重要的是Mamba的这种动态选择性与双域学习形成了完美的互补。在空间域分支Mamba可以动态地整合全局的颜色和结构上下文指导局部区域的增强。在频域分支Mamba可以沿着频率维度扫描动态地判断哪些频率成分需要被增强、哪些需要被抑制可能是噪声并考虑不同频率分量之间的关联。两个分支的Mamba模块通过跨域交互连接可以交换它们动态选择出的“重要信息”从而实现全局协同的增强决策。4. Hero-Mamba模型架构拆解从输入到输出的增强流水线理解了双域学习和Mamba的核心思想后我们现在可以深入Hero-Mamba模型的技术细节看看它是如何将这些理念转化为一个可工作的、高效的神经网络架构的。请注意以下架构描述是基于该研究方向常见的设计模式和对“双域学习Mamba”这一组合的合理推演旨在揭示其核心工作原理。4.1 整体流程与输入预处理模型的输入是一张退化的水下图像 I ∈ R^(H×W×3)。首先会经过一个浅层的特征提取层通常由几个卷积层组成将输入图像映射到一个更高维的特征空间 F_0 ∈ R^(H×W×C)其中C是通道数。这一步的目的是初步提取一些低级的图像特征如边缘和颜色信息为后续的双域深度处理做准备。接下来特征 F_0 被复制成两份分别送入空间域分支和频域分支。4.2 空间域分支像素世界的修复师空间域分支直接在图像的二维网格结构上操作。它的主干通常由多个空间Mamba块堆叠而成。每个空间Mamba块的核心步骤包括序列化将二维特征图 F_spatial ∈ R^(H×W×C) 重塑为一个二维序列。常见的方式是按行扫描得到序列 X ∈ R^(L×C)其中 L H × W。Mamba处理将序列 X 送入Mamba层S6层。Mamba层会沿着序列长度 L 进行选择性扫描。对于图像而言这相当于让模型以一种特定的、内容感知的顺序通常是行优先来“阅读”整张图像的所有位置并动态地建立远距离像素之间的联系。例如当处理右下角一个暗点时Mamba的状态中可能已经记忆了图像左上角有一个明亮光源的上下文信息。反序列化将处理后的输出序列重新 reshape 回二维特征图 F_spatial‘ ∈ R^(H×W×C)。局部增强在Mamba块前后通常会配合使用一些轻量级的卷积层或前馈网络用于处理Mamba可能忽略的极端局部细节并实现特征的进一步非线性变换。多个这样的块级联使得空间域分支能够从局部到全局逐步理解和修复图像的色彩、光照和结构。4.3 频域分支频率世界的分析家频域分支的工作流程略有不同傅里叶变换对输入的特征 F_0或经过初步处理的特征进行快速傅里叶变换FFT将其从空间域转换到频域得到频域表示 F_freq ∈ R^(H×W×C)。注意这里的C个通道每个都有独立的实部和虚部或振幅和相位通常会被分开或组合处理。频域Mamba处理频域特征 F_freq 同样需要被序列化后送入频域Mamba块。这里的序列化方式可能有多种。一种有效的方式是将频率坐标u v和通道 c 一起视为序列的维度。Mamba层会沿着频率维度进行扫描学习不同频率分量之间的依赖关系。例如它可能学习到“如果某个低频分量很强那么与之谐相关的高频分量也应该相应增强”这样的规律。更重要的是Mamba的选择性机制可以让它动态地关注那些对图像清晰度至关重要的关键频带通常是中高频而抑制那些可能被噪声污染的频带。逆傅里叶变换经过数个频域Mamba块处理后得到的增强后的频域特征需要通过逆傅里叶变换IFFT转换回空间域与空间域分支的特征进行对齐和融合。4.4 跨域交互融合双剑合璧的关键两个分支并非各自为政。Hero-Mamba的核心创新之一就在于其密集的跨域交互融合模块。这些模块被插入在分支的多个层级例如在每个Mamba块之后。交互方式通常采用交叉注意力Cross-Attention或简单的特征拼接/相加后接卷积的方式。例如一个“空间问频域”的交互模块会以空间域特征作为Query以频域特征作为Key和Value计算注意力权重。这样空间域在处理某个区域时可以直接从频域特征中查询“这个区域的频谱能量分布是否健康高频是否缺失”从而指导其增强力度。融合时机除了中间层的交互在网络的最后两个分支输出的特征图会通过一个融合模块进行最终整合。这个模块需要谨慎设计以权衡空间域的颜色校正能力和频域域的细节恢复能力。常见的做法是使用一个可学习的权重图通过1x1卷积和Sigmoid函数生成来自适应地融合两个分支的特征在纹理丰富的区域给予频域分支更高的权重在颜色失真严重的平滑区域则更依赖空间域分支。4.5 输出与损失函数融合后的特征经过一个或多个重建卷积层最终输出增强后的图像 I_enhanced ∈ R^(H×W×3)。整个模型的训练需要大量的“退化-清晰”图像对。常用的损失函数是多任务组合像素级损失如L1或L2损失确保输出图像与清晰目标在像素值上接近。感知损失使用预训练网络如VGG提取的特征进行对比使增强图像在高级语义特征上与目标一致有助于保持内容真实性。频域损失直接计算输出图像与目标图像在频域如傅里叶振幅谱的差异强制模型在频率层面进行优化。对抗损失可选引入判别器让增强图像看起来更接近自然清晰的图像分布有助于提升视觉真实感。通过联合优化这些损失Hero-Mamba被训练成一位既懂色彩构图空间域又懂信号本质频域且能动态调整策略Mamba的“全能修图师”。5. 实战指南从零开始尝试Hero-Mamba思路虽然原生的Hero-Mamba模型可能尚未有官方开源代码但其核心思想——结合双域学习和选择性状态空间模型——为我们提供了一个非常强大的水下图像增强框架。我们可以基于现有的深度学习工具尝试搭建一个简化版的实现来验证这一思路的有效性。这里我将以PyTorch为例勾勒出关键步骤和代码逻辑。5.1 环境搭建与依赖安装首先你需要一个配置了GPU的Python环境。推荐使用Conda进行环境管理。# 创建并激活一个虚拟环境 conda create -n underwater-enhance python3.9 conda activate underwater-enhance # 安装PyTorch请根据你的CUDA版本访问PyTorch官网获取对应命令 # 例如对于CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装Mamba相关库。目前Mamba的官方实现是mamba-ssm pip install mamba-ssm # 安装其他必要库 pip install opencv-python pillow matplotlib scikit-image numpy tqdm5.2 构建核心模块选择性状态空间层我们需要实现Mamba的核心即选择性状态空间S6层。这里我们直接使用mamba-ssm库中提供的Mamba模块它已经高效地实现了选择性扫描机制。import torch import torch.nn as nn from mamba_ssm import Mamba class SelectiveSSMBlock(nn.Module): 一个简化的Mamba块用于处理序列数据。 def __init__(self, dim, d_state16, d_conv4, expand2): super().__init__() self.norm nn.LayerNorm(dim) # Mamba层是核心 self.mamba Mamba( d_modeldim, # 输入维度 d_stated_state, # 状态维度 d_convd_conv, # 卷积核大小 expandexpand, # 扩展因子 ) self.ffn nn.Sequential( nn.Linear(dim, dim * expand), nn.GELU(), nn.Linear(dim * expand, dim), ) self.ffn_norm nn.LayerNorm(dim) def forward(self, x): # x shape: (batch, length, dim) residual x x self.norm(x) x self.mamba(x) # Mamba处理 x residual x # 残差连接 residual x x self.ffn_norm(x) x self.ffn(x) x residual x return x5.3 构建双域处理分支接下来我们构建空间域分支和频域分支。这里的关键是将二维图像特征转换为序列以及进行傅里叶变换。import torch.fft class SpatialDomainBranch(nn.Module): 空间域分支使用Mamba处理空间序列。 def __init__(self, in_channels, hidden_dim, num_blocks, img_size): super().__init__() self.proj nn.Conv2d(in_channels, hidden_dim, kernel_size3, padding1) self.blocks nn.ModuleList([ SelectiveSSMBlock(dimhidden_dim) for _ in range(num_blocks) ]) self.img_size img_size self.hidden_dim hidden_dim def forward(self, x): # x: (B, C, H, W) x self.proj(x) B, C, H, W x.shape # 序列化将空间维度展平 x x.permute(0, 2, 3, 1).reshape(B, H*W, C) # (B, L, C) for block in self.blocks: x block(x) # 反序列化恢复空间结构 x x.reshape(B, H, W, C).permute(0, 3, 1, 2) return x class FrequencyDomainBranch(nn.Module): 频域分支将特征转换到频域用Mamba处理频率关系再转换回来。 def __init__(self, in_channels, hidden_dim, num_blocks): super().__init__() self.proj nn.Conv2d(in_channels, hidden_dim, kernel_size1) self.blocks nn.ModuleList([ SelectiveSSMBlock(dimhidden_dim*2) for _ in range(num_blocks) # *2 for real and imag ]) self.hidden_dim hidden_dim def forward(self, x): # x: (B, C, H, W) x self.proj(x) # 傅里叶变换得到实部和虚部 x_freq torch.fft.rfft2(x, normortho) # (B, C, H, W//21) complex real x_freq.real imag x_freq.imag # 拼接实部和虚部作为特征 x_combined torch.cat([real, imag], dim1) # (B, C*2, H, W//21) B, C2, H, W_half x_combined.shape # 序列化这里我们将频率坐标(u,v)和通道展平 # 一种简单方式将特征视为 (H, W_half) 个 C2 维的向量 x_seq x_combined.permute(0, 2, 3, 1).reshape(B, H*W_half, C2) for block in self.blocks: x_seq block(x_seq) x_combined x_seq.reshape(B, H, W_half, C2).permute(0, 3, 1, 2) # 分离实部虚部 real, imag torch.chunk(x_combined, 2, dim1) # 逆傅里叶变换 x_freq_enhanced torch.complex(real, imag) x_spatial torch.fft.irfft2(x_freq_enhanced, sx.shape[-2:], normortho) return x_spatial5.4 实现跨域交互与融合我们实现一个简单的跨域注意力交互模块和一个自适应融合模块。class CrossDomainAttention(nn.Module): 一个简单的跨域交叉注意力模块。 def __init__(self, dim): super().__init__() self.to_q nn.Linear(dim, dim) self.to_kv nn.Linear(dim, dim*2) self.scale dim ** -0.5 def forward(self, x_domain_a, x_domain_b): # x_domain_a, x_domain_b: (B, L, C) q self.to_q(x_domain_a) k, v self.to_kv(x_domain_b).chunk(2, dim-1) attn (q k.transpose(-2, -1)) * self.scale attn attn.softmax(dim-1) out attn v return out # 交互后的特征可以加回到原分支 class AdaptiveFusion(nn.Module): 自适应融合两个分支的特征。 def __init__(self, channels): super().__init__() self.weight_gen nn.Sequential( nn.Conv2d(channels*2, channels, 3, padding1), nn.ReLU(), nn.Conv2d(channels, 2, 1), # 输出两个通道的权重图 nn.Softmax(dim1) # 在通道维做softmax保证两个权重和为1 ) def forward(self, feat_spatial, feat_freq): combined torch.cat([feat_spatial, feat_freq], dim1) weights self.weight_gen(combined) # (B, 2, H, W) w_spatial, w_freq weights.chunk(2, dim1) fused w_spatial * feat_spatial w_freq * feat_freq return fused5.5 组装完整的Hero-Mamba简化模型现在我们将所有组件组装起来。class SimpleHeroMamba(nn.Module): 一个简化版的Hero-Mamba模型。 def __init__(self, in_ch3, base_ch32, num_blocks4, img_size256): super().__init__() self.initial_conv nn.Conv2d(in_ch, base_ch, 3, padding1) self.spatial_branch SpatialDomainBranch(base_ch, base_ch, num_blocks, img_size) self.freq_branch FrequencyDomainBranch(base_ch, base_ch, num_blocks) # 假设在中间层进行一次交互这里简化实际可有多层 self.cross_attn CrossDomainAttention(base_ch) self.fusion AdaptiveFusion(base_ch) self.final_conv nn.Sequential( nn.Conv2d(base_ch, base_ch, 3, padding1), nn.ReLU(), nn.Conv2d(base_ch, 3, 3, padding1), nn.Tanh() # 假设输出归一化到[-1,1] ) def forward(self, x): # x: (B, 3, H, W) 输入图像值域假设为[-1,1] feat self.initial_conv(x) feat_spatial self.spatial_branch(feat) feat_freq self.freq_branch(feat) # 简单的跨域交互将空间特征作为query频域特征提供信息 B, C, H, W feat_spatial.shape feat_spatial_seq feat_spatial.permute(0,2,3,1).reshape(B, H*W, C) feat_freq_seq feat_freq.permute(0,2,3,1).reshape(B, H*W, C) interacted self.cross_attn(feat_spatial_seq, feat_freq_seq) interacted interacted.reshape(B, H, W, C).permute(0,3,1,2) feat_spatial feat_spatial interacted * 0.1 # 残差连接可调系数 # 融合两个分支 fused self.fusion(feat_spatial, feat_freq) out self.final_conv(fused) return out5.6 数据准备、训练与评估模型搭建好后你需要准备水下图像增强数据集如UIEB水下图像增强基准或EUVP。数据预处理包括随机裁剪、翻转、归一化等。训练循环是标准的PyTorch流程使用组合损失函数import torch.optim as optim from torch.utils.data import DataLoader # 假设有 dataset 和 model train_loader DataLoader(dataset, batch_size4, shuffleTrue) model SimpleHeroMamba(img_size256).cuda() optimizer optim.Adam(model.parameters(), lr1e-4) criterion_l1 nn.L1Loss() # 可以添加VGG感知损失等 for epoch in range(num_epochs): for batch in train_loader: input_img, target_img batch input_img, target_img input_img.cuda(), target_img.cuda() optimizer.zero_grad() output model(input_img) loss criterion_l1(output, target_img) # 基础L1损失 # loss lambda_perceptual * perceptual_loss(output, target_img) loss.backward() optimizer.step()评估时可以使用峰值信噪比PSNR、结构相似性SSIM等客观指标以及主观视觉对比。注意以上代码是一个高度简化的概念验证实现。真实的Hero-Mamba模型会有更复杂的交互机制、更多的处理层、以及针对Mamba和FFT的精心优化如处理序列顺序、归一化等。这个实现旨在帮助你理解双域Mamba模型的数据流和核心组件。在实际研究中还需要大量的调参、结构优化和实验验证。6. 潜在挑战与优化方向理论到实践的鸿沟将Hero-Mamba这样新颖的想法从论文图表转化为稳定高效的模型中间隔着一条需要精心探索的鸿沟。在实际动手实现和训练的过程中你几乎一定会遇到以下几个核心挑战6.1 计算复杂度与内存瓶颈尽管Mamba的理论复杂度是线性的优于Transformer的平方复杂度但“双域”意味着计算量几乎翻倍。傅里叶变换FFT/IFFT本身是O(N log N)的复杂度对于高分辨率图像如4K频繁的域变换会成为显著的负担。此外Mamba层在处理超长序列H*W时其状态维度d_state和扩展因子expand的设置会直接影响内存占用。在训练初期很容易遇到GPU内存溢出的问题。优化策略分级处理与分块不要一次性处理整张高分辨率图像。可以采用图像金字塔或分块patch的方式。例如将图像下采样到较低分辨率进行粗增强再上采样后与原始图像融合进行细增强。对于Mamba序列也可以探索更高效的序列化方式如使用空间金字塔或轴向扫描。频域分支的简化并非所有层都需要进行完整的FFT。可以考虑只在网络的深层或特定阶段引入频域分支。或者使用实数变换如离散余弦变换DCT替代复数FFT以减少计算和存储开销。混合精度训练使用PyTorch的AMP自动混合精度工具将部分计算转换为FP16可以显著减少内存占用并加速训练但需注意梯度缩放以防下溢。6.2 跨域交互的设计难题如何设计有效的跨域交互机制是双域模型成败的关键。简单的特征拼接或相加可能不足以让两个分支充分沟通。而使用交叉注意力Cross-Attention虽然强大但其计算量也不容小觑尤其是在两个分支的特征图都很大的情况下。优化策略稀疏化交互不必在每个层级、每个空间位置都进行密集交互。可以设计一种门控机制或显著性检测只让模型在那些“不确定”或“信息冲突”的区域进行跨域查询。例如可以计算空间域特征的熵或方差在纹理复杂、颜色异常的区域才触发与频域分支的深度交互。轻量级交互模块用深度可分离卷积、线性投影等轻量级操作替代标准的交叉注意力。或者将交互设计在特征图的通道维度上进行而非空间维度因为通道数通常远小于空间分辨率。渐进式融合早期层的交互可以更侧重于低级特征如边缘的对齐后期层的交互则侧重于高级语义和全局结构的协调。这种分阶段的策略比一刀切的交互更有效率。6.3 训练不稳定与收敛困难双域模型加上Mamba这类新颖结构损失曲面可能非常复杂容易导致训练不稳定、收敛慢甚至发散。频域操作FFT的数值范围与空间域不同梯度流经这两个分支时可能需要不同的缩放。优化策略谨慎的初始化与归一化Mamba层参数的初始化至关重要。需要遵循原论文或相关实现的建议。在频域分支前后考虑加入特殊的归一化层如Instance Norm或Layer Norm来稳定特征的幅值。对于FFT的输出复数需要小心处理其实部/虚部的归一化。损失函数的精心配比像素损失L1、感知损失、频域损失、对抗损失等的权重需要仔细调校。一个常见的策略是课程学习训练初期以强约束的像素损失为主让模型先学会基本的颜色校正中期引入感知损失提升视觉质量后期再引入对抗损失进行微调让结果更自然。频域损失可以作为正则项权重不宜过大。学习率热身与调度使用学习率热身Warmup策略让模型在训练初期缓慢适应。采用余弦退火或带重启的调度器有助于跳出局部最优。6.4 对真实数据的泛化能力实验室数据集如UIEB上的高分数未必能直接转化为对互联网上海量、未知水域拍摄的真实照片的良好效果。真实水下图像的退化模式更加多样和不可预测可能存在模型从未见过的光照条件、浑浊度或生物遮挡。优化策略数据增广的针对性强化在训练时不仅仅使用简单的旋转、翻转。应该模拟真实的水下退化过程进行增广例如随机调整颜色通道的衰减系数模拟不同深度、添加不同浓度和颗粒大小的散射噪声、模拟非均匀光照如手电筒光斑等。使用物理模型如Jaffe-McGlamery模型生成更逼真的合成数据也是一个方向。无监督/自监督学习收集大量无配对的水下图像利用循环一致性损失CycleGAN思想、对比学习或者基于物理先验的损失函数进行训练可以极大提升模型的泛化能力。在线自适应或测试时增强在模型推理时可以对输入图像进行多种预处理如不同的白平衡试探将多个结果进行融合或者让模型包含一个轻量级的自适应模块根据输入图像快速调整参数。踩过这些坑之后我的体会是双域学习与Mamba的结合是一条充满希望但需要耐心打磨的技术路径。它的优势在于提供了一个更本质、更全面的问题分析视角。成功的诀窍不在于堆砌最复杂的模块而在于理解每个组件为何有效以及如何以最低的代价实现最必要的交互。从一个简单的、可运行的基线模型开始逐步添加复杂性并持续用消融实验验证每个设计选择的价值是探索这类前沿架构最务实的方法。