轉載請注明出處:
http://www.cnblogs.com/darkknightzh/p/5783006.html
之前使用的是torch,由於其他人在caffe上面預訓練了inception模型,需要使用caffe的inception模型進行微調。然后網上搜了一下如何將caffe模型load到torch里面。有兩種方式(可直接跳轉到3查看):
1. https://github.com/szagoruyko/loadcaffe
該網址的不需要安裝caffe。應該是根據.prototxt來強制解析.caffemodel文件的吧(瞎猜的。。。)。這個安裝比較簡單,直接使用luarocks install loadcaffe就行(唯一的依賴就是protobuf:sudo apt-get install libprotobuf-dev protobuf-compiler),但是裝完之后,用不了。。。仔細一看,該網址寫着:Loading googlenet is supported by。。。應該就是不支持inception模型吧。
代碼如下:
require 'loadcaffe' model = loadcaffe.load('my inception.prototxt', ' my inception.caffemodel', 'nn') torch.save("net.t7", model)
反正用的時候,提示如下:
說明:該網址提供了一些已經訓練好的模型(下載不一定需要fq,但是從該網址打開對應的連接需要fq),使用訓練好的模型是可以成功載入的。同時自動生成對應的lua文件,如my inception.prototxt.lua。使用torch.save后,會生成.t7文件。
2. 該網址給出了如果使用inception模型的網址的鏈接(並未算作第二種方式):
https://github.com/soumith/inception.torch
但是該程序是直接讀已經寫好的lua文件,貌似並不能轉caffe的inception。
ps:上面這個網址又給出了tensorflow轉torch的V3的鏈接:
https://github.com/Moodstocks/inception-v3.torch
3. https://github.com/szagoruyko/torch-caffe-binding
這個網址給出的也是從.prototxt及.caffemodel來得到torch的模型。但是不會生成lua文件。使用該程序需要安裝caffe。
1)由於使用的電腦已經安裝了caffe,因而直接運行如下命令安裝:
CAFFE_DIR=/*path-to-caffe-root*/ luarocks install caffe
如:
CAFFE_DIR=/usr/local/caffe luarocks install caffe
說明:
a 上面這個直接在終端里面一次性輸入就行(開始在.bashrc文件中加入了CAFFE_DIR並重啟了電腦。不清楚如果不加入CAFFE_DIR,程序能否運行)
b 此處為caffe的根目錄,如下圖,不用加上include目錄。
因為CMakeLists.txt里面包含了需要的子文件夾:
c 中間碰到了一個問題,就是運行上面的命令后,提示如下:
error: #error This file was generated by a newer version of protoc which is error: #error incompatible with your Protocol Buffer headers. Please update
截圖如下:
https://github.com/BVLC/caffe/issues/19中有人建議需要更新Protocol Buffers,更新了之后,重新運行上面的命令,安裝成功了。。。之前安裝的版本未2.5.0,重新安裝后的為2.6.1。
ps:參見下面網址:
http://www.cnblogs.com/darkknightzh/p/5782992.html
2)直接使用訓練好的模型:
require 'caffe' net = caffe.Net('deploy.prototxt', 'bvlc_alexnet.caffemodel', 'test') input = torch.FloatTensor(10,3,227,227) output = net:forward(input) gradOutput = torch.FloatTensor(10,1000,1,1) gradInput = net:backward(input, gradOutput)
或者把訓練好的模型嵌入到新的網絡中:
require 'caffe' model = nn.Sequential() model:add(caffe.Net('deploy.prototxt', 'bvlc_alexnet.caffemodel', 'test')) model:add(nn.Linear(1000,1))
ps:目前能成功載入caffe的inception模型,但是還不清楚能不能使用呢。。。
載入網上下載的模型,不會有Ignoring source layer的提示,如下:
載入其他人訓練的模型,會提示Ignoring source layer XXX,如下:
更新:剛才和同事說了一下Ignoring的問題,他說是因為里面有些層沒有,不用管這個。
pppppps:見了鬼了,剛才碰到了很詭異的一件事:開始用着好好地,結果突然間就出錯了,錯誤如下:
libcaffe.so.1.0.0-rc3: cannot open shared object file:No such file or directory
截圖如下:
我XXX,真的莫名其妙啊。即便只使用require "caffe",也還是報上面的錯誤。當時去找這個庫,印象中在caffe安裝目錄/usr/local/caffe/build/lib里面找過,沒找到,中午睡了個覺,剛才一試,程序又可以了。。。我XXX。又去了這個目錄,見鬼了,這幾個文件出現了:
我都准備用http://www.cnblogs.com/smartvessel/archive/2011/01/21/1940868.html里面說的方法,去重新鏈接了。但是重新鏈接也需要有那個文件才行啊。結果出現這些文件之后,直接運行程序,又可以了。。。哎,不知道是否是硬盤有問題了。
更新:剛才和同事說了一下找不到libcaffe.so,他說,他經常碰到。。。經常碰到。。。經常碰到。。。他說過一會就好了。好吧。
更新1608181641:剛才又出現了require出錯。然后趕快去/usr/local/caffe/build/里面看了一下,果然,已經沒有lib目錄了。。。如下圖:
真不清楚是硬盤的問題還是什么原因。。。