基于自监督学习的图像去雨算法:Rain Removal via Contrastive Learning (RRCL)
题目描述
图像去雨旨在从单张有雨图像中恢复出清晰的背景内容,是一个具有挑战性的图像恢复任务。传统的监督学习方法依赖于大量“有雨-无雨”图像对进行训练,但这些数据对难以大规模、高质量地获取。为了克服这一限制,研究者提出了基于自监督对比学习的去雨方法。RRCL便是其中一种代表性算法,它不依赖成对的清晰图像作为监督信号,而是通过构建同一有雨图像的不同“视角”,并利用对比学习机制,让模型学会区分雨纹特征和背景内容特征,从而在潜在空间中将它们分离,最终实现去雨。
解题过程循序渐进讲解
第一步:理解核心挑战与自监督学习动机
- 监督学习的瓶颈:理想的监督去雨模型需要输入一张有雨图像,并输出对应的、同一场景下无雨的真实图像。这要求数据集中每一张有雨图都必须有像素级对齐的无雨“真值”(GT)。这种数据获取成本极高(通常需要人工合成或特殊设备捕捉),且合成的雨纹可能与真实雨纹存在分布差异。
- 自监督学习的契机:自监督学习的关键思想是从数据本身构造监督信号。对于一张有雨图像,虽然我们没有其对应的无雨真值,但我们可以合理假设:雨纹是附着在清晰背景上的退化成分,二者在特征空间中应是可分离的。RRCL的目标就是设计一个学习框架,让模型在没有明确真值指导的情况下,自动学会这种分离。
第二步:构建自监督信号——生成正负样本对
RRCL的核心是对比学习。对比学习通过拉近相似样本(正样本对)的特征表示,并推远不相似样本(负样本对)的特征表示来学习。对于去雨任务:
- 锚点样本(Anchor):原始的有雨图像 \(I_{rainy}\)。
- 正样本(Positive):从 \(I_{rainy}\) 通过轻度、内容保持的数据增强(例如,轻微的随机裁剪、颜色抖动、高斯模糊)得到的图像 \(I_{rainy}^{pos}\)。这个操作确保 \(I_{rainy}\) 和 \(I_{rainy}^{pos}\) 共享完全相同的背景内容和雨纹模式,只是外观上有微小差异。它们在特征空间中应该非常接近。
- 负样本(Negative):从同一批次(Batch)内其他有雨图像中随机选取的图像 \(I_{rainy}^{neg}\)。这些图像与锚点图像具有不同的背景内容和不同的雨纹模式。它们在特征空间中应该被推远。
通过这种方式,我们构造了正负样本对,但没有使用任何无雨图像。
第三步:网络结构与特征提取
RRCL使用一个编码器-解码器架构(例如,类似U-Net的结构)作为主干网络。
- 编码器(Encoder):将输入图像 \(I\) 映射到一个低维的特征表示(特征图) \(F = E(I)\)。这个特征图 \(F\) 理论上编码了图像中的混合信息,包括背景结构、纹理和雨纹。
- 对比学习仅在编码器输出的特征上进行。我们为锚点、正样本、负样本分别提取特征:
- 锚点特征:\(F_a = E(I_{rainy})\)
- 正样本特征:\(F_p = E(I_{rainy}^{pos})\)
- 负样本特征:\(F_n = E(I_{rainy}^{neg})\)(可能来自批次中的多个样本)
- 解码器(Decoder):在训练后期或推理阶段,编码器提取的特征 \(F_a\) 会被送入解码器 \(D\),以重建出去雨后的图像 \(I_{derain} = D(F_a)\)。解码器的训练依赖于另一个自监督重构损失(见第四步)。
第四步:设计对比损失函数
对比损失的目标是使锚点特征与正样本特征之间的相似度远高于与负样本特征之间的相似度。
- 特征投影头:为了优化对比学习,通常会在编码器后接一个小的多层感知机(MLP)投影头 \(g(\cdot)\),将特征 \(F\) 映射到一个更适合计算对比损失的投影空间 \(z = g(F)\)。
- 计算相似度:使用余弦相似度计算向量间的相似度:\(sim(u, v) = u^T v / (||u|| \cdot ||v||)\)。
- InfoNCE损失:这是对比学习中最常用的损失函数。对于锚点特征 \(z_a\):
\[ \mathcal{L}_{contrast} = -\log \frac{\exp(sim(z_a, z_p) / \tau)}{\exp(sim(z_a, z_p) / \tau) + \sum_{n} \exp(sim(z_a, z_n) / \tau)} \]
* $ \tau $ 是一个温度超参数,用于调节对困难负样本的关注程度。
* 这个损失函数的含义是:最大化 $ z_a $ 与 $ z_p $ 的相似度(分子),同时最小化 $ z_a $ 与所有负样本 $ z_n $ 的相似度之和(分母)。
* 通过最小化 $ \mathcal{L}_{contrast} $,编码器被迫学习到一种表示:能够**抵抗轻微增强带来的扰动**(因此正样本对相似),但能**敏感地区分不同图像的内容**(因此与负样本不相似)。这隐式地鼓励模型将不同图像中**变化的雨纹**和**不变的底层图像结构**分离开,因为雨纹模式在不同图像间差异很大,而清晰图像的结构信息(如边缘、形状)在不同图像中应是可区分的。
第五步:结合重构损失进行联合训练
仅靠对比损失,模型学会了特征的判别性,但还没有明确学会如何输出清晰图像。因此,需要引入一个图像重构损失来指导解码器。
- 自监督重构损失:由于没有真实无雨图像,RRCL采用一种巧妙的退化一致性约束。它假设,如果模型输出了一个好的去雨结果 \(I_{derain}\),那么当对这个结果人工合成雨纹(使用一个已知的、简单的雨纹合成模型,如加性雨层模型)后,应该能够重构回输入的有雨图像 \(I_{rainy}\)。
- 具体操作:将解码器输出的 \(I_{derain}\) 输入一个固定的、可微的雨纹合成函数 \(A(\cdot)\)(例如,\(A(I) = I + R\),其中 \(R\) 是随机生成的雨层),得到重合成的有雨图像 \(\tilde{I}_{rainy} = A(I_{derain})\)。
- 重构损失为:\(\mathcal{L}_{recon} = || I_{rainy} - \tilde{I}_{rainy} ||_1\)。这里使用L1损失来促进图像清晰度。
- 物理意义:这个损失约束了解码器的输出必须满足一个物理先验——当前的输入有雨图像可以通过“清晰背景加雨纹”的模型得到。这引导解码器从编码器提取的特征中“剥离”出雨纹,留下清晰的背景。
- 总损失函数:模型的总损失是对比损失和重构损失的加权和:
\[ \mathcal{L}_{total} = \lambda_c \mathcal{L}_{contrast} + \lambda_r \mathcal{L}_{recon} \]
其中 $ \lambda_c $ 和 $ \lambda_r $ 是平衡两个任务的超参数。
第六步:训练与推理流程总结
- 训练阶段:
a. 输入一个批次的有雨图像。
b. 为每张图像生成其正样本(通过数据增强)。
c. 将锚点图像、正样本图像以及批次中其他图像(作为负样本)输入编码器和投影头,计算对比损失 \(\mathcal{L}_{contrast}\)。
d. 将锚点图像输入编码器-解码器,得到去雨结果 \(I_{derain}\)。
e. 对 \(I_{derain}\) 应用合成雨函数 \(A(\cdot)\),计算重构损失 \(\mathcal{L}_{recon}\)。
f. 反向传播总损失 \(\mathcal{L}_{total}\),更新编码器和解码器的参数(投影头仅在对比学习中使用,其梯度会回传到编码器)。 - 推理阶段:
a. 给定一张新的有雨图像,直接通过训练好的编码器-解码器网络前向传播。
b. 解码器的输出即为最终的去雨结果。不再需要对比学习分支和雨纹合成模块。
核心思想提炼:RRCL通过对比学习迫使编码器学习到对背景内容敏感、对雨纹扰动鲁棒的特征表示;同时通过自监督重构损失(退化一致性)引导解码器利用这种特征分离出清晰的背景。两者结合,使得模型在无需成对数据的情况下,学会了有效的去雨能力。