跳转至

Language-Guided One-Step Diffusion Model for Nighttime Flare Removal

会议: CVPR 2026
论文: CVF Open Access
代码: 待确认
领域: 图像恢复 / 夜间炫光去除
关键词: 夜间炫光去除, 一步扩散, 视觉语言模型, 语义蒸馏, 数据合成

一句话总结

针对"夜间强光源造成的炫光会遮挡局部区域、现有方法缺乏被遮挡区的语义先验因而补出伪影/丢细节"的痛点,本文做了首个炫光专用视觉语言模型 Flare-VLM 输出结构化炫光描述、用它引导一步扩散在单次前向里重建严重受损区,并提出语义感知分布蒸馏(SADD)把噪声集中到炫光区、配合指令驱动的数据合成管线生成更贴近真实的训练数据,在恢复质量与下游检测上都优于现有方法。

研究背景与动机

领域现状:夜间高强度光源(车灯、路灯)在光学系统内反射散射,产生环状光晕、条纹、弥散辉光等多种炫光,既损视觉质量又干扰低光目标检测等下游任务。主流学习方法(CNN/Transformer)把炫光去除当作纯像素/特征级的图到图任务,在 Flare7K++ 这类数据集上能处理温和/弥散炫光。

现有痛点:当强炫光完全遮挡局部场景内容时,这些模型没有可靠的语义先验去推断被遮区域底下到底是什么物体/结构,于是产生伪影、过度平滑或与周围不一致的重建。炫光的形态(数量、空间分布、色度)又和场景光照布局强耦合,去炫光不只是抹掉可见伪影,还要在保持"光源—炫光"空间关系的前提下,重建出与邻近颜色/纹理/边缘一致的内容。

核心矛盾:被遮区缺语义先验。直接拿通用视觉语言模型(如 CLIP/通用 VLM)来补也不行——它们为开放域识别训练,生成的描述粗糙、与场景无关,说不清炫光类型及其与光源的空间关系,无法转成可执行的恢复条件。

本文目标:把"语言"当作场景级知识的显式载体引入去炫光,并解决三件事:(1) 怎么得到对炫光精确、可解析的语言描述;(2) 怎么在保证效率(一步扩散)的同时让语义真正约束恢复;(3) 怎么合成贴近真实的炫光训练数据。

切入角度:先造一个炫光专用 VLM,把炫光伪影转成固定 schema 的结构化条件(光源类型、位置、形状、颜色、被遮结构),再让一步扩散吃这些语义先验做单次重建;蒸馏时把噪声按语义 mask 集中到炫光区,避免干扰干净背景。

核心 idea:用炫光专用语言描述作显式语义先验引导一步扩散,并让蒸馏的监督"对准"炫光区而非全图均匀铺开。

方法详解

整体框架

框架(LG-ODM)分两个阶段。阶段 1(核心去炫光):给定炫光图 \(I_{LQ}\),Flare-VLM 先产出一段五槽结构化炫光描述 \(P_f\);一路用 LLM 把 \(P_f\) 反演成"无炫光、场景对齐"的干净描述 \(P_c\),经文本编码器得语义先验 \(c\);另一路 CLIPSeg 联合 \(I_{LQ}\)\(P_f\) 得到炫光语义 mask \(M\)。一步扩散学生网络在 \(c\) 引导下把 \(I_{LQ}\) 编码为 \(\hat{Z}\) 并直接预测干净潜变量 \(\hat{Z}_0\),解码得初步恢复图 \(\hat{I}\)。训练这个学生网络的关键是 SADD(语义感知分布蒸馏):用 \(M\) 调制注入潜空间的噪声,把蒸馏监督集中到炫光区。阶段 2(细节精修):因为编解码会过平滑边缘、压制纹理,再接一个轻量高频精修头(H-F Refine Head,实例化为 Uformer),以 \(\hat{I}\) 为基底、\(I_{LQ}\) 为高频残差来源融合出最终输出 \(I_O\)。此外有一条离线数据合成管线,从真实无炫光夜景图出发,用 Flare-VLM 提取光源语义/几何先验生成编辑指令,再用图像编辑模型合成炫光图,作为训练数据。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["炫光图 ILQ"] --> B["Flare-VLM<br/>输出五槽结构化炫光描述 Pf"]
    B -->|LLM 反演| C["干净场景描述 Pc<br/>→ 文本编码得语义先验 c"]
    B -->|CLIPSeg| D["炫光语义 mask M"]
    C --> E["一步扩散学生网络<br/>ILQ + c → 预测干净潜变量 Z0"]
    D --> F["SADD:mask 调制噪声<br/>把蒸馏监督集中到炫光区"]
    F --> E
    E --> G["H-F 精修头(轻量 Uformer)<br/>融合 ILQ 高频细节"]
    G --> H["去炫光结果 IO"]
    I["指令驱动数据合成<br/>PSF+深度物理先验→编辑指令"] -.训练数据.-> E

