Image-to-Image Translation with Conditional Adversarial Networks笔记

论文的链接:https://arxiv.org/pdf/1611.07004.pdf

代码链接:https://github.com/phillipi/pix2pix

本文是UC Berkeley AI研究院关于图像风格转化的文章,该文章首先指出gan可以自动地学习目标函数,从而对于一些难以确定目标函数的问题,gan可以取得更好的效果。同时采用U-网络代替原始的auto-encoder,实验表明u网络可以取得更好的效果。最后,作者比较了gan,cgan,gan+L1,cgan+L1等目标函数。

一、为什么用GAN

虽然神经网络可以自己学习参数来拟合数据,但是其仍然需要我们认为设置一个目标函数从而让神经网络根据该目标函数去优化模型的参数。对于一些简单的问题,目标函数可以根据经验轻松地得到。但是对于一些比较抽象的问题,比如图像的风格转化,如果我们简答的将模型转化后的图像和目标图像的每个像素点距离的平方和来作为目标函数进行优化,会使得产生的图片是模糊不清的。这是因为欧式距离会采信多个貌似合理的转化图片,然后对其进行平均。因而,如何设置一个合适的目标函数对于抽象的问题显得尤为重要。gan的提出正好解决这一问题,gan在训练中,判别器不断地更新,通过将判别结果作为生成器的优化目标去指引生成器如何优化,从而起到了生成器目标函数的作用。如果对于模糊不清的转化结果,判别器就可以轻易将其与真正的图片区别开来,同时又指导生成器去生成更加清晰可靠的图片。因而,gan一方面学习产生目标函数,另一方面又根据学习到的目标函数去对模型进行优化。

二、方法介绍

本文主要采用了gan和cgan两种模型。

2.1目标函数

对于cgan,其目标函数为:


对于gan,其目标函数为:


这里的区别在于,对于gan,判别器的输入只有模型转化后的图片G(x,z)和真实转化的图片y;而对于cgan,判别器的输入不仅有模型转化后的图片G(x,z)和真实转化的图片y,还有模型转化前的图片x。这样判别器在进行判别时,不仅仅会考虑转化后图片是否符合指定的风格,而且会考虑转化后图片的内容与原始的图片是否对应。

同时,我们要求生成器生成的图片不仅仅需要可以骗过判别器,而且需要其与真正转化后的图片在像素点上的距离尽可能的接近。由于使用L1可以比L2产生更加清晰的图片,故目标函数转化为:

Image-to-Image Translation with Conditional Adversarial Networks笔记_第1张图片

2.2网络结构

2.2.1U型网络作为gennerator

传统上,我们使用auto-encoder作为网络结构,其在编码的时候通过降维的方法编码数据,然后让压缩后的数据重新解码成真实的图片,在这个过程中顺便实现了风格转化。该模型架构存在一个问题就是要求在数据编码时不损失重要的信息,否则无法解码得到想要的结果。而本文采用一种更为有效的U型网络,通过跳跃连接可以有效地避免模型压缩造成的信息损失。即在decoder的层叠加上encoder对应的层,如果遇到shape不一致时候,即裁剪用于叠加的encoder左边和右边使得其与decoder的shape保持一致,其思想跟deep residual network有点类似,区别在于U-net是将特征叠加起来,而deep residual network是将对应元素直接相加。

Image-to-Image Translation with Conditional Adversarial Networks笔记_第2张图片

2.2.2PatchGAN

对于生成器的目标函数,前面提到是尽可能让转化的图片骗过判别器,同时在与目标的图片的距离(MAE/MSE)尽可能接近。可以骗过判别器要求生成的图片在抽象特征上与转化的图片接近(不会把马转化成羊),而与目标图片的距离尽可能地接近则要求其在细节上与转化的图片尽可能接近,这两方面保证了转化后图片的效果。

但是仅仅使用L1 loss去优化局部特征是不够的,L1每次只看到一个像素点,而无法考虑像素之间的联系,因而作者提出了PathcGAN来解决这一问题。PathcGAN是GAN的一个变种,只是对于判别器,其每次只输入N*N个像素点,然后让判别器对这N*N个像素点判断其是否为真,采用类似CNN滑窗的方法得到每个N*N框的判别器输出值,将这些输出值进行平均得到最后判别器的输出结果。

这种方法有两大优点,第一是由于网络参数数量的减少,提高了模型训练速度。第二是该模型可以同时训练不同规格的图片。作者尝试了不同patch的大小,实验证明了70*70的patch具有最好的效果,而且可以将256*256规格训练的模型用于512*512的图片中。

2.3优化方法

在优化上,本文采用mini-batch的SGD去配合Adam,同时对每一层采用BN(batch normalization),但这里作者采用的是测试集batch的统计量而不是训练集batch的统计量。

3 目标函数

作者比较了在目标函数中L1,gan,cgan等的作用。

如果单单是使用L1,会得到模糊但是合理的图片,使用GAN可以使图片变得清晰,但是会加入一些新的东西(真正转化出来的图片没有的),而L1配合GAN则可以减少这些不合理的东西并保证清晰度。如果不加入L1,那么cgan效果会好过gan,但是如果加上了L1,这种差别将会大大减少,因为L1会度量模型转化的图片和真正转化图片的距离,从而要求模型转化的图片的内容尊重原始图片的内容,而这一点正是cgan比gan好的地方。


你可能感兴趣的:(推荐算法,机器学习,深度学习)