突然接到任务,要实践一下风格迁移文章《Deep Painterly Harmonization》,该文章的说明大家可以看博客,在GitHub上看到了该文章的实现,https://github.com/luanfujun/deep-painterly-harmonization。从star和fork来看,非常靠谱。但是实践后发现,真的是坑集大成者,今天特地针对碰到的坑做记录。
首先介绍一下风格迁移是什么。简单来说,我们给定一张风格图A,内容图B,通过深度学习的方法,生成具备图A风格和图B内容的图片图C,如下所示。
图A 图B 图C但是该文章创造性地提出了一种基于风格迁移的图像融合方法,可以将一幅图像毫无违和感地嵌入另一幅图像当中。如下
项目中提供了下载脚本,需要下载三个文件VGG_ILSVRC_19_layers_deploy.prototxt、vgg_normalised.caffemodel和VGG_ILSVRC_19_layers.caffemodel
sh models/download_models.sh
可惜,根本下不动。o(╥﹏╥)o。这里提供VGG_ILSVRC_19_layers_deploy.prototxt和vgg_normalised.caffemodel的下载链接,但是VGG_ILSVRC_19_layers.caffemodel太大,大家还是直接下载http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel
如果直接按照文档中的步骤,运行make clean && make,会出现如下问题
find . -type f | xargs -n 5 touch
rm -f libcuda_utils.so
/usr/local/cuda-8.0/bin/nvcc -arch sm_35 -O3 -DNDEBUG -Xcompiler -fopenmp --compiler-options '-fPIC' -o libcuda_utils.so --shared cuda_utils.cu -I/home/ubuntu/torch/install/include/THC -I/home/ubuntu/torch/install/include/TH -I/home/ubuntu/torch/install/include -L/home/ubuntu/torch/install/lib -Xlinker -rpath,/home/ubuntu/torch/install/lib -lluaT -lTHC -lTH -lpng -lluajit -lgomp
make: /usr/local/cuda-8.0/bin/nvcc: Command not found
makefile:10: recipe for target 'libcuda_utils.so' failed
make: *** [libcuda_utils.so] Error 127
或者
cuda_utils.cu:2:18: fatal error: lua.h: No such file or directory
#include "lua.h"
^
compilation terminated.
首先使用英伟达GPU,就需要他的分布式计算框架,cuda,由于我们公司已经安装好了cuda,没有碰到问题。安装见cuda安装。该项目并不使用常规的pytorch和tensorflow,而是使用torch,所以我们要安装torch,torch使用的lua语言,torch和pytorch的区别。torch安装如下
git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch
bash install-deps
./install.sh
#原因是cuda和torch的头文件都提供了相同的重载运算符,编译器不知道用哪一个。输入下面shell命令禁止使用cuda的头文件编译torch
export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
./install.sh
source ~/.bashrc(这个需要根据具体文件来看,通常为.bashrc)。输入th,出现以下就表示成功。
loadcaffe的安装需要提前安装好protobuf,否则会出现以下问题
make[2]: *** No rule to make target ../PROTOBUF_PROTOC_EXECUTABLE-NOTFOUND', needed bycaffe.pb.cc'. Stop.
make[1]: *** [CMakeFiles/loadcaffe.dir/all] Error 2
make: *** [all] Error 2
Error: Build error: Failed building.
因此我们需要安装protobuf,安装步骤如下
sudo apt-get install autoconf automake libtool curl make g++ unzip
git clone https://github.com/google/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
安装完后,我们就可以安装loadcaffe,同时要注意,要指定 luarocks的路径,同时要使用sudo权限,否则会有以下问题
Error: No results matching query were found.
那么loadcaffe的安装步骤如下
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo ~/torch/install/bin/luarocks install loadcaffe
安装步骤
sudo apt-add-repository ppa:octave/stable
sudo apt-get update
sudo apt-get install octave
命令行输入octave,得到错误
octave exited with signal 6
需要sudo
sudo octave
好了,解决了这些bug后,我们就可以开心地进行图片风格转换了,我们显存有12G,然而并没有什么卵用,一张图处理大致要六到七分钟左右。
#To generate all results (in data/) using the provided scripts, simply run
python gen_all.py
#in Python and then
run('filt_cnn_artifact.m')
#in Matlab or Octave. The final output will be in results/
再接再厉。