Kindling the Darkness: A Practical Low-light Image Enhancer
Motivation
在图像增强问题中,没有真正的ground truth存在,因为人们最喜欢的光照水平并不相同。因此,仅将图像映射到具有特定光线水平的图像并不是很合适。
•如何从单个图像有效地估计照明分量,并灵活地调节光线水平?
•提升黑暗区域亮度后,如何消除以前隐藏在黑暗中的噪声和色彩失真之类的退化?
•如何在没有明确ground-truth的情况下训练模型以进行低光图像增强(仅参考几个图像)?
abstract
该网络受到Retinex理论的启发,将图像分解为两个部分。 一种成分(illumination)负责调光,而另一种(reflectance)负责去除颜色衰退。 以这种方式,原始空间被解耦为两个较小的子空间,期望可以更好地进行正则化/学习。 网络使用在不同曝光条件下拍摄的配对图像进行训练的,而不是使用任何地面真实的反射和照明信息。
main contributions
The main contributions of this work can be summarized in the following aspects.
- 该网络受到Retinex理论的启发,将图像分解为illumination和reflectance两部分,从而将原始空间解耦为较小的部分
- 该网络使用在不同光照/曝光条件下捕获的成对图像进行训练,而不是使用任何ground-truth的illumination和reflectance信息。(这个很好)
- 我们设计的模型提供了一个映射功能,可以根据用户的不同需求灵活地调整亮度。(这个好)
- 该网络还包含了一个模块,能够有效地去除通过照亮黑暗区域而放大的视觉缺陷。 (哪些缺陷啊?后面注意)
- 广泛的实验被进行,以证明我们的设计的有效性和优越性的先进方案。(这句话是为了凑字数吗?学习一下)
具体一点
好的弱光图像增强器应能够有效消除暗处隐藏的退化,并灵活地调整光线/曝光条件。
从功能上来说,可以分为 layer decomposition, reflectance restoration, 和illumination adjustment三个模块。
Layer decomposition
根据Retinex理论可对输入进行分解,illumination map是灵活调整光线/曝光条件的关键。
Data Usage & Priors
没有光照条件确定的ground-truth。没有/很少有ground-truth的reflectance 和illumination 。layer 分解问题本质上是不确定的,因此,其他priors/regularizers 很重要。假设图像没有退化,则特定场景的不同镜头应有相同的reflectance 。 尽管illumination map可能会发生很大变化,但它们具有简单且相互一致的结构。 在实际情况下,弱光图像中体现的退化通常比明亮图像中的退化更严重,这将在reflectance 部分修复。
这启发了我们,在相对强光下图像的reflectance 可以作为从退化的低光下图像的反射的参考(ground-truth)。 有人会问为什么不使用合成数据? 因为很难合成。 不同传感器会造成不同形式的衰退。
Illumination Guided Reflectance Restoration
数学模型上,衰退的低光照图像可以表示为
I
=
R
∘
L
+
E
\mathbf{I}=\mathbf{R} \circ \mathbf{L}+\mathbf{E}
I=R∘L+E,
E
\mathbf{E}
E是衰退分量,所以我们有:
I
=
R
∘
L
+
E
=
R
~
∘
L
=
(
R
+
E
~
)
∘
L
=
R
∘
L
+
E
~
∘
L
\mathbf{I}=\mathbf{R} \circ \mathbf{L}+\mathbf{E}=\tilde{\mathbf{R}} \circ \mathbf{L}=(\mathbf{R}+\tilde{\mathbf{E}}) \circ \mathbf{L}=\mathbf{R} \circ \mathbf{L}+\tilde{\mathbf{E}} \circ \mathbf{L}
I=R∘L+E=R~∘L=(R+E~)∘L=R∘L+E~∘L
R
~
\tilde{\mathbf{R}}
R~代表衰退的Reflectance 。Reflectance 恢复不可能在整幅图像上进行均匀处理,illumination图可以作为一个很好的向导。
Arbitrary Illumination Manipulation
不同的人/应用程序喜欢的照明强度可能非常不同。 因此,实际系统需要提供用于任意照明操纵的接口。实际系统需要为任意照明操作提供一个接口。在文献中,增强光条件的三种主要方法是融合、光级预约和伽马校正(fusion, light level appointment, and gamma correction.)。基于fusion的方法,由于固定的融合模式,缺乏对光的调节功能。如果采用第二种,训练数据集必须包含目标级别的图像,这限制了它的灵活性。对于伽马校正,虽然它可以通过设置不同的值来达到目的,但它可能不能反映不同光(曝光度)水平之间的关系。本文提倡从真实数据中学习一个灵活的映射函数,它允许用户指定任意的光/曝光级别。
Method
Layer Decomposition Net
在retinex理论中,输入图片分解为reflectdance与illumination map。同时假定,在不考虑图片退化(噪声、颜色失真等)情况下,相同场景下的不同曝光的图片的reflectdance应该相同,illumination maps应该平滑。所以通过decomposition network输出的low reflectance作为restoration network的输入,用来生成增强图片;而high reflectance maps用作ground truth,有监督地同restoration network的输出图片计算loss。
decomposition network分为两个branches,一个是类U-Net结构,加上sigmoid layer,用于生成reflectance maps;另一个是由简单的卷积层和sigmoid layer组成,用于生成illumination maps。
总loss:
L
L
D
:
=
L
r
e
c
L
D
+
0.01
L
r
s
L
D
+
0.08
L
i
s
L
D
+
0.1
L
m
c
L
D
\mathcal{L}^{L D}:=\mathcal{L}_{r e c}^{L D}+0.01 \mathcal{L}_{r s}^{L D}+0.08 \mathcal{L}_{i s}^{L D}+0.1 \mathcal{L}_{m c}^{L D}
LLD:=LrecLD+0.01LrsLD+0.08LisLD+0.1LmcLD
reflectance similarity loss:
L
r
s
L
D
:
=
∥
R
l
−
R
h
∥
2
2
\mathcal{L}_{r s}^{L D}:=\left\|\mathbf{R}_{l}-\mathbf{R}_{h}\right\|_{2}^{2}
LrsLD:=∥Rl−Rh∥22
illumination smoothness loss:
L
i
s
L
D
:
=
∥
∇
L
l
max
(
∣
∇
I
l
∣
,
ϵ
)
∥
1
+
∥
∇
L
h
max
(
∣
∇
I
h
∣
,
ϵ
)
∥
1
\mathcal{L}_{i s}^{L D}:=\left\|\frac{\nabla \mathbf{L}_{l}}{\max \left(\left|\nabla \mathbf{I}_{l}\right|, \epsilon\right)}\right\|_{1}+\left\|\frac{\nabla \mathbf{L}_{h}}{\max \left(\left|\nabla \mathbf{I}_{h}\right|, \epsilon\right)}\right\|_{1}
LisLD:=∥∥∥max(∣∇Il∣,ϵ)∇Ll∥∥∥1+∥∥∥max(∣∇Ih∣,ϵ)∇Lh∥∥∥1
L
\mathbf{L}
L表示illumination,
I
\mathbf{I}
I表示输入。这个loss的意思是输入图梯度小点的地方,网络对它的illumination值更敏感(不能大,最好不变)。
mutual consistency loss(这个loss什么含义,问问别人):
L
m
c
L
D
:
=
∥
M
∘
exp
(
−
c
⋅
M
)
∥
1
\mathcal{L}_{m c}^{L D}:=\|\mathbf{M} \circ \exp (-c \cdot \mathbf{M})\|_{1}
LmcLD:=∥M∘exp(−c⋅M)∥1,
M
:
=
∣
∇
L
l
∣
+
∣
∇
L
h
∣
\mathbf{M}:=\left|\nabla \mathbf{L}_{l}\right|+\left|\nabla \mathbf{L}_{h}\right|
M:=∣∇Ll∣+∣∇Lh∣
reconstruction error loss:
L
r
e
c
L
D
:
=
∥
I
l
−
R
l
∘
L
l
∥
1
+
∥
I
h
−
R
h
∘
L
h
∥
1
\mathcal{L}_{r e c}^{L D}:=\left\|\mathbf{I}_{l}-\mathbf{R}_{l} \circ \mathbf{L}_{l}\right\|_{1}+\left\|\mathbf{I}_{h}-\mathbf{R}_{h} \circ \mathbf{L}_{h}\right\|_{1}
LrecLD:=∥Il−Rl∘Ll∥1+∥Ih−Rh∘Lh∥1
网络看大图。
Reflectance Restoration Net
暗光图像的reflectance maps会比正常曝光图片的reflectance maps情况糟糕很多,所以这里需要用正常曝光的reflectance maps作为监督,计算loss来约束,同时也需要illumination maps提供指导,最终增强图片。
L R R : = ∥ R ^ − R h ∥ 2 2 − SSIM ( R ^ , R h ) + ∥ ∇ R ^ − ∇ R h ∥ 2 2 \mathcal{L}^{R R}:=\left\|\hat{\mathbf{R}}-\mathbf{R}_{h}\right\|_{2}^{2}-\operatorname{SSIM}\left(\hat{\mathbf{R}}, \mathbf{R}_{h}\right)+\left\|\nabla \hat{\mathbf{R}}-\nabla \mathbf{R}_{h}\right\|_{2}^{2} LRR:=∥∥∥R^−Rh∥∥∥22−SSIM(R^,Rh)+∥∥∥∇R^−∇Rh∥∥∥22
Illumination Adjustment Net
参数α用来调整illumination maps的亮度,通过(Lt / Ls)再算平均,得出。t为target,s为source;当α>1时,增亮,α小于1时变暗。最关键的是,这里的参数α是可以自己设定的,即想要多亮就要多亮,非常灵活。实际上α在网络中实际上是一张feature map,加权到原有的illumination maps上。
L
I
A
:
=
∥
L
^
−
L
t
∥
2
2
+
∥
∣
∇
L
^
∣
−
∣
∇
L
t
∣
∥
2
2
\mathcal{L}^{I A}:=\left\|\hat{\mathbf{L}}-\mathbf{L}_{t}\right\|_{2}^{2}+\left\||\nabla \hat{\mathbf{L}}|-\left|\nabla \mathbf{L}_{t}\right|\right\|_{2}^{2}
LIA:=∥∥∥L^−Lt∥∥∥22+∥∥∥∣∇L^∣−∣∇Lt∣∥∥∥22