【问题标题】:Loading custom Python Layer in Caffe-Import Error在 Caffe 导入错误中加载自定义 Python 层
【发布时间】:2017-11-27 13:58:26
【问题描述】:

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

../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,然后复制到caffe/python/caffe/ 一个重新编译的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()

一切正常。但我想从他的快照继续训练。在这种情况下,我会收到上面的错误。 PythonPath 看起来像

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']

编辑 2:这就是 sys.path 和导入的样子

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 目录调用 caffe 时才会出现这种情况。当我使用求解器而不是求解器状态创建 caffe 网络时,没有报告任何问题。

【问题讨论】:

  • 你应该把它复制到 caffe/python,而不是 caffe/python/caffe,顺便说一句。除非你想通过 'import caffe.maskextractor' 导入它
  • 没用。我再次编译了 pycaffe 并添加了 PYTHONPATH ='/path/to/init' 但仍然是同样的错误。我还需要编译什么吗?
  • 似乎是PYTHONPATH 问题。使用与用于初始训练的相同。
  • @Shai:我将 mask_extractor.py 复制到 caffe/python/caffe 并添加了 'from .mask_extractor import MaskExtractor' 仍然是同样的错误!我做错什么了?这只发生在我从 bash 而不是 python 脚本运行 caffe 时
  • @Alex:感谢您打印您的PYTHONPATH。我很确定将您的 mask_extractor 路径更改为绝对路径将修复您的ImportError。我已经更新了我的答案。

标签: python caffe pycaffe


【解决方案1】:

第 1 步:确保您可以从 Python 导入图层

要测试您的 python 代码,您应该能够打开 python 并输入 from module_name import layer_name 其中 module_name 和 layer_name 是您在 prototxt 定义中使用的内容。

如前所述,您已通过此步骤。

第 2 步:确保您的 PYTHONPATH 有效

如果你的 PYTHONPATH 是有效的,你应该能够进入你的 caffe 可执行文件的目录,然后导入你的模块。执行此步骤的结果是什么?

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

【讨论】:

  • 我做到了,但是每当我使用工具/咖啡火车而不是求解器时,我都会不断收到此错误
  • 那么您在执行上述操作时不会出现任何错误?您能否逐字提供echo $PYTHONPATH 的输出?你确定它有效吗?您能否也给我们您使用该层的 prototxt 部分?
  • 导入模块时没有报错,但是运行脚本时得到了那个
猜你喜欢
  • 2016-02-20
  • 2018-09-29
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2018-08-17
  • 2017-04-30
  • 2018-04-04
  • 1970-01-01
相关资源
最近更新 更多