建议大家使用Linux,因为Linux下的配置就没这么麻烦,各种make就行啦。Linux用户请绕道,因为此博客只针对Windows,可能比Linux麻烦很多倍。
在caffe-Windows新增LSTM层以后,相信很多人和我一样很好奇如何使用这一层,使用参数都有什么。找了三四个代码,但是大部分配置都出现了问题,因为它们都是基于Linux的,然而逮着一个折腾,还是折腾出来一个了。
源码GitHub:https://github.com/jeffdonahue/caffe/tree/recurrent
源码云盘:链接:http://pan.baidu.com/s/1kUCklO7 密码:j6ot
源码说明:https://github.com/BVLC/caffe/pull/2033
资料来源:https://groups.google.com/forum/#!topic/caffe-users/7pt6V_IC8TE
安装一些必要的东西:
①anaconda(Python2.7),用于执行内部Python文件进行数据集制作
官网:https://www.continuum.io/downloads
云盘:链接:http://pan.baidu.com/s/1c1Ydlio 密码:60ph
②Git(Windows):用于运行sh文件
官网:https://git-scm.com/
云盘:链接:http://pan.baidu.com/s/1jHNHAYU 密码:qjmb
③MinGW:用于执行make命令
云盘:链接:http://pan.baidu.com/s/1gfl4lCR 密码:6q7c
安装方法:http://blog.csdn.net/pdcxs007/article/details/8582559
其实可以不用看安装方法,直接傻瓜式安装,安装时,注意选择“download latest repository catalogues”以及“C和C++compiler”即可。
【注】这三个工具都没什么安装技巧,各种下一步即可。
下载了caffe-recurrent与我们加完LSTM的caffe-Windows比较一下,以确定还需要加哪些层到caffe-Windows中去。
然而发现caffe-recurrent中并不存在\include\caffe\layers并不存在,那就先不管了;再看两个代码中的\src\caffe\layers,发现也没啥可比性,那也暂时丢那不看,直接对比prototxt的序列化接口,也即caffe.proto,工具MATLAB。好像也没啥改的。那就不管了。
【注】没啥改的不是说完全一样,而是说这一个必须进行核对的一步中,需要修改的参数基本都在caffe-Windows的caffe.proto中定义了,虽然与caffe-recurrent的不一样,但是影响不大。
执行数据集的转换,但是在此之前,请确定“前言”的三个工具以安装无误,安装完git以后,有关sh的文件图标会更改为bat的图标,表示可以双击执行。以下步骤中严格注意路径的跳转。
现将caffe-recurrent解压到一个地方,我放到了caffe-DEV中了,如下
接下来进入到E:\CaffeDev\caffe-recurrent\data\coco对数据集进行处理
首先获取“train/val/test splits”,但是由于我们的windows没有安装wget,那么就手动下载吧
get_coco2014_aux.sh中的网址数据:http://dl.caffe.berkeleyvision.org/coco2014_aux.tar.gz
get_coco2014_aux.sh中的网址网盘:链接:http://pan.baidu.com/s/1gf1dskj 密码:b6fg
直接解压到当前文件夹E:\CaffeDev\caffe-recurrent\data\coco即可,类似于
然后下载“official COCO tool”,由于是git下载,所以直接双击download_tools.sh即可下载,如果网速慢或者其它原因,也可以去网址下载
COCOtool官网:https://github.com/pdollar/coco
COCOtool网盘:链接:http://pan.baidu.com/s/1nuKTC3B 密码:r588
解压到当前文件夹,并且将coco-master重命名为coco。
【注】如果有兴趣,可以看看置顶博客“网站收集”中关于Windows下的wget的安装方法,很简单。
接下来一步很烦人,很容易出错:
我们主要目的是编译这个COCOtool的PythonAPI包,所以按照说明,跳入到PythonAPI文件夹之后,直接使用这句话:
python setup.py install
这一步在Linux下毫无问题,但是Windows下错误百出,一定要自己慢慢解决。
我主要遇到的问题是两个:
①python Unable to find vcvarsall.bat
解决方法:添加系统环境变量——变量名:VS90COMNTOOLS 变量值:%VS120COMNTOOLS%;
如果还是不行,继续更改C:\Users\Bingo\Anaconda2\Lib\distutils下的msvc9compiler.py的243行为,严格注意对齐,这个地方有坑,注意对齐,不要用tab对齐,用空格
toolskey = "VS120COMNTOOLS"
②error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\\VC\\BIN\\cl.exe"' failed with exit status 2
或者是这个“Command line error D8021: invalid numeric argument '/Wno-deprecated”,它俩一起出现的。
这个问题也比较麻烦,折腾最久。差点忘记是怎么解决的了,有可能读者运行不会出现这个问题,但是我就是遇到,没辙。
我的解决办法好像比较奇葩,没啥道理而言
删掉横线部分以后,命令行运行python setup.py install
接下来再恢复删掉的内容,再来一次python setup.py install,然后就好了。
不过为了与readme保持一致
To install:
-For Matlab, add coco/MatlabApi to the Matlab path (OSX/Linux binaries provided)
-For Python, run "make" under coco/PythonAPI
-For Lua, run “luarocks make LuaAPI/rocks/coco-scm-1.rockspec” under coco/
那就运行make编译Makefile吧,前面已经安装了git和make了,直接对着文件夹E:\CaffeDev\caffe-recurrent\data\coco\coco\PythonAPI右键调出Git Bash Here,进行make
这样就生成了一些东西,也不知道打包能不能直接用,毕竟是编译的,还是上传一下吧
pycocotools网盘:链接:http://pan.baidu.com/s/1o7Opvg2 密码:31xc
制作数据集:
①下载官网的coco数据集
数据集太大了,就不百度云了。下载2014就行了,因为本文主要是看看lstm的写法和运行,而非看结果。当然训练好应该有效果的
coco官网:http://mscoco.org/dataset/#download
我把annotation上传了一下:链接:http://pan.baidu.com/s/1slAStNf 密码:kwi6
然后随便哪里建立一个images文件夹,并且将三个文件解压进去。注意下图的三个文件夹中均为图片或者json,没有任何其他文件夹,不要解压错了。
②更改相关路径E:\CaffeDev\caffe-recurrent\examples\coco_caption\coco_to_hdf5_data.py的12~14行修改为
COCO_PATH = './data/coco/coco'
# COCO_TOOL_PATH = '%s/PythonAPI/build/lib/pycocotools' % COCO_PATH
COCO_TOOL_PATH = '%s/PythonAPI/pycocotools' % COCO_PATH
#COCO_IMAGE_ROOT = '%s/images' % COCO_PATH
COCO_IMAGE_ROOT = 'E:/COCO/images'
第216~217行修改为
#COCO_ANNO_PATH = '%s/annotations/captions_%%s2014.json' % COCO_PATH
#COCO_IMAGE_PATTERN = '%s/images/%%s2014' % COCO_PATH
COCO_ANNO_PATH = '%s/annotations/captions_%%s2014.json' % COCO_IMAGE_ROOT
COCO_IMAGE_PATTERN = '%s/%%s2014' % COCO_IMAGE_ROOT
COCO_IMAGE_ID_PATTERN = 'COCO_%s2014_%%012d.jpg'
在E:\CaffeDev\caffe-recurrent下新建bat文件splitdata.bat,内容如下
python ./examples/coco_caption/coco_to_hdf5_data.py
pause
运行出现
E:\CaffeDev\caffe-recurrent>python ./examples/coco_caption/coco_to_hdf5_data.py
Traceback (most recent call last):
File "./examples/coco_caption/coco_to_hdf5_data.py", line 21, in
from coco import COCO
File "./data/coco/coco/PythonAPI/pycocotools\coco.py", line 55, in
from . import mask as maskUtils
ValueError: Attempted relative import in non-package
E:\CaffeDev\caffe-recurrent>pause
请按任意键继续. . .
将E:\CaffeDev\caffe-recurrent\data\coco\coco\PythonAPI\pycocotools\coco.py的第55行修改为
#from . import mask as maskUtils
import mask as maskUtils
保存以后再次运行splitdata.bat即能划分数据了
【注】此步骤强烈建议关注路径的修改,如果出现XXXdoesn't exist的问题,一定是路径问题,请自行核对解决。
切分完成的标志是
最后一步训练过程了,在E:\CaffeDev\caffe-recurrent下建立一个train_language_model.bat,内容为
E:\CaffeDev\caffe-master\Build\x64\Release\caffe train -solver=./examples/coco_caption/lstm_lm_solver.prototxt
pause
由于GPU借走了,所以只能用CPU模式了。修改E:\CaffeDev\caffe-recurrent\examples\coco_caption\lstm_lm_solver.prototxt第18行为
solver_mode: CPU
最后运行train_language_model.bat就可以训练咯,由于木有GPU,我就不训练看结果了,有兴趣按照此处的 步骤慢慢走一遍剩下几个模型的训练。等有时间把模型训练了,再看看结构是什么样子。博客后续更~~~~
分析此模型,用netscope画出网络结构看看
提取出其中层LSTM看看写法:
layer {
name: "lstm1"
type: "LSTM"
bottom: "embedded_input_sentence"
bottom: "cont_sentence"
top: "lstm1"
recurrent_param {
num_output: 1000
weight_filler {
type: "uniform"
min: -0.08
max: 0.08
}
bias_filler {
type: "constant"
value: 0
}
}
}
这个于CNN结构很像,只不过输入需要两层,如果需要使用caffe的LSTM的话,完全可以研究一下这一模型,便可以实现自己的数据集的训练。
【注】本文只是为了避免纸上谈兵,实际找了一个模型进行调试输出,但是模型的最终结果并没有运行出来(CPU太慢),而且结果与本文主旨无关。本文主要是为了看到一个能够正确训练的关于LSTM的模型,进而进行后续的LSTM书写分析。如若有误请多多指正,谢谢大家。
下一篇博文可能会研究一个小例子,更加简明,参考地址先贴出来:http://christopher5106.github.io/deep/learning/2016/06/07/recurrent-neural-net-with-Caffe.html
最后再强调一遍:路径、路径、路径