文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

pix2pix-tensorflow

该项目由 Isola et al 基于 pix2pix 实现。

关于此实现的文章

这个项目是 pix2pix 的 Tensorflow 实现,方法是学习一组输入图像和输出图像实现特征描述。原论文中提及如下示例:

这个移植版本是直接基于 torch 的实现,而不是已有的 Tensorflow 实现。这表明这是一个忠实于原有研究工作的实现版本,因此并没有添加其他额外的东西。其在带 cuDNN 的 GPU 下的处理速度跟 Torch 实现的速度相当。

安装

要求

  • Tensorflow 0.12.1

推荐

  • Linux with Tensorflow GPU edition + cuDNN
第 1 段(可获 1.19 积分)

开始

# clone this repo
git clone https://github.com/affinelayer/pix2pix-tensorflow.git
cd 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-8 hours depending on GPU, on CPU you will be waiting for a bit)
python pix2pix.py --mode train --output_dir facades_train --max_epochs 200 --input_dir facades/train --which_direction BtoA
# test the model
python pix2pix.py --mode test --output_dir facades_test --input_dir facades/val --checkpoint facades_train

上面测试将生成一个 HTML 文件,位于 facades_test/index.html ,在浏览器中打开该文件将显示 input/output/target 图像集合。

第 2 段(可获 0.23 积分)

数据集

该程序所使用的数据格式跟 pix2pix 的格式一样,包含并排显示的输入图像和预期的输出图像。例如:

例如:

pix2pix 的论文中已经包含了一些可用的数据集。可以使用 tools/download-dataset.py 脚本来下载这些数据集。

datasetimage
python tools/download-dataset.py facades
包含来自 CMP Facades dataset 的 400 张图片。 (31MB)
python tools/download-dataset.py cityscapes
包含来自 Cityscapes training set 的 2975 张图片. (113M)
python tools/download-dataset.py maps
来自 Google Maps 的 1096 训练的图像 (246M)
python tools/download-dataset.py edges2shoes
50k 训练图片,来自于 UT Zappos50K dataset. 边界是使用 HED edge detector + post-processing 进行计算. (2.2GB)
python tools/download-dataset.py edges2handbags
137K Amazon Handbag 图像,来自于 iGAN project. 边界使用 HED edge detector + post-processing 计算. (8.6GB)
第 3 段(可获 1.39 积分)

facades 是一个最小最简单的数据集,一般可以从这里开始。

创建自己的数据集

示例: 为 inpainting 创建包含空白中心的数据集。

# 对原图进行大小调整
python tools/process.py --input_dir photos/original --operation resize --output_dir photos/resized
# 创建空白中心的图像
python tools/process.py --input_dir photos/resized --operation blank --output_dir photos/blank
# 将空白中心图像和已做大小调整后的图像进行合并
python tools/process.py --input_dir photos/resized --b_dir photos/blank --operation combine --output_dir photos/combined
# 分开到 train/val 集合
python tools/split.py --dir photos/combined
第 4 段(可获 0.29 积分)

photos/combined 目录将包含两个子目录 train 和 val ,你可以用来做训练和测试。

从已有的图像中创建结对图像

如果你有两个目录分别是 a 和 b,包含可以相应的图像(相同名称、尺寸,不同的数据),那么可以用  process.py 来进行合并:

python tools/process.py --input_dir a --b_dir b --operation combine --output_dir c

该命令将图片合并成并排的图像,合并后的图像就是 pix2pix 所需的。

彩色化

为了对图像进行彩色化,你的图像应该具有一样的宽高比。你可以使用 resize 命令对图像进行大小调整和剪裁:

第 5 段(可获 0.94 积分)
python tools/process.py --input_dir photos/original --operation resize --output_dir photos/resized

无需再做任何处理了,彩色模型(查看下面的训练部分)使用单一的图像替代结对图像。

训练

结对图像

为了对结对图像进行常规训练,你需要指定包含训练图像的目录,以及目标训练目录。目录的参数是 AtoB 或者 BtoA。

python pix2pix.py --mode train --output_dir facades_train --max_epochs 200 --input_dir facades/train --which_direction BtoA

彩色化

pix2pix.py 包含了特定的代码用来处理单个图像(而不是结对图像)的彩色化,方法如下:

第 6 段(可获 0.84 积分)
python pix2pix.py --mode train --output_dir photos_train --max_epochs 200 --input_dir photos/train --lab_colorization

在这种模式下,图像 A 是一张黑白图像(只包含亮度),而图像 B 包含了色彩通道(没有亮度信息)。

提示

你可以使用 tensorboard 来查看计算图的有损程度。

tensorboard --logdir=facades_train

如果你希望生成一个图片训练过程的网络图,可以使用 --display_freq 50 这样的参数,它将每进行 50 步时将当前训练的输入和输出信息更新到 facades_train/index.html 文件中。

第 7 段(可获 0.8 积分)

测试

测试是通过参数 --mode test 来进行的。你应该使用 --checkpoint 指定检查点,这个需要指向 output_dir 目录,该目录是你之前用 --mode train 参数创建的:

python pix2pix.py --mode test --output_dir facades_test --input_dir facades/val --checkpoint facades_train

测试模式将会自行加载一些检查点的配置参数,因此你无需指定 which_direction 参数。

测试运行完毕将输出一个 HTML 文件,位于 facades_test/index.html ,该文件显示 input/output/target 图像集合:

实施验证

第 8 段(可获 0.8 积分)

我们使用了一台 ~1.3 TFLOPS Nvidia GTX 750 Ti GPU 的 Linux 机器来对执行的代码进行验证。由于缺少计算能力,没有进行广泛的验证,只是针对 facades 数据集做验证。

git clone https://github.com/affinelayer/pix2pix-tensorflow.git
cd pix2pix-tensorflow
python tools/download-dataset.py facades
time nvidia-docker run --volume $PWD:/prj --workdir /prj --env PYTHONUNBUFFERED=x affinelayer/tensorflow:pix2pix python pix2pix.py --mode train --output_dir facades_train --max_epochs 200 --input_dir facades/train --which_direction BtoA
nvidia-docker run --volume $PWD:/prj --workdir /prj --env PYTHONUNBUFFERED=x affinelayer/tensorflow:pix2pix python pix2pix.py --mode test --output_dir facades_test --input_dir facades/val --checkpoint facades_train
第 9 段(可获 0.5 积分)

比较外墙数据集:

InputTensorflowTorchTarget

未实现的特性

下列模式尚未实现

  • defineG_encoder_decoder
  • defineG_unet_128
  • defineD_pixelGAN

引用

如果你在研究中使用了这个代码,请注明引用自这篇论文 Image-to-Image Translation Using Conditional Adversarial Networks:

@article{pix2pix2016,
  title={Image-to-Image Translation with Conditional Adversarial Networks},
  author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},
  journal={arxiv},
  year={2016}
}
第 10 段(可获 0.68 积分)

致谢

这个项目只是将 pix2pix 从 Torch 移植到 Tensorflow。 它同时包含来自 Torch 的色彩空间转换代码。感谢 Tensorflow 团队推出了这么一个高质量的库。同时也要特别感谢 Phillip Isola 回答我关于 pix2pix 代码的问题。

第 11 段(可获 0.56 积分)

文章评论