【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

论文题目:《Enhancing UnderwaterImagery using Generative Adversarial Networks》

论文作者:Cameron Fabbri, Md JahidulIslam, and Junaed Sattar(University of Minnesota, Minneapolis MN)

论文发表期刊:ICRA 2018

论文内容介绍:

 本文的主要内容是使用生成对抗网络增强水下图像。作者首先用CycleGAN网络将质量相对较高的undistorted underwaterimage,也就是畸变较轻的水下图像渲染为质量比较差的畸变较大的水下图像dostortedunderwater image;再通过渲染生成的这些数据训练本文提出的另一种网络UnderwaterGAN,也就是UGAN,最终可以将质量比较差,分辨率较低的模糊水下图像转变为比较清晰,分辨率也较高的高质量图像。

 首先作者提出现在水下机器人发展越来越快,包括ROV和AUV都会代替潜水员在深海执行许多任务。通常这些设备都会携带许多传感器,其中使用视觉传感器,也就是相机来执行任务是一个很流行的方案。但是水下图像会出现许多问题,比如红光在水下吸收较快,这就会导致水下图像发蓝或者发绿。当深度越深时,这种状况就越明显。然后这种情况是比较复杂的,取决于很多种因素,比如光照方向和强度,不同的水质,相机的参数等等,所以没法用固定的算法去改善,或者说效果不理想。这就会影响水下机器人在执行分割,追踪以及分类等直接或间接用到颜色特征的任务的准确性。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 鉴于这些问题,作者提出了使用深度学习的方法来解决。深度学习模型的训练需要大量的数据,但是水下图像作为图像增强训练数据有一个很大的问题,那就是它没有确切的ground truth,也就是说我们其实没有一个准确的目标图像去对应一张水下图像。举个例子,水下图像增强之后最好的效果就是看起来像是在空气中拍摄的,然而我们并没有对应的水下物体在空气中拍摄的样子。所以作者就提出了使用GAN网络生成训练数据。作者使用了一个叫做CycleGAN的模型,CycleGAN实际上所做的就是给一幅图像渲染上一个效果。通过CycleGAN可以把一副相对来说比较清晰符合视觉处理要求的水下图像X渲染成模糊不清晰的水下图像Y,这样就得到了一组对应的训练数据,然后再用这些数据去训练另一个网络,进行水下图像的复原。也就是说作者最终的目标不是将水下图像处理成空气中拍摄的样子,而是将图像处理成看上去比较清晰,对比度比较高,符合之后视觉处理要求的水下图像就可以了。

 作者在related work里提到了另一篇类似的研究,也就是WATERGAN。这篇文章也是我在大组会上讲的论文,后来发表在了CVPR2017上。WaterGAN的整体思想和标准GAN一致,不过输入的不止是一个噪声向量z,还包括空气中的图像以及相机到场景的距离,也就是我们经常提到的深度。可以看到,生成网络包括三部分,分别是G-I衰减部分,G-II散射部分以及G-III晕影部分。经过生成网络处理的合成图片与真实水下照片随机输入到判别网络进行判别,返回0和1的标签,最终得到大量的模拟水中拍摄图像的数据集,再通过这些数据去训练一个颜色校正网络,就可以恢复水下图像的真实色彩。作者也提出了两篇论文的不同,比如WATERGAN使用了欧氏距离用来进行颜色校正,而本文生成图像和颜色校正的网络都用了GAN;此外WATERGAN的训练过程需要用到深度信息,而本文只需要同种物体在不同水域清晰度状况下的图像就可以。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 网络结构部分,首先是第一部分CycleGAN。CycleGAN是一种可以实现图像风格变换的网络,通过CycleGAN我们可以将一副图像变换成另一种风格,比如将莫奈油画的风格转换成照相的写实风格,斑马转变成普通的马,夏天转换成秋天等,当然也可以反向转换。原理如下图所示,网络学习一个映射maping G,将域X中的图片转换到域Y的图片中,反之也建立一个映射F,将域Y中的图片转成域X中的图片,两个域的训练集图片并不是成对出现。转换后的图片需要分别定义自己的D来做训练,达到欺骗和识别的对抗训练,使得生成在本域的图片y‘和实际属于本域的图片y不可被分辨,这样在训练时,可以将原有的GAN结构扩展为cycle的形式F(G(X))约等于X.

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 接下来是第二个网络UNDERWATER GAN,也就是UGAN。网络结构作者说是similar to the U-Net,也使用了encoder-decoder的结构。如图是U-Net的结构。作者说UGAN的kernalsize是4x4,步长是2.encoder部分的网络层都会跟在一个batch normalization和一个斜率为0.2的**函数leakyRELU后面。Decoder部分则是跟在**函数RELU后,没有BatchNormalization。最后一层的**函数用的是tanh。判别部分的网络用了一个叫patchgan的设计,大意就是判别网络输出的是一个32x32x1的特征矩阵,不是0或者1,这样可以获得更多的细节信息。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 此外作者还讨论了loss函数。首先UGAN的loss采用了Wasserstein距离,也就是EM距离,不是欧式距离,也就是上面的LWGAN,然后加了一个L1正则化项。加入正则化项可以避免过拟合。EM距离主要是用于衡量两个分布之间的距离。作者说这样可以获得更多细节信息。除此以外呢作者还提出了一个UGAN-P loss,就是在UGAN的基础上加了一个叫Gradient Diffrence Loss的项,用来锐化图像来避免生成的图像模糊。作者用这两个loss分别训练了两个网络,之后也进行了对比。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 接下来就是实验部分了。第一步训练CycleGAN输入的数据集大小是高质量水下图像6143张,低质量水下图像1817张。这些图像是从imagenet或者youtube上收集的。模型训练完后的测试图像是从flickr上收集的,有56张。如图所示经过CycleGAN风格转换后的效果,上面是转换前,下面是转换后。可以看到图像质量有所下降。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 接下来是UGAN以及UGAN-P的测试,基本上上这两个的效果都很好。由于CycleGAN可以实现风格的反向变换。也就是如果不训练UGAN的话,只用CycleGAN也是可以把低质量图片转变为高质量水下图片的。所以作者也做了一个对比实验,来比较UGAN和CycleGAN之间的效果。这个在我看来效果其实差不多。作者用了CANNY边缘检测算法来比较图像的对比度还有细节,接下来又取出了小块图像进行对比。可以看到UGAN和UGAN-P都是比CycleGAN表现的要好的,然后作者说UGAN实际上效果要比UGAN-P要好一点点,这个挺值得研究,会在以后的工作里进行探讨。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks

 最后作者把UGAN训练好的模型用到了他们的AUV上,用来查看水下追踪任务的效果有没有得到改善。这个任务主要是追踪运动状态下的东西,可以看到在500帧图像中,没有使用UGAN的图像准确的追踪到了42帧,使用了UGAN的图像准确的追踪到了147帧,效果还是得到了很大幅度的提高的。在实时性方面,使用1080GPU可以达到每秒钟72张,使用5代I7CPU可以达到每秒8张。

【论文总结】Enhancing Underwater Imagery using Generative Adversarial Networks