本文主要是介绍低光图像增强论文Kindling the Darkness: A Practical Low-light Image Enhancer阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文来自ACM MM 2019,作者:Yonghua Zhang, Jiawan Zhang, and Xiaojie Guo
项目地址:https://github.com/zhangyhuaee/KinD
Abstract
在弱光条件下拍摄的图像通常(部分)能见度较差。除了不理想的照明,多种类型的退化,如噪音和颜色失真,由于相机的质量有限,这些退化隐藏在黑暗中。换句话说,仅仅提高黑暗区域的亮度将不可避免地放大隐藏的退化。这项工作建立了一个简单而有效的点燃黑暗的网络(表示为kinD),它的灵感来自视retinex理论,将图像分解成两个部分。一个组件(照明)负责光的调节,而另一个组件(反射率)负责退化去除。通过这种方式,原始空间被解耦为两个更小的子空间,期望得到更好的正则化/学习。值得注意的是,我们的网络是通过在不同曝光条件下拍摄的成对图像进行训练的,而不是使用任何地面实况反射率和光照信息。我们进行了大量的实验来证明我们的设计的有效性和它优于最先进的技术。我们的产品可以抵抗严重的视觉缺陷,并且用户可以任意调节光线的亮度。此外,我们的模型在2080Ti GPU上处理VGA分辨率的图像花费不到50ms。以上优点使我们的产品具有实用价值。
1 INTRODUCTION
在昏暗的光线条件下捕捉高质量的图像一直都是一个挑战。虽然一些操作,如设置高ISO,长曝光和闪光灯,可以适用于这种情况,但他们有不同的缺点。例如,高ISO增加了图像传感器对光的灵敏度,但噪声也会被放大,从而导致低信噪比。长时间曝光仅限于拍摄静态场景,否则很可能会遇到模糊的结果。使用闪光灯可以在某种程度上照亮环境,然而,这经常会给照片带来意想不到的光晕和光线不平衡问题,让照片看起来很不舒服。在实践中,因为拍照工具有限,普通用户甚至可能没有上述选项,例如嵌入便携式设备中的相机。在过去的几年里,低光图像增强一直是一个长期存在的问题,并取得了很大的进展,但开发一个实用的低光图像增强器仍然具有挑战性,因为灵活地照亮黑暗,有效地消除退化,高效这些问题都应该被考虑到。
图1提供了在具有挑战性的光照条件下拍摄的三张自然图像。具体来说,第一种情况是极低的光。严重的噪音和颜色失真隐藏在黑暗中。通过简单地放大图像的强度,退化就会显示在右上角。第二张照片是在日落时拍摄的(微弱的环境光),大多数物体都背光。中午对着光源(太阳)成像也很难摆脱像第二种情况那样的问题,尽管周围的光线更强,场景更清晰可见。请注意,最后两张照片中那些相对明亮的区域直接放大会导致饱和。
基于深度学习的方法在去噪、超分辨率等数值底层视觉任务中表现优异,但其中大部分都需要训练数据包含地面实况。对于特定问题,比如低光图像增强,虽然可以确定光强的大小顺序,但是不存在ground-truth真实数据。因为,从用户的角度来看,不同的人/需求所喜欢的光照等级可能是多种多样的。换句话说,一个人不能说什么光的条件是最好的/地面实况。因此,仅将图像映射到具有特定光线水平的版本并不是很合适。
基于以上分析,我们总结了低光图像增强的挑战如下:
如何从单个图像中有效地估计出光照分量,并灵活地调整光照?
如何在照亮黑暗区域后去除之前隐藏在黑暗中的噪声和颜色失真等退化?
如何训练一个模型,在没有明确的地面真相光条件,只看两个/几个不同的例子情况下增强低光图像?
在本文中,我们提出了一种深度神经网络来同时考虑上述问题
1.1 Previous Arts
已经提出了大量的低光图像增强方案。在接下来的文章中,我们将简要回顾与我们密切相关的经典和最近的作品。
Plain Methods
普通方法:直观地说,对于全局光线较弱的图像,可以通过直接放大亮度来增强其可视性。但是,如图1的第一种情况所示,包括噪声和颜色失真在内的视觉缺陷沿着细节显示出来。对于包含明亮区域的图像,例如图1中的最后两张,这种操作很容易导致(部分)饱和/过度曝光。以直方图均衡化及其后续为代表的技术,试图将值范围映射到[0,1],并平衡输出直方图,以避免截断问题。这些方法实际上是为了提高图像的对比度。另一种映射方式是伽马校正(GC),它以非线性的方式在每个像素上单独执行。虽然GC可以提高亮度,尤其是暗像素的亮度,但是它没有考虑到某个像素与其相邻像素的关系。普通方法的主要缺点是它们几乎不考虑真实的光照因素,这通常使增强的结果在视觉上很不稳定,并且与真实场景不一致。
Illumination-based Methods
基于亮度的方法:与普通方法不同的是,这类方法都意识到光照的概念。由retinex理论得到的关键假设是(彩色)图像可以分解成两个部分,即反射率和照度。早期的尝试包括单尺度Retinex (SSR)和多尺度Retinex (MSR)。但受限于生成最终结果的方式,他们的输出通常看起来不自然,而且在某些地方过度增强。Wang等人提出了一种名为NPE[9]的方法,它可以同时增强对比度,保持照度的自然。Fu等人开发了一种方法[10],该方法通过融合初始估计光照图的多重导数来调整光照。然而,这种方法有时会牺牲那些包含丰富纹理的区域的真实感。Guo等人着重于从初始图像[11]估计结构化光照图。这些方法通常假定图像是无噪声和无颜色畸变的,并且没有明确考虑图像的退化。在[12]中,为了获得更好的反射率和光照层,设计了一种用于同时进行反射率和光照估计的加权变分模型(SRIE),然后通过控制光照生成目标图像。在[11]之后,Li等人进一步引入了一个额外的式子来表示噪声[13]。虽然[12]和[13]都能抑制图像中的微小噪声,但它们在处理颜色失真和较大噪声方面能力不足。
Deep Learning-based Methods
随着深度学习的出现,一些底层的视觉任务从深度模型中受益,如去噪、超分辨率、压缩伪影去除、去雾。针对本文的目标任务,在[19]中提出的低光网络(low-light net, LLNet)构建了一个深度网络,作为同时进行对比度增强和去噪的模块。Shen等人认为多尺度retinex相当于具有不同高斯卷积核的前馈卷积神经网络。受此启发,他们构建了卷积神经网络(MSR-net)[20]来学习暗图像和亮图像之间的端到端映射。Wei等人设计了一个深度网络,称为RetinexNet[21],它集成了图像分解和光照映射。请注意,Retinex-Net额外使用了一个现成的去噪工具(BM3D[22])来使反射率组件的输出更清晰。这些策略都假设存在具有“地面实况”光的图像,而没有考虑到噪声对具有不同光的区域的不同影响。简单地说,在提取光照因子后,暗区在反射率上的噪声水平要比亮区高得多。在这种情况下,采用/训练具有在图像(反射率)上均匀处理的去噪器不再适用。此外,上述方法并没有明确处理彩色失真的退化问题,但这在真实图像中并不少见。最近,Chen等人提出了一种基于全卷积网络[23]端到端训练的低光图像处理管道(SID),可以同时处理噪声和颜色失真。然而,这项工作是针对raw格式的数据的,限制了其适用的场景。如[23]中所述,如果修改网络以接受JPEG格式的数据,性能会显著下降。
现有的大多数方法有通过伽玛校正来调整光照、指定一个存在良好光照图像的精心构造的训练数据(low-groudtruth图像对数据)、或者利用融合技术。对于伽玛校正,它可能无法反映不同的光(曝光)水平之间的关系。(参数的实际意义不明显)至于第二种方式,需要严格限制在指定的光照水平图像包含在训练数据中。而对于最后一个,它甚至不提供操作选项。(没办法调节光照)因此,需要学习一种映射函数,可以任意将一种光(曝光)级转换为另一种光(曝光)级,为用户提供灵活的调节。
Image Denoising Method
在图像处理、多媒体和计算机视觉领域,图像去噪一直是一个热门话题,在过去的几十年里提出了无数的技术。经典的模型/正则化问题利用一些自然清洁图像的特定先验,如非局部自相似,分段平滑性、信号(表示)稀疏性等。最受欢迎的方案可能是BM3D[22]和WNNM[24]。由于测试优化过程的高度复杂性和合适参数的搜索空间大,这些传统方法在实际应用中往往表现出不理想的性能。近年来,基于深度学习的去噪器在去噪任务上显示出了优越性。有代表性的SSDA使用栈式稀疏去噪自动编码器[25],[26],TNRD使用可训练的非线性反应扩散[27],DnCNN使用残差学习和批量归一化[15],仅在测试阶段进行前馈卷积运算,节省了计算量。然而,这些深度模型仍然存在图像去噪的盲目性。可以针对不同的层次训练多个模型,也可以训练一个具有大量参数的模型,这在实践中显然是不灵活的。通过在任务中考虑循环思想,这个问题得到了缓解。但是,上述方法都没有考虑到光照增强图像的不同区域承载不同级别的噪声。(暗处和亮处的噪声分布是存在极大差异的)同样的问题也发生在颜色失真上。
1.2 Our Contributions
该研究为实际解决低光增强问题提供了一个深度网络。这项工作的主要贡献可以总结为以下几个方面:
受视神经网络理论的启发,该网络将图像分解为反射率和照度两部分,将原空间解耦为两个较小的空间。
该网络使用在不同光/曝光条件下捕获的成对图像进行训练,而不是使用任何地面真实反射率和照明信息。
我们设计的模型提供了一个映射功能,可以根据用户的不同需求灵活地调整光线的等级。
该网络还包含一个模块,能够有效地去除通过亮暗区域放大的视觉缺陷。
我们进行了大量的实验,以证明我们的设计的有效性和它的优越性,可以替代目前最先进的技术。
2 METHODOLOGY
一个理想的低光图像增强器应该能够有效地去除隐藏在黑暗中的退化,并灵活地调整光照/曝光条件。我们建立一个深层的网络,用KinD来表示,来达到这个目的。如图2所示,网络由两个分支组成,分别用于处理反射率和照明。从功能上看,也可以分为图层分解、反射率恢复、光照调节三个模块。在接下来的小节中,我们将解释关于网络的细节。
2.1 Consideration & Motivation
2.1.1 Layer Decomposition
正如第1.1节所讨论的,普通方法的主要缺点来自于光照的盲目性。因此,获取光照信息是关键。如果从输入中很好地提取了光照,剩下的部分将保存细节信息和可能的退化,在这些信息中可以执行恢复(或降解去除)。在retinex理论中,一幅图像I可以被看作是两个成分的合成,即反射率R和照度L,I = R◦L,其中◦为元素级别的操作。此外,以Retinex的方式分解图像,从而将一个退化的低光图像映射到两个更小的子空间,期望更好和更容易正则化/学习。此外,照明图是灵活调整光照/曝光条件的核心。在此基础上,提出了基于retinex的层分解方法,该方法适用于目标任务。
2.1.2 Data Usage & Priors
在光照条件下,没有明确定义的地面实况。(主观意向)此外,真实图像的地面真实反射率和照度图是很难获得的。层分解问题本质上是欠定的,因此附加的先验/正则因子很重要。假设图像没有退化,某个场景的不同镜头应该具有相同的反射率。(物体对光的反射是固有属性,不因光照变化而变化)光照图虽然可以强烈地变化,但其结构简单且相互一致。(脱离物体反射,光照应该是分布简单的)在实际情况下,在低光图像中体现的退化往往比在明亮的图像中更严重,这将被转移到反射率组成部分。这启发我们,在明亮光照下的反射可以作为参考(地面实况),为退化的低光图像训练一个修复器。有人可能会问,为什么不使用合成数据呢?因为它很难合成。这种退化不是简单的形式,并且随着传感器的不同而变化。请注意,反射率(定义良好的)的使用完全不同于使用(相对)明亮的图像作为低光图像的参考。
2.1.3 Illumination Guided Reflectance Restoration
在分解后的反射率中,光照较暗区域的污染要大于光照较亮区域的污染。从数学角度来看,一个退化的低光图像可以自然地建模为I = R◦L + E,其中E表示污染的组成部分。通过简单的代数步骤,我们有:
˜R代表被污染的反射率,˜E是退化光照解耦。加性高斯白噪声的E∼N(0,σ2),˜E的分布更加复杂而且显著与L相关。这是说,反射恢复处理不能均匀的在整个图像上进行,可以用光照映射作为指导。有人可能会问,如果直接从输入I中移除E会怎么样?一方面,不平衡的问题仍然存在。从另一个角度看,内在的细节将会和噪音有差异地混淆。另一方面,与反射率不同的是,由于L的变化,我们不再有合适的参考来进行这种方式的降解去除。类似分析对其他类型的退化也适用,比如颜色失真。
2.1.4 Arbitrary Illumination Manipulation
不同的人/应用程序喜欢的照明强度可能是有差异的。因此,一个实用的系统需要为任意光照操作提供一个接口。在文献中,增强光条件的三种主要方法是融合、光级约化和伽玛校正。基于融合的方法,固定的融合模式缺乏光调节的功能。如果采用第二种方法,训练数据集必须包含具有目标光照水平的图像,这限制了它的灵活性。对于伽马校正,虽然可以通过设置不同的γ值实现,但它可能无法反映不同的光(曝光)水平之间的关系。本文提倡从真实数据中学习灵活的映射函数,允许用户指定任意的光照/曝光级别。
2.2 KinD Network
在思考和动机的启发下,我们构建了一个深层的神经网络来点亮黑暗,用KinD表示。下面,我们将从功能的角度详细描述这三个子网。
2.2.1 Layer Decomposition Net
从一个图像中恢复两个组件是一个高度不适定的问题。(适定问题是指定解满足下面三个要求的问题:① 解是存在的;② 解是唯一的;③ 解连续依赖于定解条件,即解是稳定的。这三个要求中,只要有一个不满足,则称之为不适定问题。)由于没有基于地面实况的信息指导,所以具有良好设计的损失是很重要的。幸运的是,我们有不同的光/曝光配置的成对图像[Il, Ih]。回想一下,某个场景的反射率应该在不同的图像之间共享,我们将分解的反射率对[Rl, Rh]调整为相近(理想情况下,如果没有退化,则两者应相同)。此外,光照映射[Ll, Lh]应该是分段光滑和相互一致的。采用下列定义。
反射率相似性损失:(不同光照的同一场景反射率应该相同)
光照平滑度损失:
这一平滑度测量对于I中的一个边缘位置上的惩罚很小;而对于I中的平坦区域的位置惩罚会很大。(光照在平滑的物体上分布应平滑)
相互一致性损失:(这个损失我的理解是在强化边缘信息,暗光和正常光的光照图梯度和较小或较大时表示此时的光照在平滑物体表面(分布均匀)或者边缘(光照分布差异较大),只有在梯度和不大不小时才惩罚,应该是两者一个梯度大一个梯度小的情况,也就是两个光照图有差异且差异不是特别大(因为有一个特别大也会使损失变小)的区域)
图4描述了函数的性质,其中c是控制函数形状的参数(代码中c取值为10)。从图4可以看出,随着u的增加,惩罚值先是上升,然后下降到0。这个特征很好的拟合了相互一致性。较强的互边应保留,较弱的互边应舍弃。我们注意到,设置c = 0会导致m上简单的一范数损失。此外,分解的两层应该重现输入,这受到重构误差的限制,定义为:
因此,层分解网的损失函数为:
层分解网络包含两个分支,分别对应于反射率和照度。反射率分支采用典型的5层UNet[29],之后是卷积层和Sigmoid层。光照分支由两个conv+ReLU层和一个conv层组成,它们连接在来自反射率分支的特征图上(可能会从光照中排除纹理),最后是一个Sigmoid层。详细的层分解网络配置如表1所示。(关于网络配置的table这里就不放了,可以去论文里查看具体设置)
2.2.2 Reflectance Restoration Net
如图3和图5所示,来自低光图像的反射率图比来自明亮光图像的反射率图更容易受到退化的干扰。利用更清晰的反射率作为混乱反射率的参考(非正式的地面实况)是我们的原则。对于寻找恢复函数,目标简单定义如下:
SSIM(··)为结构相似性度量,ˆR对应于恢复的反射。第三个式子致力于质地上的相似度。这个子网类似于层分解子网中的反射分支,但更深。示意图配置如图2所示,详细内容见附录。我们还记得,退化在反射上的分布复杂,且强烈依赖于照明分布。因此,我们将光照信息和退化的反射一起引入到恢复网络中。这个操作的有效性可以在图5中观察到。在两种不同退化(光)级的反射率图中,BM3D的结果可以一定程度的去除噪声(不考虑自然的颜色失真),但模糊效果还是几乎无处不在。在我们的结果中,窗口区域的纹理(例如灰尘/水基污渍)保持清晰和锐利,而在黑暗区域的退化被大量去除,细节(例如瓶子上的字符)得到很好的修复。此外,我们的方法还可以解决颜色失真的问题。反射恢复网络的具体配置如表2所示。
图三:左列:较暗的输入图及其分解的照度和(退化的)反射率图。右栏:较亮的输入及其对应的映射。三行分别对应于输入、照明映射和反射图。这些是测试图像。
图五:污染的反射率图(上),以及通过BM3D(中)和我们的反射率恢复网络(下)得到的结果。右栏对应于较左栏更重的退化(较低的光)水平。这些是测试图像
2.2.3 Illumination Adjustment Net
由于不存在用于图像的地面实况光照级别。因此,为了满足不同的需求,我们需要一种机制来灵活地将一种光照条件转换为另一种光照条件。我们有成对的照明图。虽然不知道之间的确切关系,我们可以大致计算强度的元素级比率α(Lt / Ls)。这个比例可以作为指标来训练一个调整函数从一个光照条件Ls到另一个标准Lt,如果调整光照的水平更高,则α> 1,否则α≤1。在测试阶段,α可以由用户指定。该网络是轻量级的,包含3个conv层(2个conv+ReLu和1个conv)和1个Sigmoid层。我们注意到指标α是作为输入的一部分扩展到一个特性映射上。(代码中是把这个比值扩展成一个常数通道与输入图像合并变成4通道)以下是照明调节网的损失函数:
ˆL是调整后的光照图。图6显示了我们的学习调整函数和伽马校正之间的差异。为了公平比较,我们通过优化参数γ达到类似的整体光强度。我们考虑了两个不失一般性的调整,包括调亮亮度和调暗亮度。图6 (a)为光源照明,(b)和(d)是经gamma校正后的结果,(c)和(e)是我们的方法。为了更清楚地显示这种差异,我们绘制了x = 100,200,400(这个地方x代表什么我没搞明白)(感谢评论区指出,x是在原图上取的横坐标位置,也就是下图中图a的那三条线)时的一维光照强度曲线。对于调暗亮度的情况,我们的学习方法在相对明亮的区域比伽玛校正在强度上减少得更多,而在黑暗区域减少得更少或几乎相同。对于调亮的情况,出现了相反的趋势。换句话说,我们的方法在相对较暗的区域增加较少的光照,而在较亮的区域增加更多或相同的光照。这种学习方式更符合实际情况。此外,α比γ方式更方便用户操作。例如,设置α为2意味着将光照*2。(????我怀疑)详细的照明调节网络配置如表3所示。
3 EXPERIMENTAL VALIDATION
3.1 Implementation Details
我们使用LOL数据集作为训练数据集,其中包括500个低/正常光图像对。在训练中,我们只使用了450个图像对,没有使用合成图像。对于层分解网,批量大小设置为10,patch大小设置为48x48。而反射率恢复网和照度调整网的批大小设置为4,patch尺寸设置为384x384。我们使用随机梯度下降(SGD)技术进行优化。整个网络在Nvidia GTX 2080Ti GPU和Intel Core i7-8700 3.20GHz CPU上使用Tensorflow框架进行训练。
3.2 Performance Evaluation
我们在很多数据集上评估了我们的方法,包括LOL[21]、LIME[11]、NPE[9]和MEF[30]。定量比较采用PSNR、SSIM、LOE[9]和NIQE[31]四个指标。PSNR和SSIM值越高表明质量越好,而LOE和NIQE值越低表明质量越好。竞争对手包括BIMEF[32]、SRIE[12]、CRM[33]、Dong[34]、LIME[11]、MF[35]、RRM[13]、Retinex-Net[21]、GLAD[36]、MSR[8]和NPE[9]。
表4报告了竞争对手在LOL数据集上的数值结果。对于每个测试低光图像,有一个“正常”光对应。因此,可以作为测量PSNR和SSIM的参考。从这些数字中,我们可以看到我们的方法明显优于其他所有方法。在非参考度量NIQE方面,我们也遥遥领先。但是,在LOE中,我们的方法似乎落后于许多方法。正如[11]的作者所述,使用低光输入本身来计算LOE是有问题的。我们应该选择一个可靠的参考。与计算PSNR和SSIM类似,我们再次使用对应图像作为参考(记作LOEref)。以这种方式,我们排在第三位,略低于CRM (977.3 vs 926.1)。对于LIME、NPE和MEF数据集,没有可用的参考图像。因此,我们只采用NIQE来评估所涉及方法之间的性能差异。在这个比较中,如表5所示,我们的种类比其他种类有明显的优势。特别的,kind在LIME和NPE数据集上胜过所有对手。对于MEF数据,它仅比CRM稍微差一点(3.34比3.27)。
此外,图7-13给出了不同光照条件下图像的一些视觉比较。从结果中我们可以看出,虽然大多数的方法在某种程度上可以使输入变亮,但是由于光的调节不理想和/或顽固的噪声和颜色失真所造成的严重的视觉缺陷仍然存在。我们的工作在这些情况下表现很好,光照调整适当并且退化明显地被删除。
4 CONCLUSION
在这项工作中,我们提出了一种深度网络,命名为KinD,用于低光增强。受retinex理论的启发,该网络将图像分解为反射率层和光照层。分解结果是将原始空间解耦为两个更小的子空间。由于地面实况反射率和照度信息都很少,因此可以使用在不同光/曝光条件下捕获的成对图像对网络进行交替训练。为了消除之前隐藏在黑暗中的退化,kind建立了一个修复模块。kind学习了映射功能,比传统的伽玛校正更符合实际情况,并能灵活调整光级。大量的实验表明,我们的设计明显优于最先进的技术。在目前的版本中,KinD在Nvidia 2080Ti GPU上处理VGA分辨率的图像需要不到50ms的时间。通过使用像MobileNet或轻量化这样的技术,我们可以进一步加速。
这篇关于低光图像增强论文Kindling the Darkness: A Practical Low-light Image Enhancer阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!