Single Image HDR Reconstruction Using a CNN with Masked Features and Perceptual Loss

  • 时间:
  • 来源:互联网
  • 文章标签:

有缘人看见了注意一些…里面有一些是机翻 的 写这个是用来提高我的阅读能力的 可能翻译的较差…做HDR的小伙伴可以一起交流啊

摘要

数码相机只能捕捉有限的真实场景的亮度,产生过饱和的图像。现有的单张图像HDR重建方法试图增大图像的亮度范围。但是却不能得到一个好的纹理,得到的结果在过饱和区域总是有伪影。在这片文章中我们提出了一个新奇的基于学习的方法去构建HDR图片-通过恢复输入的LDR图片的的过饱和区域的像素。先前基于深度学习的方法在曝光良好和饱和的像素上应用了相同的卷积滤波器,在训练过程中产生了二义性,并导致checkboard和halo artifical。为了克服这个困难我们提出了一个特征屏蔽机制-为了去降低过饱和区域对于特征的贡献。此外,我们采用基于VGG的感知损失函数为了能够合成一个视觉上令人满意的纹理。由于用于训练的HDR图像有限,我们使用两个阶段来训练我们的系统 ,具体来说,我们首先在大量图像上训练我们的系统以完成图像填充任务,然后在HDR重建上对其进行微调。因为很多包含平滑区域的HDR样本是很容易重建的,所以在HDR微调阶段,我们提出了一种采样策略来选择具有挑战性的训练patches。我们通过实验结果证明,我们的方法可以重建视觉上令人满意的HDR结果,比现在的最先进的方法的应用场景更广泛。

1 引言

真实世界的亮度在以个高的动态范围,但是标准的数字相机仅仅能够捕获有限的亮度。因此一个典型的相机生成的图片存在过曝光/低曝光区域。大量的方法被提出-这些方法是融合一组不同曝光的LDR图像去产生一张HDR图像。然而这些方法不得不去处理运动场景或者需要specialized bulky 和昂贵的曝光系统。通过使用一张图片重构HDR图片可以避免这些限制性的问题。这些方法能够在任何普通相机捕获的图像上工作并且从一个ldr图像恢复成全动态范围的图像。由于这些好处,最近吸引了好多学者的关注。
几个已经出现的方法使用启发式的规则去推断光照密度。但是这些方法不能够适当的恢复过饱和区域的光照度,因为他们没有利用上下文信息。另一方面,最近的深度学习的方法使用CNN系统地利用上下文信息得到了巨大的感知区域。然而这些方法通常会产生blurriness,checkboard,halo artifacts在饱和区域。
在这篇文章中,我们提出了新奇的技术来重建HDR图像—通过恢复一个LDR图片的饱和区域丢失的细节。我们由于两个观察结果来想象到我们的网络:第一:以前的方法应用相同的卷积滤波器在正常的和过饱和的像素在训练期间会产生二义性并且导致checkerboard和halo artifacts。第二:最近出现的方法,仅简单的利用pixel-wise损失函数,这个网络不能够在过饱和区域幻化出一个令人满意的信息,往往会产生blurry的结果。为了解决这些限制,我们提出了一个特征掩盖机制去减少过饱和区域对特征的贡献—by multiplying them to a soft mask。使用这个简单的策略,我们可以避免checkboard和halo artifacts.因为这个网络仅仅依赖输入图像的有效信息去产生HDR图像。另外,由于受到图像填充方法的启发,我们使用了基于VGG的感知函数,并且把它应用到HDR重构任务中去。通过在训练中最小化我们提出的感知损失函数,这个网络可以在饱和区域合成一个真实的纹理
由于训练一个深度神经网络需要大量的HDR图像,这在当前是不可能实现的。因此我们把训练分成俩个步骤。首先我们在大量的图片中训练我们的网络为了图片填充任务。在这一阶段,这个网络利用大量的训练样本去学习一个internal representation-----这个representation 有能力在不完整的区域合成真实的纹理。之后,我们在HDR重建任务中微调我们的网络--------使用一系列模拟的LDR图像和相应的真实的HDR图片。因为许多HDR样本包含平滑的区域而这些平滑的区域又是很容易构建的,我们提出了一个简单的方法去验证纹理patches,并且仅仅使用他们微调。
我们的方法可以重构那些高亮度和搓纹理的过饱和区域就像在图片一中显示的那样
我们说明我们的方法可以产生比先前的方法更好的结果(图7)总的来说我们做了如下贡献:
1. 我们提出了一个特征掩盖机制避免了利用过饱和区域的无效的信息(3.1)这个方法降低了伪影提高了最终结果的质量。(图10)
2. 我们采纳了基于VGG的感知损失函数在我们的HDR重建任务中,与pixel-wise 损失函数比较,我们的损失函数可以在饱和区域重建尖锐的纹理
3. 我们提出了预训练网络(impainting)在微调HDR重建网络之前。在3.3节我们说明我们的预训练阶段对于在过饱和区域合成令人满意的纹理是很重要的。
我们提出了一个简单的策略去识别HDR区域的纹理(为了改善训练的性能3.4),这个策略可以改善这个网络重建sharp 细节的能力。

