【LLIE专题】基于 CLIP 的无监督背光增强算法
CLIP-LIT: Iterative Prompt Learning for Unsupervised Backlit Image Enhancement(2023,ICCV)
- 专题介绍
- 一、研究背景
- 二、CLIP-LIT方法
- 三、实验结果
- 四、总结
- 五、思考
本文将对 CLIP-LIT: Iterative Prompt Learning for Unsupervised Backlit Image Enhancement,这篇背光增强算法进行讲解。参考资料如下:
[1] CLIP-LIT 文章
[2] CLIP-LIT 代码
专题介绍
在低光照环境下,传统成像设备往往因画面昏暗、细节丢失而受限。LLIE(低照度暗光增强)技术应运而生,它通过提升图像亮度、对比度,减少噪点并恢复色彩细节,让暗夜变得清晰可见。
LLIE技术从传统方法如直方图均衡化、Retinex模型等起步,近年来借助深度学习,尤其是卷积神经网络(CNN),GAN模型,扩散模型实现了质的飞跃。这些算法能自动学习图像特征,精准处理低光照图像,效果显著优于传统技术。
本专题将聚焦LLIE技术的核心原理、应用案例及最新进展,让我们一起见证LLIE如何点亮暗夜,开启视觉新视界!欢迎一起探讨交流!
系列文章如下
【1】ZeroDCE
【2】HVI
一、研究背景
在计算机视觉领域,逆光图像增强技术一直以来都是研究热点与难点。逆光拍摄所得图像通常存在细节丢失、色彩失真等问题,这不仅影响视觉体验,也对后续图像处理与分析算法的准确性造成干扰。传统手动修正方法费时费力,难以平衡保留正常光照区域与提升欠曝光区域的细节。而现有自动光线增强方法,无论是监督学习还是无监督学习,都存在局限性,或因过度增强导致正常光照区域过曝,或因增强不足使欠光区域依旧昏暗,且对复杂逆光场景的泛化能力欠佳。
(CLIP-LIT)该方法开创性地挖掘对比语言 - 图像预训练(CLIP)模型在像素级图像增强任务中的潜力,巧妙地借助 CLIP 模型丰富的视觉 - 语言先验知识,实现无需成对训练数据的逆光图像高质量增强。
二、CLIP-LIT方法
CLIP 模型凭借其在大规模图像 - 文本数据上学到的知识,在零样本分类等任务中表现出色,具有强大的泛化能力。CLIP-LIT 方法正是受到启发,将 CLIP 模型引入低层次视觉任务,即逆光图像增强。其核心在于设计一个迭代提示学习框架,分为两个主要阶段。
阶段一:
第一阶段是提示词初始化与初始增强网络训练。对逆光图像Backlit Images( I b I_b Ib)和正常光照图像Well-lit Images( I w I_w Iw),随机初始化正提示词Positive( T p T_p Tp)和负提示词Negative( T n T_n Tn),分别代表正常光照和逆光。将这些图像输入 CLIP 的图像编码器,同时将提示词输入文本编码器,利用文本 - 图像相似性约束,在 CLIP 潜在空间中学习初始提示词(提示词是可以学习的,而CLIP网络在训练时候参数是固定的),使得学习到的提示词能够最大化区分逆光与正常光照图像。基于初始提示词,构建增强网络,采用简单 Unet 作为基础模型,估计光照图并生成增强结果。训练时,综合运用 CLIP 增强损失(衡量增强结果与提示词在 CLIP 空间相似性)和自身份损失(鼓励增强结果在内容结构上与原图相似),先进行自我重建训练(即开始先只用身份损失),再联合两种损失共同训练,逐步优化网络参数。
下面我们详细介绍下提示词初始化这个流程:
-
输入图像和提示的编码
首先,将背光图像 I b I_b Ib和正常光照图像 I w I_w Iw 输入到预训练的 CLIP 的图像编码器 Φ i m a g e \varPhi_{image} Φimage中,得到它们的潜在代码。同时,随机初始化一对正负提示 T p T_p Tp 和 T n T_n Tn,并将它们输入到 CLIP 的文本编码器 Φ t e x t \varPhi_{text} Φtext中,提取它们的潜在代码。 -
基于文本-图像相似性的提示学习
在 CLIP 的嵌入空间中,通过最大化正负样本之间的距离来学习初始提示对。具体来说,使用二元交叉熵损失函数来训练提示对,使得正样本(正常光照图像)与正提示之间的相似性更高,而负样本(背光图像)与负提示之间的相似性更高。损失函数定义为:
L i n i t i a l = − y log ( y ^ ) − ( 1 − y ) log ( 1 − y ^ ) {L}_{initial} = -y\log(\hat{y})-(1 - y)\log(1 - \hat{y}) Linitial=−ylog(y^)−(1−y)log(1−y^)
其中, y ^ \hat{y} y^ 是通过以下公式计算的:
y ^ = e cos ( Φ image ( I ) , Φ text ( T p ) ) ∑ i ∈ { n , p } e cos ( Φ image ( I ) , Φ text ( T i ) ) \hat{y} = \frac{e^{\cos(\Phi_{\text{image}}(I), \Phi_{\text{text}}(T_p))}}{\sum_{i \in \{n, p\}} e^{\cos(\Phi_{\text{image}}(I), \Phi_{\text{text}}(T_i))}} y^=∑i∈{n,p}ecos(Φimage(I),Φtext(Ti))ecos(Φimage(I),Φtext(Tp))I I I 表示当前图像, y y y 是图像的标签(0 表示负样本,1 表示正样本)。
-
优化目标
通过上述损失函数的优化,初始提示对能够更好地在 CLIP 的嵌入空间中区分背光图像和正常光照图像。这种基于文本-图像相似性的提示初始化方法为后续的图像增强网络训练提供了基础。 -
总结
Prompt Initialization 的核心在于利用 CLIP 的文本-图像相似性,通过学习一对正负提示来区分背光图像和正常光照图像。这一过程为后续的图像增强网络训练提供了有效的初始提示,使得增强网络能够在 CLIP 的嵌入空间中更好地优化增强结果。
同样的我们详细介绍下初始增强网络训练这个流程:
-
增强网络的结构
文章中使用了一个简单的 U-Net 作为增强网络的基线模型。该网络的目标是估计背光图像的光照图 I i I_i Ii,并通过公式 I t = I b / I i I_t = I_b/I_i It=Ib/Ii 生成最终的增强结果。 -
损失函数设计
训练增强网络时,文章采用了两种损失函数:CLIP-Enhance 损失 ( L clip (L_{\text{clip}} (Lclip和 Identity 损失 L identity L_{\text{identity}} Lidentity,并将其组合为增强网络的总损失函数:
L enhance = L clip + w ⋅ L identity L_{\text{enhance}} = L_{\text{clip}} + w \cdot L_{\text{identity}} Lenhance=Lclip+w⋅Lidentity
其中, w w w 是用于平衡两种损失权重的超参数,实验中设置为 0.9。
CLIP-Enhance 损失
该损失函数基于 CLIP 的文本-图像相似性,通过计算增强结果与初始正提示之间的相似性来优化增强网络。具体公式如下:
L clip = e cos ( Φ image ( I t ) , Φ text ( T p ) ) ∑ i ∈ { n , p } e cos ( Φ image ( I t ) , Φ text ( T i ) ) L_{\text{clip}} = \frac{e^{\cos(\Phi_{\text{image}}(I_t), \Phi_{\text{text}}(T_p))}}{\sum_{i \in \{n, p\}} e^{\cos(\Phi_{\text{image}}(I_t), \Phi_{\text{text}}(T_i))}} Lclip=∑i∈{n,p}ecos(Φimage(It),Φtext(Ti))ecos(Φimage(It),Φtext(Tp))
其中, I t I_t It 是增强后的图像, T p T_p Tp 和 T n T_n Tn 分别是正提示和负提示, Φ i m a g e \varPhi_{image} Φimage和 Φ t e x t \varPhi_{text} Φtext 分别是 CLIP 的图像编码器和文本编码器。
Identity 损失
Identity 损失用于确保增强后的图像在像素空间中与原始背光图像保持一定的相似性,避免过度增强。具体公式如下:
L identity = ∑ l = 0 4 α l ⋅ ∥ Φ image l ( I b ) − Φ image l ( I t ) ∥ 2 L_{\text{identity}} = \sum_{l=0}^{4} \alpha_l \cdot \| \Phi_{\text{image}}^l(I_b) - \Phi_{\text{image}}^l(I_t) \|_2 Lidentity=l=0∑4αl⋅∥Φimagel(Ib)−Φimagel(It)∥2
其中, α l \alpha_l αl 是 CLIP 图像编码器中第 l l l层的权重。在训练过程中,前四层的权重 α l \alpha_l αl 设置为 1.0,最后一层的权重设置为 0.5。 -
训练过程
训练过程分为两个阶段:
自重建阶段(Self-reconstruction):仅使用 Identity 损失进行训练,目的是让增强网络在像素空间中尽可能重建原始背光图像。在这一阶段,所有层的权重 α l \alpha_l αl 均设置为 1.0。
增强阶段(Enhancement):同时使用 CLIP-Enhance 损失和 Identity 损失进行训练,以优化增强效果。 -
总结
通过上述训练过程,初始增强网络能够利用 CLIP 的文本-图像相似性,将背光图像增强为更接近正常光照图像的效果。这一阶段为后续的提示细化(Prompt Refinement)和增强网络的进一步优化奠定了基础。
阶段二:
提示词精炼与增强网络迭代微调。考虑到初始提示词可能无法精准捕捉逆光图像、增强结果和正常光照图像间的细微差异,作者通过设计的损失函数进一步更新提示词,拉大逆光图像与正常光照图像、增强结果在 CLIP 嵌入空间的距离,同时缩小增强结果与正常光照图像的距离。交替迭代提示词精炼与增强网络微调过程,直至获得视觉上令人满意的结果。整个过程中,CLIP 模型保持固定,不引入额外计算负担,仅在提示词初始化和精炼阶段进行学习。
下面我们详细介绍下提示词精炼与增强网络迭代微调这个过程:
- Prompt Refinement(提示细化)
提示细化的目的是通过排序学习(rank learning)进一步优化初始提示对,使其能够更准确地区分背光图像、增强结果和正常光照图像。
相似性计算
首先定义提示对与图像之间的负相似性(negative similarity):
S ( I ) = e cos ( Φ image ( I ) , Φ text ( T n ) ) ∑ i ∈ { n , p } e cos ( Φ image ( I ) , Φ text ( T i ) ) S(I) = \frac{e^{\cos(\Phi_{\text{image}}(I), \Phi_{\text{text}}(T_n))}}{\sum_{i \in \{n, p\}} e^{\cos(\Phi_{\text{image}}(I), \Phi_{\text{text}}(T_i))}} S(I)=∑i∈{n,p}ecos(Φimage(I),Φtext(Ti))ecos(Φimage(I),Φtext(Tn))
其中, I I I 是输入图像, T n T_n Tn 和 T p T_p Tp 分别是负提示和正提示。
排序学习损失
基于上述相似性,定义排序学习损失(margin ranking loss):
L prompt1 = max ( 0 , S ( I w ) − S ( I b ) + m 0 ) + max ( 0 , S ( I t ) − S ( I b ) + m 0 ) + max ( 0 , S ( I w ) − S ( I t ) + m 1 ) \begin{aligned} L_{\text{prompt1}} &= \max(0, S(I_w) - S(I_b) + m_0) \\ &\quad + \max(0, S(I_t) - S(I_b) + m_0) \\ &\quad + \max(0, S(I_w) - S(I_t) + m_1) \end{aligned} Lprompt1=max(0,S(Iw)−S(Ib)+m0)+max(0,S(It)−S(Ib)+m0)+max(0,S(Iw)−S(It)+m1)
其中:
- I w I_w Iw是正常光照图像, I b I_b Ib 是背光图像, I t I_t It 是当前增强结果。
- m 0 m_0 m0是正常光照图像与背光图像之间的间隔,设置为 0.9。
- m 1 m_1 m1 是增强结果与正常光照图像之间的间隔,设置为 0.2。
为了进一步优化,引入上一轮的增强结果 I t − 1 I_{t-1} It−1 作为约束,这种设计避免了增强结果之间的剧烈变化,使得模型能够逐步优化增强效果:
L prompt2 = max ( 0 , S ( I w ) − S ( I b ) + m 0 ) + max ( 0 , S ( I t − 1 ) − S ( I b ) + m 0 ) + max ( 0 , S ( I w ) − S ( I t ) + m 1 ) + max ( 0 , S ( I t ) − S ( I t − 1 ) + m 2 ) \begin{aligned} L_{\text{prompt2}} &= \max(0, S(I_w) - S(I_b) + m_0) \\ &\quad + \max(0, S(I_{t-1}) - S(I_b) + m_0) \\ &\quad + \max(0, S(I_w) - S(I_t) + m_1) \\ &\quad + \max(0, S(I_t) - S(I_{t-1}) + m_2) \end{aligned} Lprompt2=max(0,S(Iw)−S(Ib)+m0)+max(0,S(It−1)−S(Ib)+m0)+max(0,S(Iw)−S(It)+m1)+max(0,S(It)−S(It−1)+m2)
其中, m 2 = m 1 = 0.2 m_2 = m_1 = 0.2 m2=m1=0.2,确保每轮增强结果之间保持平滑的光线和色彩调整。
- Enhancement Tuning(增强网络调整)
增强网络的调整过程与初始训练类似,但使用了细化后的提示来计算 CLIP-Enhance 损失,并生成新的增强训练数据以进一步优化提示。
CLIP-Enhance 损失
使用细化后的提示计算 CLIP-Enhance 损失:
L clip = e cos ( Φ image ( I t ) , Φ text ( T n ) ) ∑ i ∈ { n , p } e cos ( Φ image ( I t ) , Φ text ( T i ) ) L_{\text{clip}} = \frac{e^{\cos(\Phi_{\text{image}}(I_t), \Phi_{\text{text}}(T_n))}}{\sum_{i \in \{n, p\}} e^{\cos(\Phi_{\text{image}}(I_t), \Phi_{\text{text}}(T_i))}} Lclip=∑i∈{n,p}ecos(Φimage(It),Φtext(Ti))ecos(Φimage(It),Φtext(Tn))
其中, I t I_t It 是当前增强结果。
总损失
增强网络的总损失仍然是 CLIP-Enhance 损失和 Identity 损失的加权组合:
L enhance = L clip + w ⋅ L identity L_{\text{enhance}} = L_{\text{clip}} + w \cdot L_{\text{identity}} Lenhance=Lclip+w⋅Lidentity
其中, w w w 是平衡权重。 - 交替迭代
提示细化和增强网络调整是交替进行的。每次迭代中,先优化提示,然后使用新的提示调整增强网络。这一过程重复进行,直到获得视觉上令人满意的结果。 - 总结
通过上述迭代优化过程,模型能够逐步提升对背光图像的增强效果。提示细化通过排序学习损失优化了提示对的区分能力,而增强网络调整则利用细化后的提示进一步优化增强结果。这种交替迭代的方式使得模型能够更好地感知图像中不同亮度区域的细节。
三、实验结果
作者通过一系列实验对比验证了所提出方法的有效性和优越性。以下是实验对比的总结:
- 实验设置
- 数据集:
- 训练集:从 BAID 训练数据集中随机选择 380 张背光图像作为输入图像,从 DIV2K 数据集中选择 384 张正常光照图像作为参考图像。
- 测试集:使用 BAID 测试数据集(包含 368 张背光图像)和新收集的 Backlit300 数据集(包含 305 张背光图像)。
- 训练细节:
- 使用 PyTorch 实现,训练在单个 NVIDIA GTX 3090Ti GPU 上完成。
- 使用 Adam 优化器,学习率分别为 5 × 1 0 − 6 5 \times 10^{-6} 5×10−6(提示初始化/细化)和 2 × 1 0 − 5 2 \times 10^{-5} 2×10−5(增强网络训练)。
- 总训练迭代次数为 50K,其中自重建阶段为 1K 次迭代,提示对初始化学习为 10K 次迭代。
- 对比方法
- 由于公开可用的基于深度学习的背光图像增强方法较少,作者将所提方法与以下代表性方法进行对比:
- 低光图像增强方法:Zero-DCE、Zero-DCE++、SCI、URetinex-Net、SNR-Aware、Zhao et al. 和 EnlightenGAN。
- 曝光校正方法:Afifi et al.。
- 背光增强方法:ExCNet。
- 对于无监督方法,作者在相同的训练数据上重新训练这些方法,以确保评估条件一致。
- 实验结果
定性比较
-
在 BAID 测试数据集和 Backlit300 数据集的典型样本上,作者展示了所提方法与其他方法的视觉比较。
-
所提方法能够一致地生成视觉上令人满意的增强结果,改善颜色和亮度,避免过曝或欠曝。
-
在处理具有挑战性的背光区域时,所提方法能够恢复清晰的纹理细节和满意的亮度,而其他方法可能会失败或产生可见的伪影。
定量比较
-
使用三种全参考图像质量评估(IQA)指标:PSNR、SSIM 和 LPIPS,以及一种无参考 IQA 指标 MUSQ 进行定量评估。
-
在 BAID 测试数据集上,所提方法在所有指标上均优于所有现有的最先进方法。
-
在 Backlit300 测试数据集上,所提方法在增强暗区、避免失真伪影以及在正常光照区域保持更好的颜色对比度和输入输出一致性方面表现出色。
- 消融研究
-
迭代学习的有效性:
- 通过定量比较验证了迭代学习(使用排序学习损失)对增强性能的提升。
- 使用固定提示词(如“backlit”/“well-lit”)时,PSNR 为 14.748,SSIM 为 0.823;而使用所提方法(包含迭代细化)时,PSNR 提升至 21.579,SSIM 提升至 0.883。
-
训练数据的影响:
- 使用不同的参考数据集(如从 DIV2K 和 MTISK 中选择的 1000 张图像)重新训练所提方法时,结果表明不同训练数据对性能的影响较小。
-
CLIP-Enhance 损失与对抗损失的对比:
- 使用对抗损失训练增强网络时,CLIP-Enhance 损失在 PSNR、SSIM、LPIPS 和 MUSQ 等指标上均优于对抗损失。
- 总结
通过广泛的实验对比,文章证明了所提方法在视觉质量和泛化能力方面优于当前最先进的背光图像增强方法。此外,该方法无需配对训练数据,具有更好的实用性和灵活性。
四、总结
这篇文章提出了一种基于CLIP模型的无监督背光图像增强方法(CLIP-LIT),通过迭代优化提示词和增强网络来提升背光图像的增强效果。
优点:
- 无需配对数据:该方法无需配对的背光图像和正常光照图像进行训练,大大降低了数据准备的难度。
- 视觉质量优异:通过迭代优化提示词和增强网络,该方法在视觉效果上显著优于现有的最先进方法,能够更好地恢复背光区域的细节,同时避免过曝或欠曝。
- 创新性:首次将CLIP模型的视觉语言先验引入低级视觉任务,为无监督图像增强提供了新的思路。
缺点:
- 依赖CLIP模型:该方法依赖于预训练的CLIP模型,可能在某些特定场景下受到CLIP模型性能的限制。
- 提示词优化的局限性:虽然通过迭代学习优化了提示词,但在某些复杂光照条件下,提示词的优化可能仍不完全准确。
五、思考
这篇文章在无监督背光图像增强领域提出了一个创新的解决方案,利用CLIP模型的文本-图像对齐能力来优化提示词和增强网络。以下是一些基于这篇文章的思考和可能的扩展方向:
1. 计算效率优化
当前方法的计算复杂度较高,尤其是在提示词优化和增强网络调整的迭代过程中。可以探索更高效的优化算法或模型架构,例如轻量级的增强网络,以减少计算成本并提高实时性。
2. 应用场景拓展
虽然文章主要关注背光图像增强,但这种方法的核心思想(利用CLIP的语义对齐能力优化提示词和网络)可以拓展到其他图像处理任务,如低光照增强、色彩校正、风格迁移、图像复原等。可以探索如何将这种迭代提示学习框架应用于其他视觉任务,以实现更广泛的应用价值。
3. 用户交互
在实际应用中,用户可能对增强效果有特定的偏好。可以考虑引入用户交互机制,例如允许用户通过简单的文本输入或滑块调整来定制增强效果。这不仅可以提升用户体验,还可以进一步优化模型的输出以满足个性化需求。
感谢阅读,欢迎留言或私信,一起探讨和交流。