我使用两个基于caffe构建的库:crf-rnn(https://github.com/torrvision/crfasrnn/tree/master/python-scripts)和hed(https://github.com/s9xie/hed/blob/master/examples/hed/),前者用于语义图像分割,后者用于轮廓检测。最后,我意识到如何让它们一起工作以进行对象跟踪,但现在我面临一个令人尴尬的问题:因为它们都是在caffe之上构建的,所以它们导入相同的包,但每个包含非常不同的内容,即crf-rnn使用caffe.Segmenter,hed没有和ed使用caffe.TEST crf-rnn没有。
Python不允许导入两个具有相同名称的包。我已经尝试通过将hed放在一个单独的Python文件中并在主脚本中导入它,并使用as
到import caffe as cf
获取其中一个软件包来找到一种解决方法,但到目前为止还没有任何结果。
有什么建议吗?
编辑:这是一个名为Aux.py
def import_hed_caffe():
import sys,os
caffe_dir = '/home/alex/Downloads/hed/python'
sys.path.insert(0,caffe_dir)
hed_model = 'deploy.prototxt'
hed_pretrained = 'hed_pretrained_bsds.caffemodel'
import caffe as cf
net = cf.Net(hed_model, hed_pretrained, cf.TEST)
return net
这是主要的脚本:
caffe_root = '../caffe-crfrnn/'
sys.path.insert(0, caffe_root + 'python')
import caffe as espresso
import AuxScript
net = espresso.Segmenter(MODEL_FILE, PRETRAINED, gpu=False)
a=AuxScript.import_hed_caffe()
我得到了
AttributeError: 'module' object has no attribute 'TEST'
毋庸置疑,单独一切正常,所以只是导入
编辑2:
./ CMakeFiles
./ CMakeFiles / pycaffe.dir
./ CMakeFiles / pycaffe.dir / CAFFE
./ CAFFE
./ CAFFE / imagenet
./ CAFFE /原
./ CAFFE /测试
编辑3:
├── caffe
│ ├── _caffe.cpp
│ ├── _caffe.so -> /home/alex/Downloads/hed/lib/_caffe.so
│ ├── classifier.py
│ ├── classifier.pyc
│ ├── detector.py
│ ├── detector.pyc
│ ├── draw.py
│ ├── imagenet
│ │ └── ilsvrc_2012_mean.npy
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── io.py
│ ├── io.pyc
│ ├── net_spec.py
│ ├── net_spec.pyc
│ ├── proto
│ │ ├── caffe_pb2.py
│ │ └── __init__.py
│ ├── pycaffe.py
│ ├── pycaffe.pyc
│ └── test
│ ├── test_layer_type_list.py
│ ├── test_net.py
│ ├── test_net_spec.py
│ ├── test_python_layer.py
│ ├── test_python_layer_with_param_str.py
│ └── test_solver.py
├── classify.py
├── CMakeFiles
│ ├── CMakeDirectoryInformation.cmake
│ ├── progress.marks
│ └── pycaffe.dir
│ ├── build.make
│ ├── caffe
│ │ └── _caffe.cpp.o
│ ├── cmake_clean.cmake
│ ├── CXX.includecache
│ ├── DependInfo.cmake
│ ├── depend.internal
│ ├── depend.make
│ ├── flags.make
│ ├── link.txt
│ └── progress.make
├── cmake_install.cmake
├── CMakeLists.txt
├── detect.py
├── draw_net.py
├── Makefile
├── requirements.txt
答案 0 :(得分:1)
我已经看过你的上一次编辑了,我必须说在你的上下文中需要更改/篡改python sys.path
但这里还不够:你必须重命名其中一个caffe
包。 / p>
例如:如果caffe
包是名为caffe
的目录,其中包含__init__.py
个文件,请将caffe
重命名为espresso
,并在您的代码中简单地:< / p>
import espresso
(如果它只是一个caffe.py
文件,请重命名为espresso.py
,尽管如果同一目录中还有其他模块可能会出现问题,非常值得一试)
BTW:导入模块时,例如xxx
,您可以通过输入以下内容来了解它正在使用的完整文件路径:
print(xxx.__file__)
(当你有疑问时很有用)
答案 1 :(得分:0)
好的,所以我找到了最简单的解决方案:我写了两个脚本,一个用于crf-rnn生成blob,我只在整个数据集上运行一次并存储输出。
然后我编写了第二个脚本,每次检测和跟踪对象时都会使用hed边缘检测器。