风格迁移《Deep Painterly Harmonization》代码实践及问题解决

    突然接到任务,要实践一下风格迁移文章《Deep Painterly Harmonization》,该文章的说明大家可以看博客,在GitHub上看到了该文章的实现,https://github.com/luanfujun/deep-painterly-harmonization。从star和fork来看,非常靠谱。但是实践后发现,真的是坑集大成者,今天特地针对碰到的坑做记录。

一、风格迁移 

    首先介绍一下风格迁移是什么。简单来说,我们给定一张风格图A,内容图B,通过深度学习的方法,生成具备图A风格和图B内容的图片图C,如下所示。

图A 风格迁移《Deep Painterly Harmonization》代码实践及问题解决_第1张图片 图B 风格迁移《Deep Painterly Harmonization》代码实践及问题解决_第2张图片 图C

    但是该文章创造性地提出了一种基于风格迁移的图像融合方法,可以将一幅图像毫无违和感地嵌入另一幅图像当中。如下

二、实践及问题解决

坑1:vgg模型下载

    项目中提供了下载脚本,需要下载三个文件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

坑2:torch,cuda

    如果直接按照文档中的步骤,运行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,出现以下就表示成功。

风格迁移《Deep Painterly Harmonization》代码实践及问题解决_第3张图片

坑3:loadcaffe安装

    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

坑4:Octave安装

    安装步骤

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/

    再接再厉。

 

 

你可能感兴趣的:(深度学习)