本文介绍了如何在Ubuntu16.04环境下搭建caffe和tensorflow,并利用caffe和tensorflow实现了风格转换。同时,介绍了如何训练新的风格模型。
style-transfer
这个主要是利用caffe+model+code直接实现任意风格的转换。
最后实现需借助
1
| python style.py -s <style_image> -c <content_image> -m <model_name> -g 0
|
优势:
- 可以实现任意风格的转换
- 可拓展性强 缺点:
- 耗时长(真的很长,如果用CPU的话)
fast-neural-style-tensorflow
风格快速迁移转换
顾名思义,这个比前者能够更快的进行风格转换,速度因机器而异,不过效率比前者确确实实提高了很多倍
最后实现需借助
1 2
| python eval.py --model_file <path of ckpt-done> --image_file <path of image>
|
优势:
- 速度相对来说很快
- 环境搭建相对来说更容易 缺点:
- 可拓展性更弱
- 只能转换固定几种风格
- 训练新风格模型时间长(比前者生成时间更长)
style-transfer的实现
环境介绍
Ubuntu16.04 + CPU + python2.7 + caffe
搭建caffe环境
介绍
Caffe是一个清晰而高效的深度学习框架。Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换。
优势:
- 上手快:模型与相应优化都是以文本形式而非代码形式给出。
Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。
- 速度快:能够运行最棒的模型与海量的数据。
Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.
- 模块化:方便扩展到新的任务和设置上。
可以使用Caffe提供的各层类型来定义自己的模型。
- 开放性:公开的代码和参考模型用于再现。
- 社区好:可以通过BSD-2参与开发与讨论。
安装依赖
1 2 3 4 5 6 7 8
| sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no-install-recommends libboost-all-dev sudo apt-get install libatlas-base-dev sudo apt-get install libhdf5-serial-dev
sudo apt-get install python-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
|
安装caffe(可利用virtualenv新建一个纯净环境)
1 2 3 4 5 6 7 8
| sudo apt-get install git
git clone https://github.com/BVLC/caffe.git
cd caffe
for req in $(cat requirements.txt); do pip install $req; done
|
配置caffe
1 2 3 4 5
|
cp Makefile.config.example Makefile.config
vim Makefile.config
|
- 因为CPU MODE, 所以在CPU_ONLY := 1前面的#要去掉
- 两个路径要改成这样:(添加后面的两个hdf5的路径,
否则编译时报hdf5错误)
1 2 3
| INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
|
修改完成之后,保存退出即可
1 2 3 4 5 6 7 8 9 10 11
| make pycaffe make all make test make runtest
pwd
export PYTHONPATH=xxx/python:$PYTHONPATH
|
测试
一般来说,如果运气好的话,到这里基本就算安装完成,但我们还是要测试一下
部分报错解决方案
最好的方案莫过于,复制报错代码,Google一下
下面提供几种,我安装时的几处坑
- 设置环境变量,注意一定是在caffe文件夹下,路径是caffe/python的绝对路径
- 安装依赖报错,这个没什么好讲,直接google吧
- make的时候报错,想想看是否编辑了Makefile.config。之后make
clean一下,再重新编译一下
- CPU_ONLY这个选项为1时,需要修改一下
caffe/examples/mnist/lenet_solver.prototxt
,将其中的solver_mode:GPU
改为CPU
参考文章
实现前准备
1 2 3 4 5 6 7 8 9 10 11
| git clone https://github.com/fzliu/style-transfer
sudo pip install progressbar
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下,使用方法一下载的已经默认放在那
实现
确保在源码文件夹中
1 2 3 4 5
| python style.py -s <style_image> -c <content_image> -m <model_name> -g 0
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。
调整参数
1 2 3 4 5 6 7 8 9 10 11 12 13
| vim style.py
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)
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环境
环境说明:Ubuntu16.04 注:tensorflow只支持64位系统
安装前准备
1 2
| sudo apt-get install python-pip python-dev
|
CPU安装
1 2 3 4
| sudo pip installl tensorflow
sudo pip3 install tensorflow
|
GPU安装
1 2 3 4 5 6 7 8 9 10 11 12
|
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp27-none-linux_x86_64.whl
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp35-cp35m-linux_x86_64.whl
sudo pip install --upgrade $TF_BINARY_URL
sudo pip3 install --upgrade $TF_BINARY_URL
|
参考文章
源码安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| git clone https://github.com/tensorflow/tensorflow
cd tensorflow
git checkout r1.0
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install bazel
sudo apt-get install python-numpy python-dev python-pip python-wheel
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
./configure
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install /tmp/tensorflow_pkg/tensorflow*.whl
|
参考文章
测试
实现前准备
下载已经训练好的模型
百度云盘链接
1 2
| # 安装pyyaml sudo pip install pyyaml
|
实现
确保在源码文件夹中
1 2 3 4 5 6
| python eval.py --model_file <path of ckpt-done> --image_file <path of image>
python eval.py --model_file models/wave.ckpt-done --image_file img/test.jpg
|
训练新的风格模型
下载
vgg16训练模型(500多M)
训练数据集(12.6G)
或者使用wget命令下载
1 2 3 4 5
| wget http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
wget http://msvocds.blob.core.windows.net/coco2014/train2014.zip
|
移动模型到对应目录中
1 2 3 4 5 6 7 8
| mkdir pretrained
tar -zxvf vgg_16_2016_08_28.tar.gz
cp <path of vgg16> <pretrained>
|
训练新的模型
1 2 3 4 5 6 7 8 9 10 11 12
| unzip train2014.zip
cd train2014
ln -s <train2014的绝对路径> train2014
python train.py -c conf/wave.yml
|
总结
如果只是单纯的想玩玩风格转换的话,可以试试fast-neural-style-tensorflow,不过训练新模型还是不建议(特殊需要除外),耗时耗力
如果想锻炼自己,从零开始学习,可以从读论文开始,然后试试style-transfer代码
style-transfer
参考文章
style-transfer
代码
fast-neural-style-tensorflow
代码