点击上方卡片,关注“AI学术工坊”公众号
各种重磅干货,第一时间送达
Flare7K++:混合合成数据集和真实数据集,用于夜间耀斑消除及其他用途
摘要
人造光通常会在夜间拍摄的图像上留下强烈的镜头眩光伪影,从而降低视觉算法的视觉质量和性能。现有的眩光去除方法主要侧重于去除白天的眩光,而在夜间则无法去除。由于人造光具有独特的亮度和光谱,眩光的图案和图像质量下降,因此夜间眩光去除具有挑战性。夜间眩光去除数据集的稀缺限制了这一关键任务的研究。在本文中,我们介绍了第一个全面的夜间眩光去除数据集 Flare7K++,包括 962 张真实拍摄的眩光图像 (Flare-R) 和 7000 张合成眩光 (Flare7K)。与 Flare7K 相比,Flare7K++ 在消除光源周围的复杂质量下降方面特别有效,而单独使用合成眩光是无法解决这个问题的。此外,之前的眩光去除流程依赖于手动阈值和模糊核设置来提取光源,当光源很小或曝光过度时,这可能会失败。为了解决这个问题,我们在 Flare7K++ 中额外提供了光源的注释,并提出了一种新的端到端流程,以在去除镜头眩光的同时保留光源。我们的数据集和流程为未来研究夜间眩光去除提供了宝贵的基础和基准。大量实验表明,Flare7K++ 补充了现有眩光数据集的多样性,并将夜间眩光去除的前沿推向了现实世界场景。
论文链接:https://arxiv.org/pdf/2306.04236
论文标题:Flare7K++: Mixing Synthetic and Real Datasets for Nighttime Flare Removal and Beyond
论文作者:Yuekun Dai, Chongyi Li, Shangchen Zhou, Ruicheng Feng, Yihang Luo, Chen Change Loy
1.关键字
眩光、低级计算机视觉、图像修复、夜间摄影。
2.引言
镜头眩光是一种强光在光学系统中散射和/或反射的光学现象。它会在拍摄的照片上留下放射状的明亮区域和光斑。由于存在多种人造光,眩光的影响在夜间环境中更为严重。这种现象可能导致光源周围对比度低、细节被抑制,从而降低图像的视觉质量和视觉算法的性能。以夜间使用立体摄像头的自动驾驶为例,散射眩光可能会被立体匹配算法误判为近距离障碍物。对于空中物体跟踪,镜头眩光引入的亮点可能会误导算法跟踪眩光而不是飞行物体 [1]。
为了避免镜头眩光带来的这些潜在风险,主流方法是优化硬件设计,例如使用专门设计的镜片组或应用防反射涂层。虽然专业镜头可以减轻眩光效果,但它们无法解决眩光的固有问题。此外,镜头前的指纹、灰尘和磨损经常会带来无法通过硬件缓解的意外眩光,尤其是在智能手机和显示器成像中。因此,非常需要一种眩光消除算法。
典型的耀斑大致可分为三大类:散射耀斑、反射耀斑和镜头球(又称背散射)[2]、[5]、[6],如图 1 所示。我们根据这三种耀斑对光源移动的响应来区分它们。散射耀斑是由镜头上的灰尘和划痕引起的。这种类型的耀斑会产生径向线条图案。当移动镜头或光源时,散射将始终环绕光源,并在拍摄的照片中保持相同的图案。反射耀斑是由镜头系统中的空气-玻璃界面之间的多次反射引起的[6]。它们的图案由光圈的形状和镜头结构决定。这种图案通常表现为拍摄的照片上的一系列圆圈和多边形[7]。与散射耀斑不同,当移动相机时,反射耀斑会朝与光源相反的方向移动。镜头光晕是由镜头表面未聚焦的灰尘或水滴颗粒引起的 [8]。它们是固定在照片同一位置的光圈状多边形。只有光源周围的镜头光晕会被照亮,它们不会随着光源或相机的运动而移动。由于镜头光晕的位置相对固定,因此这种效果在视频中更容易被去除 [5]。因此,本研究主要关注夜间散射耀斑和反射耀斑的去除。
去除夜间耀斑极具挑战性。首先,耀斑图案多种多样,是由光源位置和光谱的变化、镜头制造中的不稳定缺陷以及日常使用过程中的随机划痕和油污造成的。其次,不同波长的光的色散和小光学结构之间的干扰也会导致彩虹般的光晕和彩色莫尔条纹。虽然有一些传统的耀斑去除方法[9],[10],[11],但它们主要集中在检测和擦除反射耀斑中的小亮斑。最近,一些基于学习的耀斑去除方法[2],[12],[13],[14],[15]已被提出用于白天耀斑去除或去除具有特定类型图案的耀斑。为了获得配对的耀斑损坏/无耀斑图像,Wu 等人。[2] 合成基于物理的眩光,并在暗室中使用相同的清洁镜头捕捉眩光照片。这些眩光图案将叠加在无眩光图像上以产生配对数据。Sun 等人 [13] 假设所有眩光都是用相同的 2 点星点扩展函数 (PSF) 产生的。Feng 等人 [14]、[15] 的方法主要侧重于去除屏下摄像头的眩光伪影。所有这些眩光生成管道都假设镜头污染物或光源属于特定类型,并导致相对均匀的眩光图案。然而,对于显示器镜头、智能手机摄像头、无人机和自动驾驶摄像头,指纹、日常磨损和灰尘可能起到光栅的作用,从而导致条纹(条状眩光)和极其多样化的眩光图案,这些眩光在夜间很明显。此外,人造光的光谱通常与太阳的光谱有很大不同,导致不同的衍射图案,这进一步使耀斑建模复杂化。现有的合成耀斑和现实世界的夜间耀斑之间的差异使得开发能够很好地适用于各种夜间情况的模型变得困难。
为了促进夜间耀斑去除的研究,我们构建了一个大规模分层耀斑数据集,其中包含精心设计的夜间耀斑,称为 Flare7K++,这是同类中的第一个数据集。它由 962 张真实捕获的耀斑图像 (Flare-R) 和 7,000 张合成耀斑 (Flare7K) 组成。Flare-R 数据集由华为 P40、iPhone 13Pro 和中兴 Axon 20 5G 的后置摄像头捕获。对于智能手机的每个后置镜头,我们在暗室中拍摄了大约 100 张耀斑图案照片。为了模拟日常使用,我们在拍摄每个耀斑图案后用手指、丝巾和尼龙布等不同材料擦拭镜头。与 Flare-R 不同,Flare7K 由合成耀斑图案组成。它提供了 5,000 张散射耀斑图像和 2,000 张反射耀斑图像,包括 25 种散射耀斑和 10 种反射耀斑。这些耀斑图案是根据对现实世界夜间耀斑的观察和统计合成的。由于散射和反射耀斑是独立的,我们分别生成各自的耀斑数据。因此,可以将不同的反射耀斑添加到任何散射耀斑中以获得图案多样性。7,000 个耀斑图案可以随机添加到无耀斑图像中,形成可用于训练深度模型的耀斑损坏和无耀斑图像对。在图 2 中,我们展示了我们的数据与现实世界夜间图像之间的比较。我们还展示了来自最近耀斑数据集 [2] 的合成数据。相比之下,我们的数据在耀斑图案方面与现实世界的夜间图像更相似。此外,我们数据集中的每个散射耀斑图像都可以分为三个部分:光源、条纹和眩光。耀斑成分的分离使我们的数据集比以前的耀斑数据集更具可解释性和可操作性[2]。
这项工作建立在我们早期的会议版本 [16] 的基础上。与会议版本相比,我们引入了大量新材料,如下所示。1) 为了克服消除镜头系统中复杂衍射造成的严重退化的挑战,我们创建了一个名为 Flare7K++ 的混合数据集,该数据集使用新的真实捕获的 Flare-R 数据集增强了合成的 Flare7K 数据集(会议版本)。利用这个混合数据集训练深度模型可以显著提高消除强烈退化的有效性。2) 我们为 Flare7K++ 中的所有图像提供了额外的光源注释,并提出了一个从真实捕获的耀斑图像中提取光源的网络。3) 以前的方法,如 [2]、[16] 依赖于手动设置阈值和模糊核来提取光源。当光源太小或曝光过度时,它往往会在最终输出中擦除光源。基于我们的光源注释,我们设计了一个新的端到端眩光去除框架,它在去除镜头眩光的同时保留了光源。4) 我们手动标记测试眩光损坏图像的不同眩光成分的掩模,并引入两个新指标 G-PSNR 和 S-PSNR,以反映眩光和条纹损坏区域的恢复结果。5) 为了证明眩光去除的重要性,我们在下游任务上评估了我们的方法,包括立体匹配、光流估计和语义分割,这些都是夜间自动驾驶中的一些常见任务。
3. 夜间镜头眩光的物理原理
典型的夜间镜头眩光通常由两种类型的眩光组成,即散射眩光和反射眩光,它们非常复杂,因为它们包含许多组件,包括光晕、条纹、虹膜、重影、亮线、饱和斑点、雾霾、眩光、闪光、闪烁、闪烁、尖刺球、环、环和焦散。在视觉效果 (VFX)、计算摄影、光学和摄影中,相同类型的组件可能具有不同的名称。我们根据它们的模式将这些名称分为几种常见类型,以避免混淆。例如,闪烁、闪烁和尖刺球都是径向线形图案。在本文中,我们使用闪光来表示所有径向线形组件。为了便于更好地理解我们提出的数据集,我们在下面解释了每种类型的夜间镜头眩光的形成原理。
A. 散射耀斑
散射耀斑中的常见成分可分为眩光、闪光和条纹,如图 4 所示。
眩光是光源周围的一种平滑的雾状效果,也称为辉光效果 [30]。即使在理想的透镜系统中,具有有限半径的瞳孔仍将起到低通滤波器的作用,从而导致光源模糊。此外,镜片中的磨损或点状杂质会导致镜片厚度不均匀,明显增加眩光效果的面积。此外,色散使眩光的色调不是全局恒定的。如图 4 所示,远离光源的眩光像素比光源周围的像素更蓝。在白天光照充足的情况下,灯光周围的场景足够明亮,可以覆盖眩光效果。然而,在弱光条件下,眩光明显比场景亮,因此在夜间消除眩光时不能忽略它。
闪光(又称闪烁、闪烁、尖刺球)是由于光圈形状、线状杂质和镜头缺陷引起的具有多个放射状条纹的图案[6]。由于光圈的结构,瞳孔不是完美的圆形,从而产生星形眩光。以十二边形光圈为例,光圈边缘的衍射会将点光源投射到照片上的十二边形上。与光圈不同,线状镜头缺陷总是会导致不均匀的闪光。对于白天的镜头眩光,作为高强度光源的太阳会在整个屏幕上留下明亮的闪光。相比之下,人造光的强度较低,闪光的面积总是与眩光效果相似。由于闪光仅在图案方面与眩光不同,因此也可以将其视为眩光的高频分量。
条纹(又称亮线、条纹)是线状耀斑,比闪光长得多,也亮得多 [13],[31]。它们经常出现在智能手机摄影和夜间驾驶视频中。前镜头上的定向油污或磨损可能会起到光栅的作用,并导致光束状的 PSF。在白天,条纹就像更亮的闪光。然而,在弱光条件下,即使是强度较低的光源也可能产生整个屏幕上的条纹。由于人们无法始终保持智能手机的镜头或车载摄像头清洁,因此这种现象在夜间很明显。
B. 反射光斑
反射耀斑(又称重影)是由多个空气玻璃透镜表面的反射引起的 [6]。对于具有 个光学表面的透镜系统,即使光线恰好反射两次,仍有 种组合可以从 个表面中选择两个表面 [2], [6]。一般来说,反射耀斑在图像上形成不同图案的组合,如圆形、多边形或环形。由于透镜之间有多次反射,因此在物理学上合成反射耀斑具有挑战性。为了模拟反射耀斑,一种更直接的方法是使用 2D 方法 [7]。具体来说,对于 2D 反射光斑渲染,由于散射引起的环状和环状效应在夜间并不明显,我们可以将反射光斑抽象为一排不同的光圈,如图 4 所示。在反射过程中,如果光路被视场光阑阻挡,则会导致光圈剪切。在 2D 方法中,可以通过为光学中心和光源之间的距离设置一个剪切阈值来模拟这种效果。如果此距离长于剪切阈值,则部分光圈将被按比例剪切。
理想情况下,每个虹膜都可以独立添加到图像中。而且,不同的虹膜之间不会发生干扰。然而,在现实世界的场景中,相邻的光线往往是相关的,并产生一个三角形网格。为了避免阻塞伪影,Ernst 等人 [32] 提出了一种焦散渲染方法,并介绍了一种组合和插值这些虹膜的技术。在我们的方法中,由于渲染物理上逼真的焦散增加了模拟反射眩光的难度,我们使用特定的焦散图案来模拟这种效果。
4. FLARE7K++数据集
目前唯一可用的耀斑数据集是吴等人 [2] 提出的数据集,该数据集主要用于日间耀斑去除。因此,吴等人的数据集没有考虑夜间耀斑中常见的条纹效应和眩光效应。就夜间耀斑而言,其模式主要由附着在镜头上的污渍决定。污染类型的多样性使得基于物理的方法(如吴等人的方法)难以通过遍历所有不同的瞳孔函数来收集真实的夜间耀斑。这导致吴等人的数据集中的合成耀斑与现实世界夜景中的合成耀斑缺乏多样性和领域差距。为了解决领域差距和缺乏多样性带来的挑战,我们引入了 Flare7K++,这是一个由两个部分组成的新数据集:Flare7K(合成耀斑数据集)和 Flare-R(在暗室中真实环境中捕获的耀斑图像集合)。如图 5 所示,我们的耀斑模式更加多样化,更接近真实世界的夜间情况。
A.Flare7K数据集
为了合成 Flare7K,我们拍摄了数百张使用不同镜头(智能手机和相机)和各种光源的夜间耀斑图像作为参考图像。我们汇总了所捕获的图像,并根据散射耀斑的模式将其总结为 25 种典型类型。对于每种类型的耀斑,我们生成 200 张具有不同参数(例如眩光半径、条纹宽度等)的图像。由于反射耀斑与镜头组类型直接相关,我们还使用不同的相机捕获了一些视频片段作为反射耀斑合成的参考。通过参考这些现实世界的夜间耀斑视频,我们为每种特定类型的相机设计一组光圈,并合成 10 种典型的反射耀斑类型。我们最终获得了 5,000 个散射耀斑和 2,000 个反射耀斑。由于眩光渲染技术相对成熟,我们选择直接使用 Adobe After Effects 中的 Video Copilot 插件 Optical Flares 来生成自定义眩光。图 6 展示了我们的散射眩光合成流程。我们将镜头眩光分为四个部分,包括闪光、条纹、眩光和光源。对于每个部分,我们分析参考图中的眩光半径范围和颜色距离曲线等参数。然后,我们使用 Adobe After Effects 合成眩光模板。
眩光合成:从每种类型的参考眩光损坏图像中,我们首先绘制像素的 RGB 值与其到光源的距离之间的关系作为眩光曲线。除以眩光的半径,这种颜色距离关系可以看作是颜色校正曲线。将此曲线应用于具有眩光半径的圆形渐变图案可以产生此类眩光的眩光效果。由于条纹周围区域的亮度有时会变得比正常区域弱,我们手动测量消失角并在条纹周围使用羽化蒙版来降低这些区域眩光的不透明度。这个缺失角的角度被设置为一个变量,以在生成此类散射眩光时覆盖更多情况。
条纹合成:在 Sun 等人 [13] 的工作中,他们假设条纹总是用 2 点星形 PSF 生成。然而,条纹效果甚至不对称,一侧通常比另一侧清晰得多。为了模仿这种效果,我们在 Adobe After Effects 中为每种类型的条纹手动绘制一个蒙版,并将宽度设置为变量。然后,我们绘制条纹部分和眩光部分的 RGB 值,并使用此曲线为条纹着色并模糊蒙版的边缘。每个边缘的模糊大小来自部分曲线的半衰期值。
闪光合成:至于闪光,我们使用光学耀斑的闪光模板并调整参数,直到它与图像的耀斑大致匹配。在光源周围的区域,图像通常会遭受强烈的退化,光学耀斑很难模拟。如果我们假设我们的镜头耀斑是平滑的,那么这种退化将会被分离为去光斑图像的一部分。因此,我们使用 Adobe After Effects 的默认插件分形噪声来生成噪声补丁,然后为其添加径向模糊效果,从而创建径向噪声图案。该图案将被添加到光学耀斑的闪光模板中,以组成逼真的闪光。
光源合成:我们对眩光损坏的图像应用阈值处理,以获得一组过度曝光的微小形状。为了模拟光源的发光效果,我们在 Adobe After Effects 中对不同的微小形状应用了另一个名为 Real Glow 的插件。为了确保只有光源区域过度曝光,光源被做得比眩光的过度曝光部分更大。然后,使用屏幕混合模式将其添加到眩光中。此模式可确保过度曝光的区域不会扩大,并带来逼真的视觉效果。这些合成光源将在 V-A 节中的训练管道中用作光源注释。
反射光晕合成:对于反射光晕,插件 Optical Flares 的 Pro Flares Bundle 包含 51 种不同的捕获高质量虹膜图像,可作为虹膜库。在与参考视频进行比较时,我们选择最相似的虹膜,并使用 Optical Flares 插件手动调整其大小和颜色。由于不同虹膜到光源的距离总是成比例的,因此我们按照插件的管道将不同的虹膜组件设置为与光源成比例的直线。之后,我们可以获得反射光晕模板。
对于某些特殊类型的反射眩光,我们还考虑了眩光的动态触发机制,如焦散和剪切效果。当光源在图像上的位置远离镜头的光学中心时,就会发生这些现象。如第 III-B 节所述,焦散现象是由不同光圈之间的干扰引起的。为了模拟这种效果,我们使用 Optical Flares 的默认焦散模板在光圈中心生成焦散图案。为了模拟动态触发效果,此焦散图案的不透明度设置为与光圈和光源之间的距离成比例。至于剪切效果,当反射光路被两个以上的镜头光圈阻挡时,就会产生剪切效果。它可以被看作是两个光圈的相交。因此,当虹膜与光线之间的距离大于剪切阈值时,我们开始使用另一个虹膜作为遮罩来擦除虹膜的部分内容。这个虹膜将仅用作遮罩,不会被渲染。
在夜间情况下,矩阵 LED 灯很常见,可能会带来格子状的反射眩光。为了模仿这种效果,我们合成了一些格子形状的虹膜,如图 7 所示。与之前的数据集 [2] 相比,这些设计更好地反映了现实世界的夜间情况。
B.Flare-R数据集
由于合成数据集不包含镜头系统中衍射和色散引起的复杂退化,我们还捕获了一个真实世界的耀斑数据集 Flare-R,其中包含 962 个耀斑图案。与吴等人的捕获方法不同,我们重现了日常使用中常见的镜头污染物,以丰富数据集的多样性。我们将不同类型的液体(包括水、油、乙醇和碳酸饮料)浸在镜头表面,然后用手指和不同类型的衣服擦拭。每次擦拭后,我们都会捕获一张新的镜头耀斑图像。我们禁用手机摄像头的自动白平衡,并通过改变光源的色温来获得不同颜色的镜头耀斑图像。华为 P40、iPhone 13 Pro 和中兴 AXon 20 5 G 都有三个焦距不同的后置镜头。对于每个镜头,我们改变从相机到光源的距离并捕获大约 100 张图像。总共,我们收集了 962 张耀斑图像,几乎涵盖了所有常见情况。图 5 展示了合成耀斑和真实耀斑图案之间的差异。
与合成的 Flare7K 数据不同,获取真实捕获的耀斑的光源注释非常困难。为了解决这个问题,我们使用 Flare7K 及其光源注释训练了一个网络,以从真实耀斑图像中提取光源。我们使用该网络处理 Flare-R 数据集中的所有图像,以自动获取光源注释。对于极少数未去除反射耀斑的失败情况,影响了光源提取的准确性,我们手动擦除错误的亮点以获得光源注释。光源提取的详细信息在补充材料中提供。
C. 与现有耀斑数据集的比较
我们在表 I 中比较了我们的数据集和 Wu 等人的数据集之间的差异。比较表明,我们的新数据集提供了更丰富的模式和注释,这有利于更广泛的应用,例如镜头眩光分割和光源提取。扩展应用的详细信息在补充材料中介绍。此外,图 5 显示,我们的新数据集在颜色和图案方面更能代表现实世界的夜间眩光。为了评估不同眩光数据集的保真度,我们对 Wu 等人 [2]、Flare7K 和 Flare-R 进行了定量比较。为此,我们收集了 1,273 张真实拍摄的眩光损坏夜间图像和 2,000 张类似场景中的无眩光夜间图像。按照补充材料中的数据增强流程,我们将从这些耀斑数据集中采样的耀斑图像添加到收集的无耀斑图像中,以合成不同的耀斑损坏数据集。然后,我们计算每个合成耀斑损坏数据集与实际捕获的夜间耀斑损坏图像数据集之间的 Fréchet 初始距离 (FID) [33]。表 II 中显示的定量比较揭示了我们的 Flare7K 和 Flare-R 的真实性。
D.配对测试数据收集
由于没有公开的夜间眩光去除测试数据集,我们收集了新的真实夜间眩光配对数据以进行全参考评估。对于大多数设计良好的镜头,夜间场景的眩光主要是由镜头表面的污渍(或夜间驾驶时挡风玻璃上的划痕)引起的。为了重现这些眩光,我们用手指和布擦拭相机的前镜头以模仿常见的污渍。之后,我们使用镜头纸轻轻清洁前镜头以获得无眩光的真实情况。清洁动作仍可能导致配对图像出现微小错位。因此,我们手动对齐配对图像并获得 100 对真实世界中的眩光损坏/无眩光图像作为我们的真实世界测试数据集。由于真实情况仍可能受到镜头缺陷带来的轻微眩光的影响,因此全局 PSNR 不能完全反映眩光去除方法的性能。为了解决这个问题,我们手动标记了所有条纹、眩光和光源区域的蒙版,如图 9 所示。蒙版 PSNR 可用于评估眩光不同成分区域的恢复结果。我们将眩光和条纹区域的蒙版 PSNR 命名为 G-PSNR 和 S-PSNR。
5. 提出的方法
在吴等人 [2] 提出的推理流程中,网络输出没有光源的无眩光预测。然后使用手动阈值和模糊核处理眩光损坏的图像以提取光源蒙版,如图 8 所示。然而,条纹区域可能仍然会过度曝光,从而在图像上留下部分眩光。此外,基于阈值的算法可能无法分割不够亮的光源,而模糊操作可能会无意中擦除微小的光源。因此,需要一种能够在去除眩光伪影的同时准确保留光源的方法。为了应对这些挑战,我们引入了一种使用光源注释的端到端训练流程,确保在去除眩光期间可靠地保留光源。
A.训练流程
如图 8 所示,我们之前的 Flare7K 流水线 [2]、[16] 将包含眩光的图像 作为输入,并输出无眩光的图像 。然后,通过计算输入 和输出 之间的差异来预测估计的眩光图像 。将对包含眩光的图像 应用阈值和腐蚀操作以获得掩模 。在掩模外的区域计算估计的眩光和无眩光图像的掩模损失,以驱动网络专注于重建光源外的细节。因此,这种先前的方法产生了没有任何光源的消除眩光的图像,并通过后处理将光源粘贴回来。
我们新的 Flare7K++ 流程修改了框架,直接预测 6 通道输出,其中 3 个通道为无眩光图像 ,其他 3 个通道为眩光图像 。为了确保可以将这两个图像相加以获得原始输入,使用重建损失来监督最终输出。与之前的眩光数据集 [2] 不同,我们的 Flare7K++ 数据集提供了光源注释。如图 8 所示,将光源图像 添加到背景图像 中,以合成无眩光图像 的真实值。然后,计算眩光图像 和光源图像 之间的差异来监督估计的眩光 。这使我们能够训练端到端网络,而无需手动设置提取光源的阈值。因此,我们的流程使网络能够区分过度曝光的光源和过度曝光的条纹。即使对于非饱和光源,我们基于学习的方法也能产生准确的输出。
B.损失函数
在训练过程中,从 Flare7K++ 数据集中随机抽取成对的耀斑和光源图像。将光源图像 添加到背景图像 中,以获得无耀斑图像 的地面实况。然后,耀斑 和光源 之间的差异用作耀斑图像 的地面实况。由于我们的耀斑图像和 Flickr 背景图像都是伽马编码的,我们遵循吴等人的流程,并在每次加减运算之前应用近似逆伽马校正曲线,其中 取自 [1.8,2.2] 对图像进行线性化。我们的耀斑去除网络可以定义为 ,它将耀斑损坏的图像 作为输入。然后,估计的无耀斑图像 和耀斑图像 可以表示为:
与以前的研究 [2]、[16] 一样,耀斑和背景图像使用 损失和感知损失 进行监督。背景图像损失 可以写成:
与耀斑损失的表达式相同。
重建损失 定义为:
其中 表示在线性化的 gammad 编码域中与先前采样的 进行加法运算。然后,将加法限制在 [0,1] 范围内。总体而言,最终的损失函数旨在最小化所有这些损失的加权和:
其中,在我们的实验中, 分别设置为 0.5、0.5 和 1.0。
6. 实验
A. 实验细节
训练细节:在训练阶段,我们输入的 flarecorrupted 图像被裁剪为 512 × 512 × 3,批量大小为 2。我们使用 ADAM 优化器在 24 K Flickr 图像数据集 [38] 上对我们的模型进行 300 K 次迭代训练。学习率设置为 10-4。为了在我们的 Flare7K++ 数据集上建立基准,我们使用 Flare7K++ 数据集重新训练了最先进的图像恢复网络,包括 MPRNet [35]、HINet [34]、Uformer [37] 和 Restormer [36]。由于 MPRNet 和 HINet 是多级图像恢复网络,旨在处理彼此一致的输入和输出通道数,我们在输入中添加了一个 3 通道黑色图像。通过这样做,我们确保输入中的通道数等于 6,这是网络正常运行所必需的。为了确保实验的公平性,我们使用与上述相同的训练设置和数据增强方法来训练这些方法。所有这些模型都是使用 NVIDIA Geforce RTX 3090 GPU 进行训练的。由于 NVIDIA Geforce RTX 3090 的 GPU 内存有限(24 G 内存),我们减少了被称为重度网络的 MPRNet 和 Restormer 的参数。具体来说,我们将 Restormer 的细化块数量从 4 减少到 1,并将特征通道的维度设置为 16,而不是默认维度 48。MPRNet 的特征数量设置为 24,而不是默认的 40,以满足内存限制。我们相信这两个网络的默认参数设置会表现更好。每个模型的详细参数、执行时间和乘法-累积运算 (MAC) 概述在表 IV 中。
B. 与先前研究的比较
为了证明我们的数据集的有效性和优势,我们比较了不同数据集和方法在夜间耀斑消除方面的性能。我们还在我们的数据集上给出了现有图像恢复方法的基准。
实验设置:在没有夜间眩光去除方法的情况下,我们将基线模型与夜间去雾方法 [27]、夜间视觉增强方法 [28] 和眩光去除方法 [2] 进行了比较。Zhang 等人 [27] 提出了一种夜间雾霾合成方法,可以模拟光线并使用合成数据训练网络。我们使用其预训练模型进行比较。Sharma 等人的夜间视觉增强方法 [28] 是一种无监督的测试时间训练方法,可以基于灰度世界假设和眩光平滑先验提取低频光效。我们按照其设置在我们的测试数据上测试结果。Wu 等人的研究 [2] 与我们的工作最相关。由于 Wu 等人没有提供他们的模型检查点,我们使用他们发布的代码和数据来训练模型进行比较。我们还将我们的方法与之前使用 Uformer [37] 为骨干的 Flare7K 基线进行了比较。定量结果如表 III 所示。
定性比较:我们首先在图 10 和图 11 中展示了现实世界夜间眩光的视觉比较。比较表明,最近的夜间除雾方法 [27] 和夜间视觉增强方法 [28] 对夜间镜头眩光几乎没有影响。相比之下,在我们的数据集上训练的模型可以在夜间眩光损坏的图像上产生令人满意的输出。虽然吴等人 [2] 可以有效地消除眩光效果,但它无法解决各种条纹效果,甚至可能消除光源。我们在图 12 中展示了我们方法的更多结果。在这些具有挑战性的情况下,我们的方法产生了令人满意的无眩光结果。借助 Flare-R 数据集,我们的新方法可以更好地消除光源周围的复杂退化。此外,我们的端到端管道可以解决难以恢复微小且曝光不过度的光源的问题。我们的方法甚至可以在具有多个光源的场景中实现稳健的结果。
定量比较:我们使用常见的全参考指标PSNR,SSIM [39]和LPIPS [40]来量化表III中不同方法的性能。为了更好地说明不同方法在去除眩光不同成分方面的有效性比较,我们还引入了两个指标S-PSNR和G-PSNR,以测量眩光和条纹区域的眩光去除性能。测试数据的眩光和条纹掩模是手动绘制的,如图9所示。由于Sharma等人的方法[28]基于灰色世界假设,因此它在白色的眩光效果上失败了。张等人的方法[27]主要针对夜间雾霾而设计。虽然它可以减轻镜头眩光,但它也会改变图像的颜色,导致SSIM下降。在表 III 中,U-Net [21] 在我们的数据集上与吴等人的方法之间的差异也表明了 Flare7K++ 的有效性。相比之下,Uformer [37] 在 PSNR 和 LPIPS 方面表现最佳。因此,我们遵循 Flare7K 的设置,并在以下部分中将 Uformer [37] 设置为我们的基线方法。所有这些网络都实现了良好的性能,揭示了我们数据集的可靠性。我们方法的更多结果显示在补充材料中。
C. 消融研究
在本节中,我们研究了我们提出的方法的主要设计并与之前的 Flare7K 数据集进行了详细的比较。
数据集:为了说明使用 Flare-R 和 Flare7K 进行训练的必要性,我们在新的流程中仅使用 Flare7K 进行了消融研究。结果如图 13 所示,表明光源附近的区域经常出现严重的伪影。由于这些伪影难以合成,仅使用 Flare7K 训练网络可能无法完全将其从图像中去除。然而,通过将 Flare-R 纳入训练过程,我们的混合训练策略大大提高了条纹区域的眩光去除性能,并有效解决了伪影问题,如表 V 所示。此外,我们对在我们的数据集上训练的眩光去除方法与吴等人提出的眩光去除方法进行了比较分析。[2]。定量结果突出了我们提出的数据集的有效性。
光源补全:为了证明我们的光源处理方法的有效性,我们进行了一项消融研究,以评估在训练过程中纳入光源注释的影响。为了进行比较,我们训练了一个具有 6 通道输出的 Uformer [37],而不使用光源注释,如图 8(b) 所示。然后,我们按照 Flare7K 的设置在输入的过度曝光区域设置一个掩码,而不是通过使用掩蔽的眩光损失和掩蔽的背景损失来监督这些区域的输出。在推理阶段,我们将亮度阈值设置为 0.97 以提取掩码,并使用 Wu 等人 [2] 的掩码羽化方法将光源平滑地混合回图像。如表 VI 所示,没有光源注释的训练可能会严重降低定量结果。此外,图 14 说明了我们新的光源注释的好处。它可以帮助很好地重建微小的光源,并可以避免在光源旁边留下条纹效果的尾巴。
训练流程:在吴等人和 Flare7K 的训练流程 [2] 中,网络将输出去除眩光的图像。然后,计算眩光损坏图像和去除眩光图像之间的差异来估计眩光。为了避免光源注释带来的影响,我们使用图 8(a) 的流程训练网络,并通过不采用掩蔽损失来监督估计的去除眩光和眩光图像的过度曝光区域。在眩光损坏图像的饱和区域中,无眩光地面实况和眩光图像地面实况的加法将高于 1.0。因此,在训练期间计算眩光图像时,差异操作会引入偏差。这种偏差可能会在条纹的过度曝光区域带来伪影,如图 15 所示。这些伪影将严重影响定量结果,如表 VII 所示。由于我们的新管道不包含减法运算,因此它可以避免这个问题并在饱和区域中很好地重建细节。
7. 局限性
上述实验证明了Flare7K++在各种场景中的出色性能。此外,在我们的数据上训练的网络可能仍然无法解决一些具有挑战性的情况。由于反射耀斑总是产生类似于夜晚远处明亮的窗户和路灯的亮点,这些窗户或灯光也可能作为反射耀斑的一部分被去除。此外,当光源靠近相机时,可能会留下覆盖整个图像的大眩光。这种眩光很难去除。在这种情况下,条纹和光源周围的区域可能会在一个或多个通道中饱和。当前基于图像分解的方法难以有效解决这些缺失信息。探索使用语义先验来恢复图像代表了一个潜在的未来方向。此外,由于参数数量较多,我们现有的基线方法在智能手机等边缘设备上直接部署时面临挑战。需要强调的是,这些限制主要归因于耀斑去除方法,而不是我们数据集中的任何缺陷。因此,迫切需要改进轻量级模型设计、模型压缩和提炼技术,以克服这些挑战。
8. 总结
在本文中,我们提出了一个新的数据集 Flare7K++,旨在推进夜间耀斑去除。Flare7K++ 由真实捕获的耀斑图像数据集 Flare-R 和合成耀斑图像数据集 Flare7K 组成。Flare7K 包含 5000 张散射耀斑图像和 2000 张反射耀斑图像,包括 25 种散射耀斑和 10 种反射耀斑。Flare-R 包含 962 种耀斑图案,是在暗室中用不同类型的镜头污染物捕获的。此外,我们为不同的耀斑成分提供了丰富的注释,例如光源、条纹和带闪光的眩光,这些在之前的数据集中始终不存在。利用提出的数据集,我们设计了一个新的夜间耀斑去除流程,以提高夜间图像的质量并提高夜间视觉算法的稳定性。我们新颖的流程有效地利用了光源注释,从而提高了保留光源的准确性,同时消除了眩光。大量实验表明,我们的数据集足以帮助消除不同类型的夜间镜头眩光。