相关的工作:

单张HDR重建问题(也被称作逆色调映射),在过去的十年里已经被广泛研究,然而这个问题依旧是一个大的挑战,因为它需要从丢失细节的区域恢复这些细节。在这一部分,我们将讨论出现的方法,并把他们分为两类-非线性的和基于学习的方法。

非线性的方法:

几个已经提出的方法使用**全局操作**来执行逆转相机管道,Landis使用一个线性的或者指数函数在在LDR图像上的某个临界像素点,Bist approximates 色调 expansionton通过gamma函数,他们使用人类视觉系统的特征去设置gamma曲线。Luzardo 改善了结果的亮度---通过利用一个基于mid-level mapping的操作。
大量的方法被提出去处理这个问题使用了local heuristics。banterle使用了一个median-cut去发现高亮度区域。他们之后生成了一个扩展图去扩展这些区域的亮度范围,使用的是一个逆操作。Rempel 同样也使用了一个扩展图,但是使用了一个高斯滤波跟上一个边缘停止函数去增强饱和区域的亮度。Kovaleski和Oliveria使用了一个交叉双边滤波扩展了Rempel的方法。这些方法仅仅通过一个启发式的方法去推断光照密度。因此通常很失败的恢复饱和区域的亮度并且引起不自然的伪影。

还有很少的方法提出去处理这个问题,通过在他们的系统中使用用户交互。Didyk通过使用一个半自动的分类器去区分饱和区域分为光照,反射,diffuse surface。Wang 恢复饱和区域的纹理通过转移用户选择区域的纹理。他们这些方法需要用户数交互,甚至需要一个专家级别的用户 。与这些方法相反,我们提出了一个基于学习的方法从一个广范的不同的场景去重构HDR图像。而不是依赖基于推理的策略和用户交互。

基于学习的方法

最近几年,一些提出的方法处理这些问题使用深度卷积网络,给定一张LDR图像,Endo等人使用了一个自动编码器去生成一系列的不同曝光的LDR图像。之后把这些LDR图像结合形成最终的HDR图像。Lee chain 一系列的CNN去顺序的生成一组LDR图像。之后他们提出【Lee 2018b】去处理这个问题通过一个递归的有条件的gan和一个pixel-wise L1损失。
与这些方法相反,很少的一些方法【Eilertsen,marneries,Yang】直接重建HDR图像而不是使用一组生成的LDR图像,Eilersten 使用了一个U-net结构的网络去预测饱和区域的值,线性不饱和区域是通过输入得到的。Marnerides 提出了一个新奇的专注结构(dedicated architecture) 为了端到端的 image expansion。Yang 重构HDR图像为了图像修正的应用。他们训练一个HDR重建网络—给定一个输入的LDR图像可以恢复丢失的细节。之后第二个网络把这些细节追溯到LDR区域。
尽管这些方法产生了领先的结果,他们合成的图像在饱和区域依旧包含checkboard artifacts 并且缺少纹理。这些的主要原因是因为标准的卷积层和pixel-wise损失函数。
注意到,几个最近的方法(Kim,Lee,Ning,Xu)使用一个对抗损失而不是pixel-wise损失函数,但是他们依旧没有令人说服的结果和高质量的纹理。可能的原因是HDR重构问题有场景限制,合成的内容应该和输入的图像适配(使用一个soft mask)。不幸的是,Gan很难去处理这个困难的问题。相反,我们提出了一个 feature masking strategy和一个约束性很大的VGG-based perceptual 损失去有效的训练我们的网络,并且产生了一个令人满意的视觉效果。

