0%

开源项目 | pix2pix-tensorflow

这是一个神奇的项目,甚至是其他项目的母项目,但是,这不是最原版的项目了。

最原版的项目使用 2.7 ,这个已经改成 3+ 了。

这里我推荐使用 python 3.6


项目相关



配置环境


其虚拟环境我用的是 python3.6 ,关于配置环境,我直接用的是

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Tensorflow==1.4.1 

这样简单的安装之后就可以直接用了,本来我想用 docker 的,结果使用校园网出现了网络链接不行,需要认证之类的,所以,最后直接安装了,然后发现,真的只需要装 tensorflow 就足够了。


制作数据集


这个暂时忽略


使用


训练

这里假设你已经制作好自己的数据集,使用

如果你没有自己的数据集,又想运行这个项目,可以,下载官方的数据集

1
python tools/download-dataset.py facades

训练

1
2
3
4
5
6
7
# 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

这里先展示我的目录结构

|___docker
|___docs
|___facades_train 「存储输出 model 的目录」
|___facades
    |___train 「存储数据集」
|___server
    |___tools
        |___export-checkpoint.py
|___tools 「存储转化 model 的脚本」
|___static 「自建目录,存储 model 转化为 pict」
|___pix2pix.py

这里展示一下,我的文件目录的内容

output_dir

我的 output_dirfacades_train 经过训练,我得到的结果如下面所示

input_dir

我的 input_dirfacades/train 这里贴一张,我的数据集中的一张照片

测试

1
2
3
4
5
6
# test the model
python pix2pix.py \
--mode test \
--output_dir facades_test \
--input_dir facades/val \
--checkpoint facades_train

转化 model


有的时候,我们虽然可以用 python 直接使用 model,但是,有的时候,我们想用 js 直接调用训练好的 model

这个时候有两个思路。

思路一

部署该模型为一个服务,在客户端浏览器中利用JSCanvas数据发送请求至该服务来获得手绘风格的输出。

这个我没操作过,但是,还需要部署一个服务器,想来也是比较麻烦,但是,该项目同样给出了如何部署服务器的代码。

进入该项目的 server 目录。

可以看到里面有一个转换的过程

Exporting

1
2
3
python tools/export-checkpoint.py \
--checkpoint facades_BtoA \
--output_file static/models/facades_BtoA.bin

这个代码块的意思是,将 facades_BtoA 里面的训练好的模型转化为文件 facades_BtoA.bin

开启服务

1
python serve.py --port 8000

If you open http://localhost:8000/ in a browser, you should see an interactive demo.

这个方案我没试过,因为,我见过一个更加简便的方式,那就是不需要开启服务,直接用 js 调用 model ,把 model 看成一个方法。

思路二

网上的一个思路是

利用Keras训练该模型并利用tensorflowJs直接部署到浏览器,这样做就不需要服务器端的交互,更利于集成。

但是,我看到的那个项目没有这么采用,那个项目是

我也对这个项目进行了分析,在

这个项目的思路是直接使用 deeplearn.js 来调用 model ,但是,他的 model 的格式是 pict 的,我们的是 **,所以下一步就是如何转化模型。

查了很久终于在一个帖子上看到

其中有一代码块是

python tools/export-checkpoint.py --checkpoint ../export --output_file static/models/facades_BtoA.pict

按照这个项目,其命令为

python ./server/tools/export-checkpoint.py --checkpoint facades_train --output_file static/models/facades_BtoA2.pict

原来还是利用了上面格式转换,只不过最后的后缀变了,尝试以后,果然成功了。

不过,原贴主用的是 ml5.js

1
pix2pix = ml5.pix2pix('model/MY_OWN_MODEL.pict', modelLoaded);

我那个项目用的是 deeplearn.js ,感兴趣的可以研究一下。

请我喝杯咖啡吧~