关键设计

1. Flare-VLM:把炫光伪影翻译成结构化、可解析的语言条件

这一设计直击"被遮区缺语义先验、通用 VLM 描述太粗"的痛点。作者收集带明显炫光的夜景图,为每张人工写一段只聚焦炫光退化的描述,强制含五个要素:光源类型(路灯/车灯)、光源在图像平面的大致位置(左上/中心)、炫光形状(直条纹/弥散辉光)、炫光颜色(白/黄)、被遮挡的目标结构(屋檐/楼面)。再把所有文本归一化成固定模板 [The <光源类型,位置> generate <颜色,形状> flare, which occludes <目标>.],让五个槽位能用简单规则直接转成语义条件,免去处理自由文本。基模型用 Qwen-2.5 7B、以 LoRA 指令微调。推理时 Flare-VLM 对 \(I_{LQ}\) 产出 \(P_f\),再由 LLM(Qwen3)把这段"退化描述"反演成无炫光的场景对齐描述 \(P_c\),编码为 \(c\)——正是这个 \(c\) 让一步模型有了重建被夜间炫光严重遮挡区域的语义依据。一步重建本身遵循 OSEDiff 思路:固定一个反向时间步 \(T\)、直接预测该步噪声 \(\varepsilon=\epsilon_\theta(\hat{Z},c,T)\),再解出干净潜变量 \(\hat{Z}_0=(\hat{Z}-\sqrt{1-\bar\alpha_T}\,\varepsilon)/\sqrt{\bar\alpha_T}\),单次前向即得高质量恢复、兼顾效率。

2. SADD(语义感知分布蒸馏):把噪声与监督"对准"炫光区

标准的变分 score 蒸馏(VSD)有两个毛病:只用"低质输入条件"下的教师输出监督学生;且向潜空间注入空间均匀的高斯噪声。但夜间炫光是局部的,均匀噪声会无谓扰动干净背景、逼教师去"去噪"本就干净的区域,使监督与真实退化错位。SADD 的修法是用语义把噪声门控住。先用炫光描述 \(P_f\) 作 prompt 喂 CLIPSeg 得炫光 mask \(M=\mathrm{CLIPSeg}(I_{LQ},P_f)\in[0,1]\),再注入 mask 一致的噪声:\(\hat{Z}_t=\sqrt{\bar\alpha_t}\hat{Z}_0+\sqrt{1-\bar\alpha_t}\,(\sigma(M)\odot\varepsilon)\),其中 \(\sigma(M)=(1+\gamma_f)M+(1+\gamma_b)(1-M)\)\(\gamma_f\ge0\) 增强炫光区扰动、\(\gamma_b\le0\) 衰减背景区扰动。监督上还加了一条真值条件的教师路径,让教师能基于高质内容给出引导。最终梯度(式 6)在一段时间步序列 \(\mathcal{T}=\{t-s,\dots,t\}\) 上聚合:既对齐学生(正则器 \(\epsilon_\phi\))与低质条件教师 \(\epsilon_\psi\) 之差,又引入真值条件教师与之的差,从而给学生空间精准、与退化一致的梯度信号,抑制背景漂移、稳住蒸馏。

3. 指令驱动数据合成:用物理先验生成场景对齐的真实感炫光