3方法

我们的目标是从一张LDR图像重构HDR图像通过恢复过饱和区域丢失的细节。我们使用了一个卷积网络来完成这个任务----采用一个LDR图像作为输入,估计丢失的HDR图像的在光照区域的信息。我们计算最终HDR图像通过结合输入图像的正常曝光和网络输出的过饱和区域。我们通过如下构建最终的HDR图像 H ^ \hat{H} H^,如下所示:
在这里插入图片描述
g a m m a = 2.0 gamma=2.0 gamma=2.0被用来去把输入图像转换到线性域。 ⋯ \cdots 描述了按元素的乘法。这里T是在[0,1]范围内的输入LDR图像, Y ^ \hat{Y} Y^是对数域的网络输出(3.2),M是一个soft mask,其值在[0,1]范围内,它定义了每个像素的曝光程度,我们通过函数 β ( ⋅ ) \beta(·) β()得到该mask,对于输入图像 M = β T M=\beta{T} M=βT。在接下来的部分我们将讨论我们提出的feature masking 方法,损失函数,还有训练过程
在这里插入图片描述

3.1Feature Masking

标准卷积层对整个图像应用相同的过滤器来提取一组特征。这个得到了广泛且合理的应用,如图像超分辨率,风格迁移,图像着色,而这些应用中整个图像都包含有用的信息。然而在我们的问题中输入的LDR图像在过饱和区域包含了无用的信息。由于无法从过饱和的区域中抽取有用的信息,单纯应用标准卷积会在训练中引入二义性,并导致伪影。
我们提出了一个 features masking 机制来解决这个问题并且降低了在无效区域生成的特征的大小。我们将每一层的特征图乘以一个soft mask,如下所示:

在这里插入图片描述
X L ∈ R H × W × C X_L \in R^{H \times W \times C} XLRH×W×C是L层的的特征图, 高H,宽W,通道数是C。 M L ∈ [ 0 , 1 ] H × W × C M_L \in [0,1]^{H \times W \times C} ML[0,1]H×W×C是第L层的mask,它的值的范围是在[0,1]。 值1表示特征是从有效的输入像素计算得到的,0表示从无效像素计算得到的特征。其中l=1为输入层,因此 X L = 1 X_{L=1} XL=1为输入LDR图像。类似的 M L = 1 M_{L=1} ML=1是输入的掩码 M = β ( T ) M=\beta(T) M=β(T)。注意到,由于i我们的mask是soft的。使用这种策略的话在饱和区域的弱信号不被丢弃。事实上,通过抑制无效像素,这些弱信号可以更有效地在网络中传播。
一旦当前层L的特征被mask。下一层的特征将被如下的方式计算:
在这里插入图片描述
W l 和 b l W_l和b_l Wlbl是当前层的权值和偏差,乃个圈圈是激活函数,是标准的卷积操作。
我们通过将卷积滤波器应用于上一层的mask来计算每一层的mask。其基本思想是,由于特征是通过应用一系列卷积来计算的,可以使用相同的过滤器来计算特征图中有效像素的贡献。然而,由于mask在[0,1]范围内并度量贡献的百分比,所以滤波器的大小无关紧要。因此,我们在将滤波器权值与掩模进行卷积之前进行归一化,如下所示:
在这里插入图片描述
∣ W L ∣ |W_L| WL是一个H
WC的tensor, ∣ ∣ ∣ W l ∣ 1 |||W_l|_1 Wl1是一个11*C的tensor。 为了执行除法,我们复制 ∣ ∣ ∣ W l ∣ 1 |||W_l|_1 Wl1的值得到了一个与|W_L|大小相同的张量。常数ϵ是一个很小的值,以避免除0( 1 0 − 6 10^{-6} 106)。
:注意,最近的一些方法提出了一些策略来克服图像inpaint中的类似问题[liu ,YU].具体来说,Liu等人提出修改卷积的过程只对含有有效信息的像素进行滤波。不幸得是,这个方法是专门为二进制mask设计的。但是我们需要的mask是soft的所以这个方法不合适,YUE提出了使用soft mask在每一层复合特征,像极了我们的策略。关键的区别是它们在每一层的mask是可学习的,它是使用一个小的网络从前一层的特征估计。由于额外的参数和复杂性,在有限的HDR数据集使用这种方法训练是困难的。因此,这种方法不能产生高质量的HDR图像。
## 3.2损失函数
损失函数的选择在每个模型中都是至关重要的。我们的目标是通过合成过饱和区域似是而非的纹理来重建HDR图像。不幸的是,如同现有的一些方法一样,仅仅使用像素级的损失函数,那么网络倾向于出现blurry 的图像,受到最近的图像 impainting 方法的启发,我们使用了基于VGG的感知损失函数来训练我们的网络。特别的,我们的损失是有HDR重构损失和感知损失组成。如下所示:
在这里插入图片描述
其中1,2的参数分别为6.0和1.0。
重构损失::HDR重构损失是在过饱和区域输出和真实图像之间的一个简单的像素级l1距离。由于HDR图像可能具有较大的值,因此我们在对数域中定义损失。考虑到估计HDR图像 Y ^ \hat{Y} Y^(在对数域)和线性H地面实况图像,重建损失被定义为:
在这里插入图片描述
乘以(1−M)保证了在过饱和区域计算损失。
我们的感知损失是VGG和STYLE LOSS的结合
在这里插入图片描述
在我们的改善中,我们设置3=1.0和4=120.0.VGG损失是评估重建的特征和真实抽取的特征的匹配程度。这将使得模型产生感觉上与真实图片匹配的纹理。其中的VGG损失被定义为如下所示:
在这里插入图片描述
其中ϕ(l)是从VGG网络的第l层提取的特征图.并且,图像 H ^ \hat{H} H^是通过结合在很好曝光区域的场景J和网络在过饱和区域使用mask输出内容 Y ^ \hat{Y} Y^得到的:
在这里插入图片描述
使用这个损失函数确保了仅仅监督饱和区域。
最后我们使用了如下所示的函数压缩到[0,1]的范围内,特别的,我们使用U来调节压缩范围
在这里插入图片描述
这样做是为了确保VGG网络的输入与它所接受的训练相似。
同理对于style loss又做了一番解释:
在这里插入图片描述
在这里插入图片描述

3.3 Inpainting Pre-training

训练困难,由于目前大规模的HDR数据集很难找到。现有技术通过在模拟HDR图像上对其网络进行预训练来克服此限制,该模拟HDR图像是从诸如MIT Places之类的标准图像数据集创建的。然后他们在真实的HDR图像上微调他们的网络。不幸的是我们的网络没有办法去学习这种策略去合成似是而非的纹理。因为饱和的区域通常是在明亮或者平滑的区域。
为了解决这个问题,我们决定在网络上进行图像填充的预训练。直观的来说,我们的网络利用了大量的数据去学习一个内在的表示能够合成视觉上令人满意的纹理。在HDR微调阶段,网络将学习到的表示用到HDR域使得其能合成好的HDR纹理。我们使用了LIU的方法,并且使用了他们的损失函数和mask生成策略在预训练阶段。值得注意的是,我们预训练使用了我们的feature mask机制,但是输入掩码是二进制的。我们在真实的HDR图像中微调我们的网络,使用了第二部分提到的损失函数。
一个主要的问题是在HDR图像的明亮区域是光滑的和无纹理的。但是由于在微调阶段,网络使用了这些不好的区域(patch)所以产生一个好的纹理效果有很大的困难。在接下来的一部分中,我们将讨论我们的策略在选择纹理和挑战性的patch方面。

