- 项目:http://irvlab.cs.umn.edu/enhancing-underwater-imagery-using-gans
- 论文: https://arxiv.org/pdf/1801.04011.pdf
- 代码:https://github.com/IRVLab/UGAN/find/25a94be6373c7d9bbfd37b81336d584b89a7624b
目录
1.介绍
本文的主要目的是使用生成对抗网络增强水下图像。
在Introduction部分,作者提出当前水下机器人逐渐发展,使用视觉引导的AUV和ROV已广泛使用在许多水下任务之中,但是因为光的折射,吸收和悬浮颗粒的散射会极大地影响光学系统。例如,因为红色波长很快被水吸收,水下图像的色彩趋于绿色或蓝色。随着深度的增加,这种效果会恶化,因为越来越多的红色调被吸收。这种失真本质上是非线性的,并受许多因素(例如存在的光量)的影响,例如:光照角度与强度、海水水质、相机参数等等,因此想要获得清晰的水下图像,使用某一个方法不能改善所有的水下图片,这会影响水下机器人在执行分割,追踪以及分类等直接或间接用到颜色特征的任务的准确性。
2.方法
基于以上所说的问题,作者提出了一种基于深度学习的图像增强算法。方法流程为:首先使用CycleGAN将清晰的水下图像渲染成模糊的水下图像形成水下图像数据对,然后使用所提出的UNDERWATER GAN(即UGAN)做图像增强。
2.1 生成水下数据集
因为场景深度,照明条件,相机型号以及在水下环境中的物理位置都会影响图像失真的因素。 在某些条件下,水下图像可能失真很小,或者根本没有失真。 本文将IC设为没有失真的水下图像,将ID设为没有失真的同一图像。 我们的目标是学习功能f:ID→IC。 由于难以收集水下数据,因此不仅存在ID或IC,由于难以收集水下数据,通常IC和ID都有的情况很少,因此为了为了避免图像对不足的问题,本文使用CycleGAN从IC生成ID,从而提供了成对的图像数据集。(CycleGAN的具体内容请见我的下一篇博客)
2.2 对抗生成网络
在GAN中,其主要任务是生成器G不断生成虚假图片以“欺骗”判别器D,判别器的任务则为判断生成器所生成的图片是否为真实图片,因而在GAN的原始公式中,其任务主要是解决minmax问题:
要理解这个公式,只需要将其分解为两个部分:
优化D:
优化G:
优化D的公式的第一项,使的真样本x输入的时候,得到的结果越大越好,因为需要真样本的预测结果越接近于1越好嘛。对于假样本,需要优化是的其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0,也就是说,log(1-D(G(z)))越大越好,这样两者合起来就是越大越好。
同样在优化G的时候,这个时候没有真样本什么事,所以把第一项直接却掉了。这个时候只有假样本,但是我们说这个时候是希望假样本的标签是1的,所以是D(G(z))越大越好,但是呢为了统一成1-D(G(z))的形式,那么只能是最小化1-D(G(z)),本质上没有区别,只是为了形式的统一。之后这两个优化模型可以合并起来写,就变成了最开始的那个最大最小目标函数了。
(此处参考链接为:https://www.imooc.com/article/28569,有兴趣可以去看一下。)
本文中作者提到,为简化以上方程,我们忽略和
,在这里鉴别器假设为一个具有S形交叉熵损失函数的分类器,在实践中可能会导致梯度消失和模式崩溃等问题,在不断提高鉴别器的时候,生成器会出现梯度消失的情况,也就是说会生成器生成许多同一类别的图片,而不是多样的图片,这种情况不是我们所想要看到的,为了避免这种情况,作者采用了WGAN,采用具有梯度惩罚的Wasserstein GAN(WGAN-GP),而不是裁剪网络权重,而是通过对鉴别器输出相对于其输入的梯度范数进行软约束,确保了Lipschitz约束。(WGAN与WGAN-GP见我的下一个博客),WGAN公式如下:
Px:沿着来自真实数据分布和发生器分布的成对点之间沿直线的样本,λGP:加权因子。为了使G具有基本的真实感,并捕获图像中的低电平频率,(因为水下图像增强的后一个阶段是生物识别等功能的增强),所以在这里考虑了L1loss:
因此UGAN最终的loss形式为:
通常,生成模型会产生模糊的图像。作者提出通过直接惩罚生成器中图像梯度预测的差异来增强这些预测的策略,以增强视觉效果,给定地面真实图像IC,预测图像IP = G(ID),并且α是大于或等于1的整数,则梯度差损失(GDL)由下式给出:
作者用UGAN-P作为另一个loss函数形式:
2.3 网络架构与训练细节
(参考自https://blog.csdn.net/qq_33780536/article/details/79140410)
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.方法评估
实验结果如下:
紧接着,作者通过图像空间的距离、梯度差异、均值和方差评估了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.Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (CycleGAN)
地址:https://arxiv.org/abs/1703.10593
3. Wasserstein GAN(WGAN)
地址:https://arxiv.org/abs/1701.07875
参考博客链接:
1.https://blog.csdn.net/qq_33780536/article/details/79140410
2.https://blog.csdn.net/qq_39377134/article/details/103084982
3.https://blog.csdn.net/demo_jie/article/details/106724833