• (原)ubuntu16在torch中使用caffe训练好的模型


    转载请注明出处:

    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目录了。。。如下图:

    真不清楚是硬盘的问题还是什么原因。。。

  • 相关阅读:
    基于visual Studio2013解决C语言竞赛题之1074八皇后
    Bit,Bytes,KB,MB,GB,TB,PB,EB,ZB,YB
    RFID系统的选择
    java中复制文本文件
    java中复制文本文件
    数据筛选和排序
    实现Windows程序的数据绑定
    实现Windows程序的数据更新
    使用ListView控件展示数据
    构建良好的windows程序
  • 原文地址:https://www.cnblogs.com/darkknightzh/p/5783006.html
Copyright © 2020-2023  润新知