3.4 patch Sampling

我们的目标是在过饱和区域选择包含纹理的补丁。我们执行这个操作的第一步是为每个补丁计算一个分数。之后选择分数较高的补丁。这里的一个挑战是找到一个好的标准正确的鉴定纹理块。一种方法是计算过饱和区域的梯度大小的平均值 。然而,由于我们的图像是在HDR中,可以有很大的值,该方法可以检测出具有明亮高光的光滑区域作为纹理。
为了避免这个问题,我们建议首先使用双边滤波器将HDR图像分解为基础层和细节层。我们使用饱和区域的细节层的梯度平均值(Sobel算子)作为我们的度量来检测纹理块。我们将所有平均梯度高于某个阈值(在我们的实现中为0.85)的补丁都视为有纹理的,其余的则归为平滑的。因为细节层只包含基本层的变化,这个度量可以有效地测量一个HDR补丁中的纹理数量。图5显示了使用此指标选择的补丁示例。图11所示,这种简单的patch采样方法对于在饱和区域合成具有清晰和无人工痕迹的HDR图像至关重要。算法1总结了我们的patch选择策略

4 IMPLENTATION

我们使用U-Net架构的网络。如图6所示。我们使用特征掩蔽策略在所有卷积层和 并且在解码器端使用最邻近插值法进行上采样。在编码器端使用Leaky Relu激活函数。另一方面,我们使用了Relu函数在所有的解码层,除了最后一层是一个线性激活函数。我们使用跳连结构在我们的对应的编解码层之间。
数据集:我们在每个训练步骤中选择不同的数据集。在图像修补阶段,我们使用了MIT Place的原始训练集,测试集,和验证集。我们选择这个数据集是因为这个数据集包含大量的场景和不同的纹理(约2.5m个图像)。我们使用liu的方法去生成具有任意大小和形状的随机条纹和hole的mask。HDR微调阶段,我们从738个HDR图片和34个HDR视频中收集到了2000张HDR图片。我们随机抽取了250个大小为512*512的块生成了LDR块(这是 Eilertsen)的方法。然后我们使用我们的patch选择策略从这些patch中选择一个子集。我们把那些没有饱和内容的补丁抛弃。因为他们对这个网络的学习没有任何帮助。我们最终的训练数据集是一组100K的输入和对应的真实patch。
训练:我们使用Xavier方法对我们的网络进行初始化并且在图像修补任务中训练他直到收敛。然后我们在HDR重建上微调网络。在两个阶段我们都以 2 × 1 0 − 4 2×10^{−4} 2×104的学习率训练网络。但是在第二阶段,当优化停滞时,我们将学习率降低了2.0倍。执行这个收敛过程直到收敛。图像修补和HDR重建都使用了Adam网络进行优化。默认参数是$ \beta_1=0.9 \beta_2=0.999$最小批量是4。在一台配备16GB内存的英特尔酷睿i7和Nvidia GTX 1080 Ti GPU的机器上,整个训练大约需要11天。

5结果

我们在PyTorch中实现我们的网络,但是使用C++进行数据预处理、数据扩充和patch采样。我们使用PyTorch中现有的标准卷积层来实现feature mask机制。我们将我们的方法与三个基于学习的方法进行比较。我们使用作者提供的源代码为所有其他方法生成结果。

5.1 Synthetic images

