【caffe-Windows】关于LSTM的使用-coco数据集
前言
建議大家使用Linux,因?yàn)長(zhǎng)inux下的配置就沒(méi)這么麻煩,各種make就行啦。Linux用戶請(qǐng)繞道,因?yàn)榇瞬┛椭会槍?duì)Windows,可能比Linux麻煩很多倍。
在caffe-Windows新增LSTM層以后,相信很多人和我一樣很好奇如何使用這一層,使用參數(shù)都有什么。找了三四個(gè)代碼,但是大部分配置都出現(xiàn)了問(wèn)題,因?yàn)樗鼈兌际腔贚inux的,然而逮著一個(gè)折騰,還是折騰出來(lái)一個(gè)了。
源碼GitHub:https://github.com/jeffdonahue/caffe/tree/recurrent
源碼云盤:鏈接:http://pan.baidu.com/s/1kUCklO7 密碼:j6ot
源碼說(shuō)明:https://github.com/BVLC/caffe/pull/2033
資料來(lái)源:https://groups.google.com/forum/#!topic/caffe-users/7pt6V_IC8TE
第一步
安裝一些必要的東西:
①anaconda(Python2.7),用于執(zhí)行內(nèi)部Python文件進(jìn)行數(shù)據(jù)集制作
官網(wǎng):https://www.continuum.io/downloads
云盤:鏈接:http://pan.baidu.com/s/1c1Ydlio 密碼:60ph
②Git(Windows):用于運(yùn)行sh文件
官網(wǎng):https://git-scm.com/
云盤:鏈接:http://pan.baidu.com/s/1jHNHAYU 密碼:qjmb
③MinGW:用于執(zhí)行make命令
云盤:鏈接:http://pan.baidu.com/s/1gfl4lCR 密碼:6q7c
安裝方法:http://blog.csdn.net/pdcxs007/article/details/8582559
其實(shí)可以不用看安裝方法,直接傻瓜式安裝,安裝時(shí),注意選擇“download?latest?repository?catalogues”以及“C和C++compiler”即可。
【注】這三個(gè)工具都沒(méi)什么安裝技巧,各種下一步即可。
第二步
下載了caffe-recurrent與我們加完LSTM的caffe-Windows比較一下,以確定還需要加哪些層到caffe-Windows中去。
然而發(fā)現(xiàn)caffe-recurrent中并不存在\include\caffe\layers并不存在,那就先不管了;再看兩個(gè)代碼中的\src\caffe\layers,發(fā)現(xiàn)也沒(méi)啥可比性,那也暫時(shí)丟那不看,直接對(duì)比prototxt的序列化接口,也即caffe.proto,工具M(jìn)ATLAB。好像也沒(méi)啥改的。那就不管了。
【注】沒(méi)啥改的不是說(shuō)完全一樣,而是說(shuō)這一個(gè)必須進(jìn)行核對(duì)的一步中,需要修改的參數(shù)基本都在caffe-Windows的caffe.proto中定義了,雖然與caffe-recurrent的不一樣,但是影響不大。
第三步
執(zhí)行數(shù)據(jù)集的轉(zhuǎn)換,但是在此之前,請(qǐng)確定“前言”的三個(gè)工具以安裝無(wú)誤,安裝完git以后,有關(guān)sh的文件圖標(biāo)會(huì)更改為bat的圖標(biāo),表示可以雙擊執(zhí)行。以下步驟中嚴(yán)格注意路徑的跳轉(zhuǎn)。
現(xiàn)將caffe-recurrent解壓到一個(gè)地方,我放到了caffe-DEV中了,如下
接下來(lái)進(jìn)入到E:\CaffeDev\caffe-recurrent\data\coco對(duì)數(shù)據(jù)集進(jìn)行處理
首先獲取“train/val/test splits”,但是由于我們的windows沒(méi)有安裝wget,那么就手動(dòng)下載吧
get_coco2014_aux.sh中的網(wǎng)址數(shù)據(jù):http://dl.caffe.berkeleyvision.org/coco2014_aux.tar.gz
get_coco2014_aux.sh中的網(wǎng)址網(wǎng)盤:鏈接:http://pan.baidu.com/s/1gf1dskj 密碼:b6fg
直接解壓到當(dāng)前文件夾E:\CaffeDev\caffe-recurrent\data\coco即可,類似于
然后下載“official COCO tool”,由于是git下載,所以直接雙擊download_tools.sh即可下載,如果網(wǎng)速慢或者其它原因,也可以去網(wǎng)址下載
COCOtool官網(wǎng):https://github.com/pdollar/coco
COCOtool網(wǎng)盤:鏈接:http://pan.baidu.com/s/1nuKTC3B 密碼:r588
解壓到當(dāng)前文件夾,并且將coco-master重命名為coco。
【注】如果有興趣,可以看看置頂博客“網(wǎng)站收集”中關(guān)于Windows下的wget的安裝方法,很簡(jiǎn)單。
接下來(lái)一步很煩人,很容易出錯(cuò):
我們主要目的是編譯這個(gè)COCOtool的PythonAPI包,所以按照說(shuō)明,跳入到PythonAPI文件夾之后,直接使用這句話:
python setup.py install這一步在Linux下毫無(wú)問(wèn)題,但是Windows下錯(cuò)誤百出,一定要自己慢慢解決。我主要遇到的問(wèn)題是兩個(gè):
①python Unable to find vcvarsall.bat
解決方法:添加系統(tǒng)環(huán)境變量——變量名:VS90COMNTOOLS ? 變量值:%VS120COMNTOOLS%;
如果還是不行,繼續(xù)更改C:\Users\Bingo\Anaconda2\Lib\distutils下的msvc9compiler.py的243行為,嚴(yán)格注意對(duì)齊,這個(gè)地方有坑,注意對(duì)齊,不要用tab對(duì)齊,用空格
toolskey = "VS120COMNTOOLS"②error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\\VC\\BIN\\cl.exe"' failed with exit status 2
或者是這個(gè)“Command line error D8021: invalid numeric argument '/Wno-deprecated”,它倆一起出現(xiàn)的。
這個(gè)問(wèn)題也比較麻煩,折騰最久。差點(diǎn)忘記是怎么解決的了,有可能讀者運(yùn)行不會(huì)出現(xiàn)這個(gè)問(wèn)題,但是我就是遇到,沒(méi)轍。
我的解決辦法好像比較奇葩,沒(méi)啥道理而言
刪掉橫線部分以后,命令行運(yùn)行python setup.py install
接下來(lái)再恢復(fù)刪掉的內(nèi)容,再來(lái)一次python setup.py install,然后就好了。
不過(guò)為了與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 “l(fā)uarocks make LuaAPI/rocks/coco-scm-1.rockspec” under coco/那就運(yùn)行make編譯Makefile吧,前面已經(jīng)安裝了git和make了,直接對(duì)著文件夾E:\CaffeDev\caffe-recurrent\data\coco\coco\PythonAPI右鍵調(diào)出Git Bash Here,進(jìn)行make這樣就生成了一些東西,也不知道打包能不能直接用,畢竟是編譯的,還是上傳一下吧
pycocotools網(wǎng)盤:鏈接:http://pan.baidu.com/s/1o7Opvg2 密碼:31xc
第四步
制作數(shù)據(jù)集:
①下載官網(wǎng)的coco數(shù)據(jù)集
數(shù)據(jù)集太大了,就不百度云了。下載2014就行了,因?yàn)楸疚闹饕强纯磍stm的寫法和運(yùn)行,而非看結(jié)果。當(dāng)然訓(xùn)練好應(yīng)該有效果的
coco官網(wǎng):http://mscoco.org/dataset/#download
我把a(bǔ)nnotation上傳了一下:鏈接:http://pan.baidu.com/s/1slAStNf 密碼:kwi6
然后隨便哪里建立一個(gè)images文件夾,并且將三個(gè)文件解壓進(jìn)去。注意下圖的三個(gè)文件夾中均為圖片或者json,沒(méi)有任何其他文件夾,不要解壓錯(cuò)了。
②更改相關(guān)路徑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,內(nèi)容如下 python ./examples/coco_caption/coco_to_hdf5_data.py pause運(yùn)行出現(xiàn)
E:\CaffeDev\caffe-recurrent>python ./examples/coco_caption/coco_to_hdf5_data.pyTraceback (most recent call last):File "./examples/coco_caption/coco_to_hdf5_data.py", line 21, in <module>from coco import COCOFile "./data/coco/coco/PythonAPI/pycocotools\coco.py", line 55, in <module>from . import mask as maskUtils ValueError: Attempted relative import in non-packageE:\CaffeDev\caffe-recurrent>pause 請(qǐng)按任意鍵繼續(xù). . .將E:\CaffeDev\caffe-recurrent\data\coco\coco\PythonAPI\pycocotools\coco.py的第55行修改為 #from . import mask as maskUtils import mask as maskUtils保存以后再次運(yùn)行splitdata.bat即能劃分?jǐn)?shù)據(jù)了
【注】此步驟強(qiáng)烈建議關(guān)注路徑的修改,如果出現(xiàn)XXXdoesn't exist的問(wèn)題,一定是路徑問(wèn)題,請(qǐng)自行核對(duì)解決。
切分完成的標(biāo)志是
第五步
最后一步訓(xùn)練過(guò)程了,在E:\CaffeDev\caffe-recurrent下建立一個(gè)train_language_model.bat,內(nèi)容為
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最后運(yùn)行train_language_model.bat就可以訓(xùn)練咯,由于木有GPU,我就不訓(xùn)練看結(jié)果了,有興趣按照此處的 步驟慢慢走一遍剩下幾個(gè)模型的訓(xùn)練。等有時(shí)間把模型訓(xùn)練了,再看看結(jié)構(gòu)是什么樣子。博客后續(xù)更~~~~
第六步
分析此模型,用netscope畫(huà)出網(wǎng)絡(luò)結(jié)構(gòu)看看
提取出其中層LSTM看看寫法:
layer {name: "lstm1"type: "LSTM"bottom: "embedded_input_sentence"bottom: "cont_sentence"top: "lstm1"recurrent_param {num_output: 1000weight_filler {type: "uniform"min: -0.08max: 0.08}bias_filler {type: "constant"value: 0}} }這個(gè)于CNN結(jié)構(gòu)很像,只不過(guò)輸入需要兩層,如果需要使用caffe的LSTM的話,完全可以研究一下這一模型,便可以實(shí)現(xiàn)自己的數(shù)據(jù)集的訓(xùn)練。【注】本文只是為了避免紙上談兵,實(shí)際找了一個(gè)模型進(jìn)行調(diào)試輸出,但是模型的最終結(jié)果并沒(méi)有運(yùn)行出來(lái)(CPU太慢),而且結(jié)果與本文主旨無(wú)關(guān)。本文主要是為了看到一個(gè)能夠正確訓(xùn)練的關(guān)于LSTM的模型,進(jìn)而進(jìn)行后續(xù)的LSTM書(shū)寫分析。如若有誤請(qǐng)多多指正,謝謝大家。
下一篇博文可能會(huì)研究一個(gè)小例子,更加簡(jiǎn)明,參考地址先貼出來(lái):http://christopher5106.github.io/deep/learning/2016/06/07/recurrent-neural-net-with-Caffe.html
最后再?gòu)?qiáng)調(diào)一遍:路徑、路徑、路徑
總結(jié)
以上是生活随笔為你收集整理的【caffe-Windows】关于LSTM的使用-coco数据集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (转)第三方支付的盈利模式
- 下一篇: 特征提取的综合实验(多种角度比较SIFT