参与:黄小天、曹瑞、蒋思源 edges2cats 是最近网络中火爆的开源应用,它能以你随手鼠绘的单色线图为基础自动生成一张「真实图片」。其中绘制猫的版本最受欢迎。 在 2 月 19 日推出以后,这个实现很快受到了大家的关注,甚至连 Yann LeCun 这样的重量级人物也在其中开始了自己的「创作」。 这一神奇的应用是如何实现的?让我们看看作者 Christopher Hesse 带来的教程吧。 相关链接: Edges2cats:
Github: https://github.com/phillipi/pix2pix Isola 等人在 pix2pix 中得到的结果看起来很不错,j2直播,它是对抗性网络的一种绝佳实现,所以我将 Torch 上的代码移植到了 Tensorflow 中。在 Github 上单文件版(single-file)的实现 pix2pix-tensorflow 已经可供下载: https://github.com/affinelayer/pix2pix-tensorflow 下面是 pix2pix 的一些例子,我将从论文开始一步步解释这到底是什么。 「术士的宝石,直播,是魔力无边的宝石,它能点石成金、创造不朽、复生鬼魂、杀死巨魔,它无所不能。」——Wizard People, Dear Readers pix2pix 也许不能复生鬼魂,但是如果你给它一个包含了普通石头和其相对金子形态的数据集,那么 pix2pix 还真能点石成金。 运行代码 # make sure you have Tensorflow 0.12.1 installed firstpython -c "import tensorflow; print(tensorflow.__version__)"# clone the repogitclone https://github.com/affinelayer/pix2pix-tensorflow.gitcdpix2pix-tensorflow# download the CMP Facades dataset ~tylecr1/facade/python tools/download-dataset.py facades# train the model# this may take 1-9 hours depending on GPU, on CPU you will be waiting for a bitpython pix2pix.py --mode train --output_dir facades_train --max_epochs 200 --input_dir facades/train --which_direction BtoA# test the modelpython pix2pix.py --mode test--output_dir facades_test --input_dir facades/val --checkpoint facades_train 终端 在经过一段时间的训练后,你大概会得到类似于以下的输出:
pix2pix 是怎样运作的? pix2pix 使用了一种条件生成式对抗网络(Conditional Generative Adversarial Networks)来学习从输入图像到输出图像的映射。 这个网络由两个主要部分组成,生成器(generator)和辨别器 (discriminator)。生成器接收了输入图像,经过转变来得到输出图像。辨别器将输入图像与未知图像(不管是数据集中的目标图像,或是辨别器产生的输出图像)进行比较,并尝试猜测该图像是否由生成器生成。 一个数据集的例子就是输入图像是黑白图片,但是目标图像是这个图像的彩色版本: 在这种情况下,生成器就会去尝试学习如何让黑白图像变为彩色: 辨别器看到生成器彩色化的尝试,就会去试着学习分辨生成器彩色化的图像和数据集中真正有颜色的目标图像之间的区别。 为什么要这么麻烦呢?这篇论文其中的一个重点就是辨别器为训练生成器提供了一个损失函数,你不需要手动指定。人工设计(Hand-engineered)的转换代码已经由经过训练的神经网络所替代,所以为什么不能把手动设计的损失函数运算也替代了呢?如果这起作用的话,在你还在担忧计算机会取代你的工作时,它们就已经开始接管工作了。让我们来看一看对抗式网络的两个组成部分:生成器和辨别器。 生成器 (责任编辑:本港台直播) |