1. 概述
作者将CGAN应用于图片去雾。
2. 生成器
生成器如图1所示:
图1 生成器
图2 生成器的细节部分
网络数据如表1所示:
表1 生成器的网络结构,输入为(256,256,3)
作者将54层提拉米苏网络作为生成器,得益于DenseNet,相对U-Net大大减少了参数量。其中有5个稠密块(DenseBlock)在编码器端,5个稠密块在解码器端,一个稠密块作为bottleneck。
在编码器端,稠密块连接在下采样层(Transition Down)后面。TD层包括 BN-ReLU-Conv 操作。每次经过上采样层,输出尺寸变为两倍大小。
在解码器端,稠密块连接在上采样层(Transition Up)后面。TU层仅包含转置卷积(Transpose Convolution)。每次经过下采样层,输出尺寸变为二分之一大小。
编码,解码端的每个稠密块有4层;bottleneck中的稠密块为15层,生长率(growth rate)固定为12。
Bottleneck Block,其意思就是输入输出维度差距较大,就像一个瓶颈一样,上窄下宽亦或上宽下窄。
3. 判别器
作者使用与原始CGAN论文相同的判别器网络(Patch GAN),如图3所示。
图3 判别器网络结构
判别器采用patch-wise比较来代替pixel-wise比较。网络数据如表2所示:
表2 判别器网络结构
4. 损失函数
L
t
o
t
a
l
=
W
g
a
n
×
L
a
d
v
+
W
L
1
×
L
L
1
+
W
v
g
g
×
L
v
g
g
(1)
L_{total}=W_{gan}\times L_{adv}+W_{L_1}\times L_{L1}+W_{vgg}\times L_{vgg} \tag{1}
Ltotal=Wgan×Ladv+WL1×LL1+Wvgg×Lvgg(1)
1. CGAN损失函数:
L
a
d
v
=
E
(
x
,
y
)
[
l
o
g
(
D
(
x
,
y
)
)
]
+
E
(
x
,
z
)
[
l
o
g
(
1
−
D
(
x
,
G
(
x
,
z
)
)
)
]
(2)
L_{adv}=E_{(x,y)}[log(D(x,y))]+E_{(x,z)}[log(1-D(x,G(x,z)))] \tag{2}
Ladv=E(x,y)[log(D(x,y))]+E(x,z)[log(1−D(x,G(x,z)))](2)其中
x
x
x为有雾图像(条件信息),
y
y
y为无雾图像,作者将dropout作为噪声
z
z
z(dropout在一定条件下可理解为高斯噪声)。
W
g
a
n
W_{gan}
Wgan为标量,表示权重。
2. 平滑L1损失函数:
L
L
1
=
E
x
,
y
,
z
[
∣
y
−
G
(
x
,
z
)
∣
]
(3)
L_{L1}=E_{x,y,z}[|y-G(x,z)|]\tag{3}
LL1=Ex,y,z[∣y−G(x,z)∣](3)
3. 感知损失:
L
v
g
g
=
1
C
W
H
∑
c
=
1
c
∑
w
=
1
w
∑
h
=
1
h
∣
∣
V
(
G
(
x
,
z
)
c
,
w
,
h
−
V
(
y
c
,
w
,
h
)
∣
∣
2
2
(4)
L_{vgg}=\frac{1}{CWH}\sum_{c=1}^{c}\sum_{w=1}^{w}\sum_{h=1}^{h}||V(G(x,z)^{c,w,h}-V(y^{c,w,h})||_2^2\tag{4}
Lvgg=CWH1c=1∑cw=1∑wh=1∑h∣∣V(G(x,z)c,w,h−V(yc,w,h)∣∣22(4)其中
c
,
w
,
h
c,w,h
c,w,h分别表示channels,width,height。
patch-wise比较:
将无雾图像与生成模型产生的图像通过VGG-19提取特征,然后对它们计算感知损失。因为深层的特征图的每个像素的感受野对应原始图片的一块(patch),所以是patch-wise的比较。
作者采用有深度信息的数据集是为了根据大气散射模型产生有雾图像,而非作为特征喂给模型。
5. 不足
模型的输入大小限制于(256×256)
6. 参考文献:
[1] Bharath Raj N., Venkateswaran N, “Single Image Haze Removal using a Generative Adversarial Network.” arXiv 2018