论文解读 《Enhancing Underwater Imagery using Generative Adversarial Networks》ICRA2018
- 项目:http://irvlab.cs.umn.edu/Employing-advanced-generative-adversarial-networks-for-enhancing-underwater-imagery
- 论文: https://arXiv.org/abs/arXiv:1801.04011
- 代码:https://GitHub.com/IRVLab/UGAN
目录
1.介绍
2.方法
2.1 生成水下数据集
2.2 对抗生成网络
2.3 网络架构与训练细节
3.方法评估
参考文献:
1.介绍
本文的主要目的是使用生成对抗网络增强水下图像。
研究者指出水下机器人的技术发展正逐步取得突破,在这一领域中视觉引导型 Remotely Operated Vehicle(ROV)和 Autonomous Underwater Vehicle(AUV)已经成功应用于多个水下作业项目中。然而由于光线在水中传播时会受到折射的影响,在这种情况下光线会发生吸收以及悬浮颗粒所带来的散射现象会对光学系统造成显著影响进而导致图像质量出现失真问题随着深度增加这种现象会愈发严重因为更多的红色光会被海水吸收从而使得水下图像呈现出绿色或蓝色色调这种失真现象本质上是非线性的特性,并受到多种因素(如光照强度、水质等)的影响因此单一方法无法对所有水下图像进行优化这将直接影响到水下机器人在进行分割、追踪以及基于颜色特征的任务中的准确性
2.方法
针对上述提到的问题,研究者提出了一种深度学习驱动的图像增强方案。该方案的具体实施步骤如下:首先利用CycleGAN技术将清晰度较高的水下图象转换为模糊形式,并生成相应的数据对;接着采用所提出的UNDERWATER GAN(简称UGAN)进行图像增强处理。
2.1 生成水下数据集
因为水中场景的深度、光照情况以及设备类型的组合等因素共同构成了导致图像失真的主要原因,在特定条件下可能会出现微小的失真或完全没有失真现象。本文中我们将无失真状态下的水下图像定义为IC(Intrinsic Image),而同一物体在无失真状态下同一视角下的成像则被定义为ID(Desired Image)。我们的目标是学习一个函数f:ID→IC。然而由于实际应用中难以获取高质量的水下成像数据集,在大多数情况下我们无法同时获得具有无失真的ID或IC样本。因此为了尽可能减少这种不足带来的影响并提高模型泛化能力,在现有条件下我们采用基于CycleGAN的方法从具有无失真特性的样本(即IC)生成缺乏真实细节但保有结构性信息的样本(即ID),从而能够获得足够多的数据对用于训练模型并提升其表现能力。(CycleGAN的具体实现细节将在我的下一篇博客中进行详细阐述)
2.2 对抗生成网络
在GAN中,其主要任务是让生成器G持续模仿真实数据以欺骗判别器D;同时判别器的任务则是通过分析辨别生成数据与真实数据之间的差别来完成工作,在GAN算法的核心设计中,则主要是通过优化过程实现对抗关系下的平衡状态:

要理解这个公式,只需要将其分解为两个部分:
优化D:

优化G:

