style-transfer
这个主要是利用caffe+model+code直接实现任意风格的转换。
最后实现需借助
- 一张风格图片
- 待转换风格的目标图片
- 训练模型
# coding
>>>python style.py -s <style_image> -c <content_image> -m <model_name> -g 0
优势:
- 可以实现任意风格的转换
- 可拓展性强
缺点:
- 耗时长(真的很长,如果用CPU的话)
fast-neural-style-tensorflow
风格快速迁移转换
顾名思义,这个比前者能够更快的进行风格转换,速度因机器而异,不过效率比前者确确实实提高了很多倍
最后实现需借助
- 一个训练好的风格模型
- 待转换的风格图片
# coding
>>> python eval.py --model_file <path of ckpt-done> --image_file <path of image>
优势:
- 速度相对来说很快
- 环境搭建相对来说更容易
缺点:
- 可拓展性更弱
- 只能转换固定几种风格
- 训练新风格模型时间长(比前者生成时间更长)
style-transfer的实现
环境介绍
Ubuntu16.04 + CPU + python2.7 + caffe
搭建caffe环境
可参考我的博客
实现前准备
# 默认已安装git,未安装请sudo apt get install git
>>>git clone https://github.com/fzliu/style-transfer
# pycaffe环境布置
>>>sudo pip install progressbar
# 下载训练模型,这里推荐vgg16
# 方法一,使用scripts/ 下的download_models.sh这个方法可能很慢。。。。
>>>bash scripts/download_models.sh vgg16
# 方法二
>>>wget http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel
使用方法二下载的model需要放在./model/vgg16下,使用方法一下载的已经默认放在那
实现
确保在源码文件夹中
# 格式
>>>python style.py -s <style_image> -c <content_image> -m <model_name> -g 0
# 举个栗子,model_name直接写vgg16或其他,不需要加具体路径
>>>python style.py -s images/style/starry_night.jpg -c images/content/nanjing.jpg -m vgg16 -g -1
提示:CPU很慢,真的很慢,估计要等一会才会有时间显示出来
参数解析:
- -s, 风格图位置;
- -c, 内容图位置;
- -m, 模型位置;
- -g, 什么模式,-1为CPU,0为单个GPU,1为两个GPU。
调整参数
# 确保在源码文件夹下,修改style.py配置文件
>>>vim style.py
# 修改文件大小,改为1024
parser.add_argument("-l", "--length", default=1024, type=float, required=False, help="maximum image length")
def transfer_style(self, img_style, img_content, length=1024, ratio=1e5,
n_iter=512, init="-1", verbose=False, callback=None)
# 修改迭代次数,个人认为400就差不多了,可自行修改;50次迭代之后改变的就是背景纹理,按需更改
parser.add_argument("-n", "--num-iters", default=400, type=int, required=False, help="L-BFGS iterations")
# 还有很多其他可以修改的地方,在此就不一一赘述了
fast-neural-style-tensorflow的实现
环境介绍
Ubuntu16.04 + CPU + python2.7 + tensorflow 1.0
搭建tensorflow环境
可参考我的博客
实现前准备
下载已经训练好的模型
百度云盘链接
# 安装pyyaml
>>>sudo pip install pyyaml
实现
确保在源码文件夹中
# 格式
>>>python eval.py --model_file <path of ckpt-done> --image_file <path of image>
# 举个栗子,假设wave.ckpt-done放在了源码文件夹中的models文件夹中
>>>python eval.py --model_file models/wave.ckpt-done --image_file img/test.jpg
# 默认生成位置在generated,默认生成文件名称为res.jpg。可自行在eval.py中更改
训练新的风格模型
下载
vgg16训练模型(500多M)
训练数据集(12.6G)
或者使用wget命令下载
# vgg16训练模型
>>>wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
# 训练数据集
>>>wget http://msvocds.blob.core.windows.net/coco2014/train2014.zip
移动模型到对应目录中
# 在源码文件夹中新建文件夹
>>>mkdir pretrained
# 下载完成之后需要进行解压
>>>tar -zxvf vgg_16_2016_08_28.tar.gz
# 移动文件夹到pretrained
>>>cp <path of vgg16> <pretrained>
训练新的模型
# 解压数据集
>>>unzip train2014.zip
# 进入数据集
>>>cd train2014
# 建立软链接,方便训练命令的输入
>>>ln -s <train2014的绝对路径> train2014
# 进入源码文件夹中
# 开始训练, wave.yml是作者预先配置好的文件,如果训练自己的模型,需要自己新写一份yml文件
>>>python train.py -c conf/wave.yml
总结
如果只是单纯的想玩玩风格转换的话,可以试试fast-neural-style-tensorflow,不过训练新模型还是不建议(特殊需要除外),耗时耗力
如果想锻炼自己,从零开始学习,可以从读论文开始,然后试试style-transfer代码