加快网站速度,手机更新wordpress,wordpress建立的博客,做新媒体的小说网站转载自 简单介绍了一下GAN和DCGAN的原理。以及如何使用Tensorflow做一个简单的生成图片的demo。 Ian Goodfellow对GAN一系列工作总结的ppt#xff0c;确实精彩#xff0c;推荐#xff1a;独家 | GAN之父NIPS 2016演讲现场直击#xff1a;全方位解读生成对抗网络的原理及未来…转载自 简单介绍了一下GAN和DCGAN的原理。以及如何使用Tensorflow做一个简单的生成图片的demo。 Ian Goodfellow对GAN一系列工作总结的ppt确实精彩推荐独家 | GAN之父NIPS 2016演讲现场直击全方位解读生成对抗网络的原理及未来附PPTGAN论文汇总包含codezhangqianhui/AdversarialNetsPapersCycleGAN是在今年三月底放在arxiv地址https://arxiv.org/abs/1703.10593的一篇文章文章名为Learning to Discover Cross-Domain Relations with Generative Adversarial Networks同一时期还有两篇非常类似的DualGAN地址https://arxiv.org/abs/1704.02510和DiscoGAN地址https://arxiv.org/abs/1703.05192简单来说它们的功能就是自动将某一类图片转换成另外一类图片。 作者在论文中也举了一些例子比如将普通的马和斑马进行互相转换将苹果和橘子进行互相转换 把照片转换成油画风格 将油画中的场景还原成现实中的照片 由于CycleGAN这个框架具有较强的通用性因此一经发表就吸引了大量注意很快脑洞大开的网友想出了各种各样神奇的应用。 比如将猫变成狗 让图片中的人露出笑容 国外网友Jack Clark还搜集了巴比伦、耶路撒冷以及伦敦的古代地图利用CycleGAN将它们还原成了真实卫星图像 还有人使用CycleGAN将人脸转换成娃娃 将男人变成女人 把你自己变成一个“肌肉文身猛男”也是可以的 如果说这些应用多少可以理解那么下面的应用就有点“匪夷所思”了你可以想象将人和拉面做转换吗日本网友加藤卓哉(Takuya Kato)就训练了这样一个模型它可以从拉面中生成人像此外将人脸变成拉面的图片。鉴于生成的结果比较鬼畜如果有兴趣的可以点击这个链接地址https://junyanz.github.io/CycleGAN/images/faces_and_ramens.jpg观看生成结果。 此外知乎上的 達聞西 还用CycleGAN训练了可以脱掉女优衣服的模型可以参考提高驾驶技术用GAN去除(爱情)动作片中的马赛克和衣服其脑洞之大实在是让人惊叹了一番。但是技术水平还很厉害下一篇博客把其中的技术扒过来。 今天这篇文章主要分成三个部分 CycleGAN的原理解析 CycleGAN与原始的GAN、DCGAN、pix2pix模型的对比 如何在TensorFlow中用CycleGAN训练模型 CycleGAN的原理 我们之前已经说过CycleGAN的原理可以概述为将一类图片转换成另一类图片。也就是说现在有两个样本空间X和Y我们希望把X空间中的样本转换成Y空间中的样本。 因此实际的目标就是学习从X到Y的映射。我们设这个映射为F。它就对应着GAN中的生成器F可以将X中的图片x转换为Y中的图片F(x)。对于生成的图片我们还需要GAN中的判别器来判别它是否为真实图片由此构成对抗生成网络。设这个判别器为 。这样的话根据这里的生成器和判别器我们就可以构造一个GAN损失表达式为 这个损失实际上和原始的GAN损失是一模一样的如果这一步不是很理解的可以参考一篇专栏GAN学习指南从原理入门到制作生成Demo。 但单纯的使用这一个损失是无法进行训练的。原因在于映射F完全可以将所有x都映射为Y空间中的同一张图片使损失无效化。对此作者又提出了所谓的“循环一致性损失”cycle consistency loss。 我们再假设一个映射G它可以将Y空间中的图片y转换为X中的图片G(y)。CycleGAN同时学习F和G两个映射并要求 以及 。也就是说将X的图片转换到Y空间后应该还可以转换回来。这样就杜绝模型把所有X的图片都转换为Y空间中的同一张图片了。根据 和 循环一致性损失就定义为 同时我们为G也引入一个判别器 由此可以同样定义一个GAN的损失 最终的损失就由三部分组成 CycleGAN与DCGAN的对比 为了进一步搞清楚CycleGAN的原理我们可以拿它和其他几个GAN模型如DCGAN、pix2pix模型进行对比。 先来看下DCGAN它的整体框架和最原始的那篇GAN是一模一样的在这个框架下输入是一个噪声z输出是一张图片如下图因此我们实际只能随机生成图片没有办法控制输出图片的样子更不用说像CycleGAN一样做图片变换了。 CycleGAN与pix2pix模型的对比 pix2pix也可以做图像变换它和CycleGAN的区别在于pix2pix模型必须要求成对数据paired data而CycleGAN利用非成对数据也能进行训练(unpaired data)。 比如我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型那么我们必须在搜集大量地点在白天和夜晚的两张对应图片而使用CycleGAN只需同时搜集白天的图片和夜晚的图片不必满足对应关系。因此CycleGAN的用途要比pix2pix更广泛利用CycleGAN就可以做出更多有趣的应用。 在TensorFlow中实验CycleGAN 最后来讲一讲如何在TensorFlow中实验CycleGAN打开全球最大的同性交友网站Github我们可以发现CycleGAN在TensorFlow中已经有很多轮子了我使用的代码是vanhuyz/CycleGAN-TensorFlow地址https://github.com/vanhuyz/CycleGAN-TensorFlow。 利用这个代码我训练了一个从男性和女性图片互换的模型比如将男人转换成女人左侧为原图右侧为模型自动生成的图片 还可以将女性转换成男性 为了训练这么一个模型我们需要分别准备好男性的图片和女性的图片。在实践中我使用了CelebA数据集分别取出其中男性和女性的图片并统一缩放到256x256的大小然后存入两个文件夹中 如果你对这个实验有兴趣可以直接在地址https://pan.baidu.com/s/1i5qY3yt下载到我使用的数据集。当然也可以使用自己的数据只需要将它们存为jpg格式并统一缩放到256x256的大小就可以了。接下来的步骤为 1. 下载项目代码 git clone https://github.com/vanhuyz/CycleGAN-TensorFlow.git 2. 将图片转换成tfrecords格式 这个项目中提供了一个build_data脚本用于将图片转换成tfrecords形式。假设我们的图片存放在~/datasets/man2woman/a_resized/和 ~/datasets/man2woman/b_resized目录下对应的命令就是 python build_data.py \ --X_input_dir ~/datasets/man2woman/a_resized/ \ --Y_input_dir ~/datasets/man2woman/b_resized/ \ --X_output_file ~/datasets/man2woman/man.tfrecords \ --Y_output_file ~/datasets/man2woman/woman.tfrecords 3. 训练 训练的命令为 python train.py \ --X ~/datasets/man2woman/man.tfrecords \ --Y ~/datasets/man2woman/woman.tfrecords \ --image_size 256 训练的过程比较漫长此时可以打开TensorBoard来观察训练情况运行这个命令时需要将“20170715-1622”改成机器中对应的文件夹下同 tensorboard --logdir checkpoints/20170715-1622 4. 导出模型并执行单张图片 导出模型的方法为 python export_graph.py \ --checkpoint_dir checkpoints/20170715-1622 \ --XtoY_model man2woman.pb \ --YtoX_model woman2man.pb \ --image_size 256 对单张图片进行转换将data/test.jpg替换为对应的输入图片地址 python inference.py \--model pretrained/man2woman.pb \--input data/test.jpg \--output data/output.jpg \--image_size 256 总结 有已经训练好哒model调用后发现效果很不好。