关于convert caffe model to torch的一些问题
Posted
技术标签:
【中文标题】关于convert caffe model to torch的一些问题【英文标题】:Some questions about convert caffe model to torch 【发布时间】:2018-02-26 12:28:39 【问题描述】:我使用torch-caffe-binding 将caffe 模型转换为torch。我想最后删除损失层并添加其他torch层,我可以删除.prototxt
文件中的层并“训练”模型以获取.caffemodel
文件并导入torch吗?
并且模型使用了lmdb类型的数据,当我使用net:forward(input)
训练模型时,模型只是使用了数据层中定义的数据,而不是使用input
data。那么如何训练使用 lmdb 数据的模型呢?
caffe 模型有一些自定义层,所以我不能使用loadcaffe
在torch 中加载模型
【问题讨论】:
【参考方案1】:这里有 3 个问题 -
-
您可能需要损失层进行训练(这就是您的
想最小化)。所以用它训练,训练完成后
在转换为 Torch 之前将其从您的 prototxt 中删除。
为了使用 lmdb 而不是使用数据层,连接 您对第一个 conv 层的输入(假设您的第一个非输入 层是conv,例如说你有
layer
name: "input-data"
type: "DummyData"
top: "data"
top: "im_info"
dummy_data_param
shape dim: 1 dim: 3 dim: 224 dim: 224
还有
input: "data"
input_shape:
dim: 1
dim: 3
dim: 224
dim: 224
然后
layer
name: "conv1"
type: "Convolution"
bottom: "data" --> **here put data instead of input-data**
top: "conv1"
convolution_param
num_output: 96
kernel_size: 3
pad: 1
stride: 1
至于自定义层,您必须找到一个等效层
在 Torch 中实现或自行实现
【讨论】:
当我删除prototxt中的损失层时,控制台显示如下:I0923 20:56:19.437440 23288 net.cpp:200] conv1 does not need backward computation.
所有层都有保存消息。我不能使用torch来训练它。当我添加损失层,一切正常,当所有层都需要向后时,如何删除损失层?提前致谢。
我找到了解决方法,只需在最后一层添加loss_weight: 1
即可。感谢您的帮助
当我使用net = caffe.Net('test.prototxt','test.caffemodel','train')
和net:getParameters()
得到netGradParameters
。但我得到[torch.DoubleTensor with no dimension]
,我不能在torch 中训练它。所以如果caffe 模型不能用火炬训练还是我用错误的方式训练它?以上是关于关于convert caffe model to torch的一些问题的主要内容,如果未能解决你的问题,请参考以下文章
Python int too large to convert to C long
「caffe编译bug」.build_release/lib/libcaffe.so: undefined reference to cv::imread
关于在2.7中出现 "UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode
[踩坑] Django "OverflowError: Python int too large to convert to C long" 错误