现有合成数据多把预生成的炫光层加性叠到干净背景上,忽略真实光源的语义与几何,导致与真实退化域差距大。本文反过来:从约 1400 张人工筛过的无炫光夜景图出发,先提取实际出现的光源类型与空间位置作为锚点;再引入几何先验——在薄透镜与波动光学成像模型下,点扩散函数 \(\mathrm{PSF}_\lambda(s,t;z)=|\mathcal{F}\{A(u,v)\exp(i\phi_\lambda(u,v;z))\}|^2\) 描述深度 \(z\) 处单位点光源在传感面的强度,入射能量近似按平方反比衰减 \(E\propto 1/z^2\),于是各通道炫光强度可写成 \(I_c(s,t)=M(s,t)\,k_c/(\epsilon+D(s,t))^2\cdot p_c(D(s,t))\)\(D\) 为逐像素深度、\(M\) 为光源二值 mask)。把跨 RGB 聚合归一化后的强度离散成五档(very weak→very intense),扩展模板为 [Add <炫光形状> around <光源类型,位置>. The flare intensity is <档位>.]。Flare-VLM 据无炫光图 \(I_c\)、其深度图 \(D\) 和基础指令生成结构受约束的详细编辑提示 \(P_{edit}\),再交给图像编辑模型 Step1X-Edit 合成炫光图。径向 RGB 强度曲线显示其空间衰减比 Flare7K++、Wu et al. 的叠加式合成更贴近真实炫光(反射型炫光如光圈鬼影不在合成范围内)。

损失函数 / 训练策略

学生网络的全局重建用 LPIPS:\(L_{rec}=\mathrm{LPIPS}(\hat{I},I_{GT})\);为强调光源区,额外加光源感知损失 \(L_{light}=\mathrm{LPIPS}(M_{Light}\odot\hat{I},\,M_{Light}\odot I_{GT})\);正则器 \(\epsilon_\phi\) 也可训练,其目标为 \(L_{diff}=\mathbb{E}\,L_{MSE}(\epsilon_\phi(\alpha_t\hat{Z}_0+\beta_t\varepsilon;t,c),\varepsilon)\),仅用于更新 \(\epsilon_\phi\)。实现上:阶段 1 用 AdamW、学习率 \(5\times10^{-5}\),所有 LoRA 从教师(SD 2.1-base)初始化、秩 8,SADD 初始时间步 \(t=4\)\(\gamma_f=0.1\)\(\gamma_b=-0.3\);阶段 2 为轻量 Uformer(学习率 \(1\times10^{-4}\));文本反演用 Qwen3;训练在两张 RTX 3090 上。

实验关键数据

主实验

配对测试集(自合成测试集 + Flare7K++ 测试集)上的定量对比。诊断式自定义指标:PSNRflare 只在炫光区算 PSNR、PSNRback 只在背景区算 PSNR;扩散方法标了推理步数("s"),推理时间在 RTX 3090 上测、不含预处理。

方法 步数 合成 PSNR↑ 合成 SSIM↑ 合成 LPIPS↓ 合成 FID↓ Flare7K++ FID↓ 推理(s)↓
Uformer 31.357 0.925 0.0602 28.015 37.979 0.172
Difflare 200s 29.154 0.823 0.0821 39.783 42.158 12.415
CycleRDM 10s 29.825 0.903 0.0946 27.774 39.580 0.560
OSEDiff 1s 27.012 0.845 0.1790 28.000 47.896 0.138
本文 1s 31.844 0.936 0.0527 21.636 34.206 0.126

本文在两套配对数据的全部四个指标上都拿到最优:合成集 FID 从次优 27.774 降到 21.636(真实感明显提升),同时只用一步、推理 0.126s 比所有扩散对手都快(Difflare 200 步要 12.4s)。这说明语言引导的炫光建模比"把炫光当通用退化"更能定位并约束炫光结构,像素保真与感知质量同时受益。无配对真实数据(Flare7K++ Real-world / DarkZurich / ExDark)上以 NIQE/MUSIQ/CLIPIQA 评测,本文在 MUSIQ、CLIPIQA 上取得最优或次优,验证真实夜景鲁棒性。

下游低光检测(YOLOv11)佐证恢复质量对任务有用:

训练用数据集 Precision↑ Recall↑ mAP50↑
不增强 0.756 0.699 0.742
Wu et al. 0.756 0.681 0.730
Flare7K++ 0.753 0.689 0.737
本文数据 0.764 0.714 0.774

用本文合成数据训练的去炫光模型,增强后图像喂同一检测器得到最高 mAP50(0.774);而 Wu et al./Flare7K++ 数据训练的模型常扭曲亮源、产生错误框,召回与 mAP 略降。

消融实验

逐组件消融(自合成测试集),重点看炫光区与背景区 PSNR 的分别变化:

配置 PSNRflare↑ PSNRback↑ 说明
Baseline 22.340 27.041 一步扩散基线
+Flare-VLM 24.722 27.990 精确炫光描述显著提升炫光区重建
+SADD(Bright mask) 22.702 28.315 亮度 mask 对背景改善有限
+SADD(Semantic mask) 23.085 31.164 语义 mask 大幅抑制背景漂移
+H-F Refine 22.657 27.826 高频头单加提升很小
Full 24.728 31.197 完整模型最优

关键发现

  • Flare-VLM 贡献最大:给扩散模型精确的炫光描述后,炫光区 PSNR 从 22.340 提到 24.722,是炫光区重建质量的主来源。
  • 语义 mask 远胜亮度 mask:SADD 用语义 mask 时背景区 PSNR 冲到 31.164(亮度 mask 仅 28.315),说明把噪声/监督按语义集中到炫光区,能有效抑制背景漂移——这正是 SADD 的核心价值。
  • H-F 精修头是锦上添花:单独加它提升甚微,作者据此指出绝大部分增益来自一步扩散阶段本身,而非后处理。

亮点与洞察

  • "首个炫光专用 VLM + 固定五槽 schema"把模糊的炫光语义压成可被规则直接解析的条件,绕开了通用 VLM 描述太粗、自由文本难落地的障碍——这种"为子任务定制结构化语言条件"的思路可迁移到雨/雾/低光等其它退化恢复。
  • SADD 把 VSD 的均匀噪声换成语义 mask 门控的噪声(\(\sigma(M)=(1+\gamma_f)M+(1+\gamma_b)(1-M)\)),用一个极简的加权式实现"哪里退化就监督哪里",是把"局部退化"这一物理事实写进蒸馏目标的巧妙做法。
  • 数据合成端"PSF + 平方反比深度衰减 → 离散强度档 → 编辑指令 → Step1X-Edit"把物理成像先验灌进生成式编辑,比加性叠层更贴近真实炫光的空间分布,对所有依赖合成数据的退化任务都有借鉴意义。

局限与展望

  • 编解码路径仍会损失高频,本文是用阶段 2 的 Uformer 精修头事后补偿;作者自承未来想在生成主干内部直接缓解高频损失以简化架构。
  • 数据合成不含反射型炫光(如光圈鬼影),适用范围受限于散射/折射类炫光。
  • Flare-VLM 训练依赖人工写的五槽描述与人工筛选的约 1400 张无炫光底图,标注成本不低;Flare-VLM 描述错误或 CLIPSeg mask 不准时,SADD 的语义门控可能反而把监督引偏(论文未充分讨论该失败模式)。
  • ⚠️ 消融表中 +Flare-VLM 单列的 PSNRback(27.990)与 Full(31.197)之间,背景增益主要由语义 SADD 带来,但各组件叠加顺序对最终数值的耦合关系原文呈现有限,以原文为准。

相关工作与启发

  • vs Uformer / BracketFlare 等 Transformer 去炫光:它们在像素/特征级操作、缺结构化炫光语义,强炫光完全遮挡时易失败;本文用语言语义先验显式引导被遮区重建,炫光区 PSNR 与 FID 全面更优。
  • vs Difflare 等多步扩散去炫光:后者推理动辄上百步(12.4s);本文一步扩散 0.126s 且质量更高。
  • vs OSEDiff 等通用一步扩散恢复:本文沿用其一步预测干净潜变量的框架,但注入炫光专用语言条件 + SADD 语义蒸馏,使一步模型适配夜间炫光这一局部强退化任务。
  • vs Wu et al. / Flare7K++ 的加性叠层合成:本文用指令驱动 + 物理先验在干净夜景上直接生成炫光,域差更小,下游检测 mAP 更高。

评分

  • 新颖性: ⭐⭐⭐⭐⭐ 首个炫光专用 VLM + 语义门控蒸馏 + 物理先验数据合成,三处都把"语言语义"创造性地接进去炫光管线。
  • 实验充分度: ⭐⭐⭐⭐ 配对/非配对/下游检测 + 逐组件消融较全,但对 Flare-VLM/mask 出错时的失败模式分析不足。
  • 写作质量: ⭐⭐⭐⭐ 动机(被遮区缺语义先验)与三大组件逻辑清晰,公式与图示到位。
  • 价值: ⭐⭐⭐⭐ 一步推理高质量去炫光且利好下游夜间检测,语言先验融入恢复的范式有迁移价值。