论文及代码:https://sites.google.com/view/lerenhanli/homepage/semi_su_dehazing
代码:https://github.com/yunlongdong/semi-dehazing
目录
1. 摘要
本文提出了一种有效的半监督学习算法用于单幅图像去雾。该算法采用一个包含监督学习分支和一个无监督学习分支的深度卷积神经网络(CNN)。在监督分支中,深层神经网络受监督损失函数(均方损失、感知损失和对抗损失)的约束。在无监督分支中,我们利用干净图像的稀疏性和梯度先验来约束网络。我们以端到端的方式在合成数据和真实世界图像上训练所提出的网络。实验结果表明,所提出的半监督学习算法不仅适用于合成训练数据集,而且可以很好地推广到实际图像中。大量的实验结果表明,该算法在基准数据集和真实图像上均优于现有的单幅图像去雾算法。
2. 半监督方法
现有的基于深度CNN的图像去雾算法通常是在有监督学习框架内进行的,其局限于特定的合成训练数据。本文提出了用半监督学习方法来解决这个问题。
文中使用带标签数据集
{
I
i
,
J
^
i
}
i
=
1
N
l
\{I_i, \hat{J}_i\}^{N_l}_{i=1}
{Ii,J^i}i=1Nl和无标签数据集
{
I
i
}
i
=
1
N
u
\{I_i\}^{N_u}_{i=1}
{Ii}i=1Nu来训练提出的深度CNN。其中
N
l
N_l
Nl和
N
u
N_u
Nu表示带标签和无标签训练图像的数量。
I
i
I_i
Ii和
(
^
J
)
i
\hat(J)_i
(^J)i分别表示第
i
i
i张雾图和相应的ground truth。
2.1 网络结构
网络框架如下:
网络结构:
残差块结构:
2.2 损失函数
2.2.1 监督损失
1) Mean Squared Loss
均方误差定义为:
L
c
=
1
N
l
∑
i
=
1
N
l
∣
∣
J
i
−
J
^
i
∣
∣
2
L_c = \frac{1}{N_l} \sum^{N_l}_{i=1}{||J_i-\hat{J}_i||}_2
Lc=Nl1i=1∑Nl∣∣Ji−J^i∣∣2
2) Perceptual Loss
本文使用在ImageNet进行预训练的VGG-19网络的Conv3-3层提取的特征图,求感知损失。基于VGG-19的感知损失定义为:
L
p
=
1
N
l
∑
i
=
1
N
l
∣
∣
F
J
i
−
F
J
^
i
∣
∣
2
L_p = \frac{1}{N_l} \sum^{N_l}_{i=1} {||F_{J_i} - F_{\hat{J}_i}||}_2
Lp=Nl1i=1∑Nl∣∣FJi−FJ^i∣∣2
其中 F J i F_{J_i} FJi和 F J ^ i F_{\hat{J}_i} FJ^i分别表示去雾图 J J J和其相应的ground-truth J ^ \hat{J} J^的特征图。
3) Adversarial Loss
本文加入了GAN模型中的判别器
D
i
s
D_{is}
Dis,来获得相应的对抗损失。
D
i
s
D_{is}
Dis的结果如下:
对抗损失定义为:
L
a
=
E
J
^
[
l
o
g
D
i
s
(
J
^
)
]
+
E
J
[
l
o
g
(
1
−
D
i
s
(
J
)
)
]
L_a = \mathbb{E}_{\hat{J}}[logD_{is}(\hat{J})] + \mathbb{E}_J[log(1-D_{is}(J))]
La=EJ^[logDis(J^)]+EJ[log(1−Dis(J))]
2.2.2 无监督损失
无监督损失采用总变差损失和暗通道损失,以生成与ground truth具有相同统计特性的图像。
1) Total Variation Loss
总变差损失,即无监督分支预测图像的
l
1
l_1
l1-正则化梯度,用于保存结构和细节。损失定义如下:
L
t
=
1
N
u
∑
i
=
1
N
u
(
∣
∣
∇
h
J
i
∣
∣
1
+
∣
∣
∇
v
J
i
∣
∣
1
)
L_t = \frac{1}{N_u} \sum^{N_u}_{i=1}({||\nabla_h J_i||}_1 + {||\nabla_v J_i||}_1)
Lt=Nu1i=1∑Nu(∣∣∇hJi∣∣1+∣∣∇vJi∣∣1)
其中, ∇ h \nabla_h ∇h和 ∇ v \nabla_v ∇v代表水平和竖直梯度运算操作。
2) Dark Channel Loss
清晰图像的暗通道已经被证明比雾图的暗通道稀疏。暗通道表示为:
D
(
I
)
=
min
y
∈
N
(
x
)
[
min
c
∈
{
r
,
g
,
b
}
I
c
(
y
)
]
D(I) = \underset{y \in N(x)}{\min} [\underset{c \in \{r,g,b\}}{\min} I^c(y)]
D(I)=y∈N(x)min[c∈{r,g,b}minIc(y)]
本文应用
l
1
l_1
l1-正则化来约束预测图像暗通道的稀疏性:
L
d
=
1
N
u
∑
i
=
1
N
u
∣
∣
D
J
i
∣
∣
1
L_d = \frac{1}{N_u} \sum^{N_u}_{i=1} {||D_{J_i}||}_1
Ld=Nu1i=1∑Nu∣∣DJi∣∣1
虽然暗色通道已经被证明通过增加对清晰图像的约束来去雾,但是由于其高度的非凸性和非线性,将其嵌入到学习网络中是一个挑战。我们应用the look-up table scheme(2016CVPR: Blind Image Deblurring Using Dark Channel Prior)来实现暗通道操作的前向和后向传播。
前向传播的公式如下:
D
(
I
)
=
min
y
∈
N
(
x
)
[
I
(
y
)
]
D(I) = \underset{y \in N(x)}{\min}[I(y)]
D(I)=y∈N(x)min[I(y)]
例如,在5×5的矩阵上,设置
N
y
N{y}
Ny的大小为3×3,结果如下(采取了填充):
经过网络的训练之后,权值改变。反向传播就是回收前向传播时,由该点扩散出去的所有点的权值之和。例如,前向传播时,图像(2,0)的点的值扩散到了(1,0)-(3,1)的矩阵,反向传播时,将(1,0)-(3,1)这个矩阵的权值求和,赋值到(2,0)即可。如果某个点为扩散,那么反向传播时,该点赋0值。反向传播结果如下:
2.2.3 Overall Loss
总的损失定义如下:
L
=
L
c
+
λ
L
p
+
γ
L
t
+
μ
L
d
+
η
L
a
L = L_c + \lambda L_p + \gamma L_t + \mu L_d + \eta L_a
L=Lc+λLp+γLt+μLd+ηLa
其中 λ = 1 0 − 2 \lambda = 10^{-2} λ=10−2, γ = 1 0 − 5 \gamma = 10^{-5} γ=10−5, μ = 1 0 − 5 \mu= 10^{-5} μ=10−5, η = 1 0 − 3 \eta= 10^{-3} η=10−3。
3. 实验结果
4. 结论
本文针对合成图像和真实图像的特征域不同,提出了一种新的半监督学习算法。一方面,我们使用标签损失函数来训练监督分支对具有ground-truth标签的合成数据进行训练。另一方面,我们基于常用的图像先验,包括暗通道和总变差,用真实数据和无标签的损失函数训练无监督分支。大量的实验结果表明,该算法对合成图像和真实的有雾图像都具有良好的去雾效果。