正文
https://github.com/phillipi/pix2pix
Isola 等人在 pix2pix 中得到的结果看起来很不错,它是对抗性网络的一种绝佳实现,所以我将 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 repogit clone https://github.com/affinelayer/pix2pix-tensorflow.gitcd pix2pix-tensorflow# download the CMP Facades dataset http://cmp.felk.cvut.cz/~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)。生成器接收了输入图像,经过转变来得到输出图像。辨别器将输入图像与未知图像(不管是数据集中的目标图像,或是辨别器产生的输出图像)进行比较,并尝试猜测该图像是否由生成器生成。
一个数据集的例子就是输入图像是黑白图片,但是目标图像是这个图像的彩色版本:
在这种情况下,生成器就会去尝试学习如何让黑白图像变为彩色:
辨别器看到生成器彩色化的尝试,就会去试着学习分辨生成器彩色化的图像和数据集中真正有颜色的目标图像之间的区别。