在Caffe导入中加载自定义Python层时出错

在Caffe导入中加载自定义Python层时出错,python,caffe,pycaffe,Python,Caffe,Pycaffe,我已经用Python编写了自己的Caffe层(maskextractor.py)。当从头开始训练网络时,它工作得很好。但一旦我尝试从保存的网络进行微调: ../caffe/build/tools/caffe train -solver solverFCN8s_MCN_newmodule.prototxt -snapshot snapshot/train8MCNs_borders_pascal_maskextractor_iter_1.solverstate 我得到的错误是导入新层失败: I11

我已经用Python编写了自己的Caffe层(maskextractor.py)。当从头开始训练网络时,它工作得很好。但一旦我尝试从保存的网络进行微调:

../caffe/build/tools/caffe train -solver solverFCN8s_MCN_newmodule.prototxt -snapshot snapshot/train8MCNs_borders_pascal_maskextractor_iter_1.solverstate
我得到的错误是导入新层失败:

I1127 09:38:40.254966  3102 layer_factory.hpp:77] Creating layer maskextractor
ImportError: No module named mask_extractor
terminate called after throwing an instance of 'boost::python::error_already_set'
*** Aborted at 1511775520 (unix time) try "date -d @1511775520" if you are using GNU date ***
显然,Caffe找不到新层。我已经通过
sys.path.insert将其添加到Pythonpath中,然后将其复制到重新编译的pycaffe中

编辑:这只发生在我微调时。如果我从解算器开始:

import numpy as np
from PIL import Image
import os, sys
caffe_dir = "/home/ICTDOMAIN/453615/Downloads/caffe/python"
sys.path.insert(0,caffe_dir)
import caffe
newmodule_dir = "../lib/mask_extractor"
sys.path.insert(0, newmodule_dir)
import mask_extractor
#
caffe.set_mode_gpu()
caffe.set_device(0)

# continue from the saved weights
weights = 'snapshot/train8MCNs_borders_pascal_adadelta_maskextractor_new_iter_1.caffemodel'
solver=caffe.get_solver('solverFCN8s_MCN_adadelta_maskextractor_new.prototxt')
solver.net.copy_from(weights)

solver.solve()
一切正常。但我想从他那里继续训练。在这种情况下,我得到上面的错误。蟒蛇看起来像

print sys.path

 ['/home/ICTDOMAIN/453615/Downloads/caffe/python', '../lib/mask_extractor', '/home/ICTDOMAIN/453615/Downloads/caffe/python', '/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/voc-fcn8s', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/mxnet-0.9.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/fast_rcnn-0.0.0-py2.7-linux-x86_64.egg', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
from subprocess import call
import numpy as np
from PIL import Image
import os, sys
#caffe_dir = "/home/ICTDOMAIN/453615/Downloads/caffe-crfrnn/python"
#caffe_dir = "/home/ICTDOMAIN/453615/Downloads/caffe/python"
#sys.path.insert(0,caffe_dir)
#import caffe
newmodule_dir = "/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/lib/mask_extractor"
sys.path.insert(0, newmodule_dir)
import mask_extractor
#import caffe
#
caffe.set_mode_gpu()
caffe.set_device(0)
print sys.path
# continue from the saved weights

call('/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/voc-fcn8s/run_ft.sh', shell=True)'
编辑2:这是sys.path和导入的样子

print sys.path

 ['/home/ICTDOMAIN/453615/Downloads/caffe/python', '../lib/mask_extractor', '/home/ICTDOMAIN/453615/Downloads/caffe/python', '/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/voc-fcn8s', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/mxnet-0.9.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/fast_rcnn-0.0.0-py2.7-linux-x86_64.egg', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
from subprocess import call
import numpy as np
from PIL import Image
import os, sys
#caffe_dir = "/home/ICTDOMAIN/453615/Downloads/caffe-crfrnn/python"
#caffe_dir = "/home/ICTDOMAIN/453615/Downloads/caffe/python"
#sys.path.insert(0,caffe_dir)
#import caffe
newmodule_dir = "/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/lib/mask_extractor"
sys.path.insert(0, newmodule_dir)
import mask_extractor
#import caffe
#
caffe.set_mode_gpu()
caffe.set_device(0)
print sys.path
# continue from the saved weights

call('/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/voc-fcn8s/run_ft.sh', shell=True)'
而sys.path现在是

'/home/ICTDOMAIN/453615/Downloads/caffe/python', '/home/ICTDOMAIN/453615/Downloads/fcn.berkeleyvision.org/lib/mask_extractor'
但同样的问题依然存在。正如我前面提到的,只有当我从
tools
dir调用caffe时,才会出现这种情况。当我使用解算器而不是solverstate创建caffe网络时,不会报告任何问题

步骤1:确保可以从Python导入图层 要测试python代码,您应该能够打开
python
并从module_name import layer_name
键入
,其中
module_name
layer_name
是您在prototxt定义中使用的内容

如前所述,您通过了此步骤

第二步:确保你的PYTHONPATH是有效的 如果PYTHONPATH是有效的,那么应该能够转到caffe excutable的目录,然后导入模块。执行此步骤的结果是什么


PYTHONPATH
中的路径都应该是绝对路径。

您应该将其复制到caffe/python,而不是caffe/python/caffe,顺便说一句。除非您希望通过“import-caffe.maskextractor”导入,否则无法进行导入。我再次编译了pycaffe,并将PYTHONPATH='/path/to/init'添加到了其中,但仍然存在相同的错误。我还需要编译其他东西吗?好像是
PYTHONPATH
issue。使用与初始培训相同的方法。@Shai:我将mask_extractor.py复制到caffe/python/caffe,并添加了“from.mask_extractor import MaskExtractor”,但仍然是相同的错误!我做错了什么?这只有在我从bash而不是python运行caffe时才会发生script@Alex:感谢您打印您的
PYTHONPATH
。我很确定,将掩码提取程序路径更改为绝对路径将修复您的
ImportError
。我已经更新了我的答案。我已经更新了,但是当我使用工具/caffe训练而不是解算器时,我不断地得到这个错误,所以当你执行上述操作时,你不会得到任何错误?您能给我们提供
echo$PYTHONPATH
verbatim的输出吗?你确定它是有效的吗?你能给我们你的prototxt中使用这个层的部分吗?当我导入模块时没有报告错误,但是当我运行脚本时,我得到了那个错误