优化D的目标函数的第一部分。
使得当真实数据x输入时(即真样本),其输出值的最大化将有助于提升模型的整体性能。
同时,在这种情况下(针对生成器G生成的数据即假样本),我们希望判别器能够尽可能地减少判别分数log(1-D(G(z)))的最大化。
当优化生成器G的过程中,在没有真实样例的情况下(即仅有假样本),因此选择丢弃第一项。此时我们仅依赖于假样本,并期望这些假样本的判别结果为1(即D(G(z))应尽可能大)。然而为了使判别器的目标形式一致(将其统一为一个连续的目标函数),我们需要最小化表达式(1 - D(G(z)))。这种处理方式本质上与直接最大化D(G(z))并无区别;只是出于形式上的统一性考虑而采取了不同的表达方式。随后将这两个优化模型整合后,则可简化为最初的最小化最大化的目标函数函数结构。
(此处参考链接为:https://www.imooc.com/article/28569,有兴趣可以去看一下。)
本文中作者提到,为简化以上方程,我们忽略

和

在这里将鉴别器视为一个基于S形交叉熵损失函数的分类模型,在实际应用中可能会出现梯度消失及模型崩溃等现象。当提升鉴别器性能时,生成器可能出现大量生成同一类图片的现象。为了防止这种情况发生,请采用WGAN方法,并非通过约束网络权重的方法而是通过限制判别器输出相对于输入的梯度范数来实现Lipschitz约束。WGAN与WGAN-GP将在下一个博客中进行详细讨论。以下为Wasserstein GAN的具体公式:

Px: 连接来自真实数据分布与生成器分布之间的对应点样本;λ_{GP}: 权重因子。为了模仿真实数据并捕捉图像中的低频细节,在这里采用了L1损失函数:

因此UGAN最终的loss形式为:

一般情况下, 生成模型往往会输出较为模糊的画面. 研究者建议通过强化生成器在图像梯度预测方面的准确性来优化视觉效果. 这种方法旨在通过减少与参考标准图像IC之间的梯度预测误差, 进一步提升生成质量. 其中, IP表示网络输出的结果图像是G在输入ID上的映射结果; α是一个大于等于1的整数; 梯度差损失(GDl)则由以下公式给出:

作者用UGAN-P作为另一个loss函数形式:

2.3 网络架构与训练细节
(参考自<>)

unet网络可以简单看为先下采样,经过不同程度的卷积,学习了深层次的特征,在经过上采样回复为原图大小,上采样用反卷积实现。最后输出类别数量的特征图,如分割是两类(是或不是),典型unet也是输出两张图,最后要说明一下,原网络到此就结束了,其实在最后还要使用激活函数softmax将这两个类别转换为概率图,针对某个像素点,如输出是[0.1,0.9],则判定这个像素点是第二类的概率更大。
网络结构可以看成3个部分:
•下采样:网络的红色箭头部分,池化实现
•上采样:网络的绿色箭头部分,反卷积实现
•最后层的softmax:在网络结构中,最后输出两张fiture maps后,其实在最后还要做一次softmax,将其转换为概率图。
本文UGAN的kernalsize是4x4,步长是2.encoder部分的网络层都会跟在一个batch normalization和一个斜率为0.2的激活函数leakyRELU后面。Decoder部分则是跟在激活函数RELU后,没有Batch Normalization(原因:WGAN-GP会针对每个输入单独惩罚判别器梯度的范数,该批归一化将无效,层归一化也没有明显的改进)。最后一层的激活函数用的是tanh。判别部分的网络用了一个叫patchgan的设计,大意就是判别网络输出的是一个32x32x1的特征矩阵,
本文判别器被建模为PatchGAN ,它在图像块级别上进行判别。与常规判别器不同,PatchGAN鉴别器输出的是一个32×32×1特征矩阵,不是0或者1,这样可以获得更多的细节信息,为高阶频率提供了一个度量。
3.方法评估
实验结果如下:

随后, 研究者通过图像空间中的距离特征、梯度变化程度以及均值与方差等指标对A/CycleGAN、UGAN及其改进版本UGAN-P这三种方法进行了评估分析



接下来的工作:
1. WGAN与WGAN-GP
2. 看GAN最开始的论文,找一些代码看一下
3. CycleGAN论文+代码
参考文献:
1. Generative Adversarial Nets(GAN)
地址:http://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf
代码:https://github.com/goodfeli/adversarial
2.无配对图像到图像的转换基于循环一致对抗网络(简称CycleGAN)
地址:https://arxiv.org/abs/1703.10593
3. Wasserstein GAN(WGAN)
地址:https://arxiv.org/abs/1701.07875
参考博客链接:
1.<>
2.<>
3.<>
