A physics based generative adversarial network for single image defogging

708 阅读5分钟

Image and Vision Computing 2019

Wei Liu, Rongguo Yao, Guoping Qiu

简介

在去雾领域,主要有两种方法:一种是基于大气散射模型的去雾方法,可以较好的恢复图像纹理细节。另外一种是基于Retinex理论的图像增强方法,可以很好的改善图像对比度。但,前者结果对比度不佳,而后者容易丢失纹理细节。文章提出了一个对抗生成网络(PBGAN),并行利用这两种方法之间的优势。文章提出的方法中有两个对抗生成模块:对比度增强模块(CE)和纹理还原模块(TR)。

Motivation

在公开的算法中,除雾方法主要分为两类,分别基于图像增强和图像复原。

基于图像增强的方法的优点是简单易用,例如直方图均衡,小波分析和Retinex理论等。但是,这些方法只能提高图像的对比度和清晰度,并不能真正消除图像上的雾气。此外,这些方法的除雾结果中可能会出现诸如颜色失真和光晕之类的伪影。因此,这些方法通常用于对除雾后的图像进行后处理。

图像恢复方法通常基于物理模型。在过去几年中,一些论文提出了一些基于先验的方法,它们通常基于大气散射模型。通过精确的透射图和大气光值的估计,它们可以消除图像中的雾并保留边缘信息。但是,手工设计特征的方法有其局限性。例如,天空和白色建筑物没有暗通道。因此,基于先验的方法并不完全适用于所有的物理场景。此外,通过大气散射模型得到的去雾结果的对比度通常看起来很暗。

这两种方法都有其自身的优缺点。文章希望能够寻找一个办法结合两者完成图像去雾。

过去有一些基于深度学习的算法是基于大气散射模型的。但是由于难以准确估计传输图和大气光值,这会使去雾结果出现伪影。并且这些算法大多数使用了室内合成的有雾数据集来训练,因此它们不能很好的适应户外真实场景的去雾。

(a)Foggy image. (b)DCP. (c)DefRet. (d)MSRCR. (e)The proposed method PBGAN.

上图展示了基于Retinex的图像增强方法和基于大气散射模型的去雾方法。从图d(MSRCR,即基于Retinex的算法)可以看出它有效提高了对比度,但是图像的颜色明显失真。从图b(DCP,即基于大气散射模型的算法)可以看出天空区域失真和缺乏对比度。

基于以上几点,因此文章提出了基于对抗生成网络并结合图像增强和图像恢复来解决这个问题。

Model

上图是文章提出的算法的基本框架。容易看出,这是一个类似于Cycle GAN的网络结构。该网络分为上半部分流程和下半部分流程。上半部分流程为输入图像I去雾后,再添加雾。下半部分流程为输入J添加雾后再去雾。其中去雾过程由Retinex-based Contrast Enhancement(红色虚线框内)负责,加雾过程由ASM-based Texture Restoration(蓝色虚线框内)负责。

Retinex-based Contrast Enhancement(RetNet)

上图为Retinex-based Contrast Enhancement的网络结构。需要注意的是,输入的图像为有雾图像的逆图像(即1-I)。RetNet是在《Perceptual losses for real-time style transfer and super-resolution》提出的网络结构上修改而来的。

ASM-based Texture Restoration

上图为估计传输图和大气光的网络部分,其组成了ASM-based Texture Restoration。在得到传输图和大气光值之后,根据大气散射模型合成有雾图。区别于一般的去雾算法中的输入有雾图像得到去雾结果,这个网络为输入无雾图像输出有雾结果。

Discriminative network

容易观察到,在网络整体框架图中,由两个鉴别器D_yD_x。其中D_y负责区分由RetNet生成的图像和真实世界的无雾图像,D_x负责区分基于ASM-based Texture Restoration生成的图像和真实世界的有雾图像。它们由五个Conv-BN-Relu组成。关于鉴别器D_y,其优化公式为:

\mathcal{L}_{enhance-adv}(\mathcal{R},D_Y,X,Y)=\mathbb{E}_{Y\backsim p_{clear}(Y)}[\log D_Y(Y)]+\mathbb{E}_{X\backsim p_{foggy}(x)}[log(1-D_Y(1-\mathcal{R}(1-X)))]

其中\mathcal{R}表示RetNet,它负责生成和真实世界无雾图像尽可能接近的图像,来增加D_y区分它们的难度。关于鉴别器D_x,其优化公式为:

\mathcal{L}_{restore-adv}(\mathcal{S},D_X,Y,X)=\mathbb{E}_{X\backsim p_{foggy}(X)}[\log D_X(X)]+\mathbb{E}_{Y\backsim p_{clear}(Y)}[log(1-D_X(1-\mathcal{S}(Y)))]

其中\mathcal{S}表示ASM-based Texture Restoration网络。

损失函数

除了前文提到的两个损失函数以外,文章还有另外两个损失函数,分别是循环一致性损失函数和感知损失函数。循环一致性损失函数表达如下:

\mathcal{L}_{cyc-inver}=||X-\mathcal{S}(1-\mathcal{R}(1-X))||^2_2+||Y-(1-\mathcal{R}(1-\mathcal{S}(Y)))||^2_2

感知损失函数如下:

\mathcal{L}_{vgg}=||\mathcal{F}_i(X)-\mathcal{F}_i(\mathcal{S}(\mathcal{R}(X)))||_2^2+||\mathcal{F}_i(Y)-\mathcal{F}_i(\mathcal{R}(\mathcal{S}(Y)))||_2^2

最后将以上四个损失函数乘以权重后相加即可:

\mathcal{L}_{PBGAN}=\lambda_1 \mathcal{L}_{enhance-adv}+\lambda_2 \mathcal{L}_{restore-adv}+\lambda_3 \mathcal{L}_{cyc-inver}+\lambda_4 \mathcal{L}_{vgg}

\lambda_1,\lambda_2,\lambda_3,\lambda_4分别为10,10,8,8。

数据和训练

数据集

  • 训练集:采集自网络,RESIDE数据集和O-HAZE数据集

  • 测试集

训练设置

  • 批大小为1
  • 训练图像调整为512×512
  • Adam优化器
  • 初始学习率2\times10^{-4}
  • 一共迭代240000次(batch)

对比和测试

测试指标

  • PSNR
  • SSIM
  • MSCN:来自No-reference image quality assessment in the spatial domain,其表示图像的失真程度,其数值越大表示去雾结果越好。
  • e:可见边缘的比率
  • r:对比度恢复的质量
  • \delta:像素的标准化饱和值
  • d:感知雾密度

指标对比

结果展示