要配置一个可以用于学习图片风格并应用于其他图片的深度学习环境,我们使用的是neural-style的一个实现,而neural-style需要依赖深度学习的环境,我们将一步步配置环境。
Torch
按官网的介绍,Torch是一个可以利用CPU来进行机器学习算法的一个科学计算框架,拥有易利,效率高的优点,使用了LuaJIT和C/CUDA的技术。
核心特性:
- 强大的N维数组支持
- 大量的索引,切片,置换例程
- 通过LuaJIT到C的接口
- 线性代数例程
- 神经网络和EBMs
- 数值优化例程
- 快速高效的GPU支持
- 支付嵌入式,提供iOS,Android和FPGA的端口
安装Torch
安装Torch可以参考官网上的说明,但在此之前需要先把工具装好,包括LuaJIT和Torch7的依赖(以下均在root下进行)
1 | #安装curl |
其中,install-deps是一段脚本,用于安装依赖用的,但其只支持到fedora 23,所以fedora 24及以上用户需要将其下载下来,然后再进行修改。
鉴于fedora 23与24应该不会有太大的区别,装的东西都可以通用,所以我们在判断系统版本的一段加一个条件版本为’24’即放行就可以了。
1 | ... |
然后执行脚本,依赖就会自动下载。过程当中会需要输入root密码。执行后显示“==> Torch7’s dependencies have been installed”即表示依赖安装已完成。
然后就是下载torch进行安装了。
1 | #clone Torch |
最后步可以做可以不做,由于install.sh脚本会把torch的安装位置加到PATH中去,source的话当次终端就能生效了。
完成后Torch的就安装好了,以后输入“th”就可以进入到torch的REPL环境中去了。
如果需要执行一个lua计算,在REPL中可以使用dofile fileName.lua,在终端内可以使用th fileName.lua。
另外,torch提供了大量的关于机器学习的lua例程(github)和一个实例教程(github),有兴趣可以clone看一下。
LoadCaffe
这个看名字应该是用来为Torch7加载Caffe(至于Caffe是什么我也还不很了解,大概包含了神经网络需要使用的库),LoadCaffe的安装比较简单。
1 | #安装protobuf |
如此,便行了。
CUDA
由于Torch支持CUDA,这类计算量如果只用CPU算那肯定是蛋痛的,显示支持CUDA的可以安装。
在安装前需要先安装一些基本的工具,除了gcc,git等基本工具外,还包含一些python的工具。
1 | dnf install gcc gcc-gfortran build-essential openblas-devel python-dev python-pip python-nose python-numpy python-scipy |
CUDA的下载页面比较有人性,直接选平台就可以了,我选了fedora_21_x86的rpm包,下载好后dnf安装就可以了,但安装后其实只是添加了一个repo和在/var/cuda-repo-7-5-local/下放了大量rpm包而已,需要再运行一次1
dnf install cuda
安装好后就可以了。
neural-style
安装好以上的依赖包后,就可以安装这一次的主角了。neural-style 的获取使用也是很简单的,几行命令。
1 | git clone git@github.com:jcjohnson/neural-style.git |
其实这个仓库里就只有一个lua和几个测试图片,以及一下用于下载model的脚本。
执行download_models.sh后,会去下载VGG-19的模型,过程比较长,需要下载五百多M的东西,完成后会显示类似以下的进度。
1 | VGG_ILSVRC_19_layers.caffemod 100%[++++++++++++++++++++===========================>] 548.05M 285KB/s in 18m 45s |
Usage
一切就绪后就可以使用torch和neural-style提供的lua脚本来执行任务了。这一次我们直接使用neural-style里提供的图片来测试环境是否已经好了。(当前路径在neural-style目录下)
1 | th neural_style.lua -style_image examples/inputs/picasso_selfport1907.jpg -content_image examples/inputs/brad_pitt.jpg |
由于使用的是CPU,这个过程十分慢,起码得半小时以上,但最后还是显示1
<optim.lbfgs> reached max number of iterations
这个我不知道是错误还是正常,目录下的确显示了每次分析的out_xxx.png,看样子也算是成功。
另外,在我的机器上,如果只是执行上面的命令是无法正常跑下去的,一般都显示out of memory什么的问题1
2
3
4
5
6
7
8
9
10
11/media/Data/OpenSource/deeplearning/torch-cl/install/bin/luajit: .../deeplearning/torch-cl/install/share/lua/5.1/nn/THNN.lua:806: cuda runtime error (2) : out of memory at /media/Data/OpenSource/deeplearning/torch-cl/extra/cutorch/lib/THC/generic/THCStorage.cu:40
stack traceback:
[C]: in function 'v'
.../deeplearning/torch-cl/install/share/lua/5.1/nn/THNN.lua:806: in function 'SpatialConvolutionMM_updateOutput'
...torch-cl/install/share/lua/5.1/nn/SpatialConvolution.lua:100: in function 'updateOutput'
...earning/torch-cl/install/share/lua/5.1/nn/Sequential.lua:44: in function 'forward'
neural_style.lua:204: in function 'main'
neural_style.lua:515: in main chunk
[C]: in function 'dofile'
...g/torch-cl/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
[C]: at 0x00405c30
按理说我物理机16G内存,2G版的GTX760,正常来说也不可能处理一张图都挂这么夸张吧。后来我是通过加
1 | -image_size 128 |
解决的。size大点都不行=.=。
效果
我使用了neural-style中提供的sample来测试效果。原图如下:
但使用GPU去处理,效果就不一样了,且每一次的调用都有可能触发到”out of memory”,实在蛋痛。
有可以是使用的model不一样导致的,没有深究。
效果算是不错了。
GPU去处理的速度比CPU版本起码要高出30~40倍,我使用GTX760处理1054*1331的图大概就一分钟左右,而CPU得半小时以上,虽然看上去效果有与期望有点偏差,但应该不关是使用GPU还是使用CPU处理的问题,以后有机会再深入了解。
过程中出现的问题
- No LuaRocks module found for cutorch
没有cutorch就不能在GPU上运行了,可以在执行命令时在后面加了参数 “-gpu -1” 强制在CPU上运行(当然,这很慢)。
当然,也可以使用luarocks install cutorch安装,可是,遇到了另一个问题:1
/usr/local/cuda/include/host_config.h:115:2: error: #error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
然而我的gcc已经去到6.1了……那么这时候又有两个选择了
- 回退到旧版本
- 将检查去掉
两种方法其实都蛋痛,一个影响系统环境,一个影响程序稳定,不过先看看第二种方法如何。
因为出问题的是/usr/local/cuda/include/host_config.h,打开这个文件,找关键字”4.9”就可以了,找到一个条件1
2
3
4
5113
114
115
116
117
如果主版本号大于4或者主版本号等于四但次版本号大于9就出错,干脆就把这三行都注释得了。完成后再次执行安装……嗯……检查是通过了,但出其他问题了,看来是不行,还是安装旧版本gcc。* module ‘cunn’ not found:No LuaRocks module found for cunn
找不到cunn模块,这个是CUDA相关的。luarocks install cutorch
luarocks install cunn
* module ‘clnn’ not found:No LuaRocks module found for clnn
[link]
http://blog.csdn.net/enjoyyl/article/details/48053291
http://blog.csdn.net/enjoyyl/article/details/47397505
https://mintisan.github.io/notes/neural-style-with-mac.html
http://xmgeeks.com/t/deep-learning/257