我们首先将我们的方法与其他方法在均方误差和HDR-VDR-2方面进行定量比较。误差是在75张随机选择的HDR图像的测试集上计算的,分辨率1024×768 ~ 2084×2844。我们使用不同的相机曲线和曝光来生成输入的LDR图像,类似于Eilertsen等人的方法。我们在经过伽马校正的图像上计算MSE值,并在线性HDR图像上获得HDR-VDP-2分数。我们在经过伽马校正的图像上计算MSE值,并在线性HDR图像上获得HDR-VDP-2分数。接下来,我们将在图7中的五个具有挑战性的场景上将我们的方法与其他方法进行比较。总的来说,其他的方法不能合成纹理并产生blurriness、discoloration和checkerboard artifacts的结果。然而,我们的方法可以有效地利用非饱和颜色通道中的信息和背景信息来合成视觉上令人满意的纹理。值得注意的是,虽然我们的方法是用感知损失训练的,但它仍然可以正确地恢复明亮的亮点。例如,图7(第五行)中我们的结果与Eilertsen等人相似,优于Endo等人和Marnerides等人。在图8中,我们还证明了我们的方法可以在具有不同饱和区域的图像上始终如一地产生高质量的结果. 可以看出,当输入LDR图像中饱和像素的百分比增加时,其他所有方法的结果都会迅速下降。另一方面,我们的方法能够产生高质量的结果,在所有的情况下具有鲜明的细节和明亮的亮点。

5.2真实的图像

我们通过在一组用标准相机捕获的真实图像上生成结果来展示我们方法的通用性.(如图9所示.).具体来说,前三幅图像来自谷歌HDR+ dataset–各种智能手机都能捕获到的.最后一行的图像是由佳能5D Mark IV相机拍摄的.其他方法都不能很好地重建饱和区域,结果如箭头所示出现变色和模糊.我们的方法是能够适当地增加动态范围合成真实的纹理

5.3Ablation Studies

inpainting pre-training:我们通过对比表2和图11中常用的合成HDR预训练来研究我们提出的inpaint预训练步骤的效果.如所见,我们的预训练(“FMask + Inp”)。“预训练(我们的)”)的表现优于HDR预训练(“FMask + HDR预训练”) 我们的网络使用inpainting 预训练能够学习更好的特征,并在饱和区域合成sharp的纹理。
Feature Masking: 这里,我们将特征屏蔽策略与表2中的其他几种方法进行比较。具体来说,我们比较了我们的方法与标准卷积(SConv),门控卷积,掩码(MASK 二进制)策略的简单版本是掩码只应用于输入(Imask).为了完整起见,我们包括了每种方法的结果,包括inpainting和HDR预处理.正如所看到的,我们的mask策略比其他方法要好得多.值得注意的是,与其他方法不同,采用inpainting预处理的门控卷积的性能要比HDR预处理差.这主要是因为门控卷积使用单独的一组网络来估计每一层的mask,而这些网络在从inpainting预训练过渡到HDR微调之后就变得不稳定了…
在图10中,我们还将我们的特征掩蔽方法与标准卷积进行了可视化比较/…标准卷积很渣…而我们的效果很好. 还比较了mask策略…发现配对是GCONV配HDR预训练. Imask配inpainting预训练. 但是综合之后我们的方法最优秀.
Patch Sampling: 不采用patch sampling和采用的比较之后我们发现我们的方法很好产生了很好的细节.
Loss Function: 用感知损失函数与L1损失比较.证明效果很好.

6限制和将来的工作…

单图像HDR重建是一个非常具有挑战性的问题. 虽然我们的方法可以恢复亮度和幻觉纹理,但并不总是能够重建所有的细节.:图13(上)显示了其中一种情况,其中我们的方法无法重建窗帘上的褶皱。当输入缺少关于底层纹理的足够信息时,我们的方法可能会生成真实图像中不存在的纹理.值得注意的是,由于在训练数据中树木和天空通常是相邻的,所以网络将建筑重建成蓝色。正如所看到的,其他方法也用蓝色重建了部分建筑.虽然我们的网络可以从一个LDR视频重建一个HDR视频,但我们的结果不是时域上稳定的.这主要是因为我们独立地合成每一帧的内容.在未来,通过时间规则化来解决这一问题将是很有趣的.此外,我们希望对网络架构进行实验,以提高我们的方法的效率并减少内存占用

本文链接http://www.taodudu.cc/news/show-1781992.html