在caffe中调用python层的问题和解决方案
之前很早以前在caffe中用过python写的loss layer,很久不用后在新的服务器上使用就各种“No module named WeightedEuclideanLossLayer2”(注:WeightedEuclideanLossLayer2.py是我的loss层 )这个问题的解决分成两大块。
1 就WeightedEuclideanLossLayer2.py文件而言
因为说“No module named WeightedEuclideanLossLayer2”所以我就一直在py文件上下功夫
Step1 make clean; make all -j8; make matcaffe -j8; make pycaffe -j8 这些个命令重头到尾执行一遍。(我以为这样就可以实现在python中import caffe了。然而并不是.....所以给后面埋了一个雷)
Step2 将WeightedEuclideanLossLayer2.py文件放到caffe中python的目录下(因为不确定还要不要放到python的子文件夹caffe/python/caffe中,因此又拷贝了一份)。同时要讲文件中sys.path.append('c:/xxxx/b.py') 对应的路径改了。
Step3 run train,然后还是报错“No module named WeightedEuclideanLossLayer2”。晕,心想着是不是还有哪里忘记拷贝文件了,就一通搜。网上说在python的系统目录下(、usr/local/lib/python2.7)要有调用的文件。可是因为权限问题,没办法复制文件过去,我查了jiao的服务器,系统目录下也没有这个文件。我对比两个服务器的caffe/python目录,发现我的服务器里没有WeightedEuclideanLossLayer2.pyc这个文件,心想着是不是这样才导致找不到module。结果手动从jiao的服务器里拷贝该文件进来也还是不行。最后像网上说的在python下import WeightedEuclideanLossLayer2看能不能找到。
结果还是不行。后来我试着import python文件夹中自带的一些py文件看行不行结果就行了。(ps:图中的pyc文件是从jiao的服务器里直接拷贝过来的,不是新生成的。)
这样就好了,会发现WeightedEuclideanLossLayer2.pyc就是新生成的了。然而这样还是不能运行caffe train。又开始在网上各种搜,反正一下午就干这事了.....
有人说要写 export $PYTHONPATH=./path/to/caffe-sl-master/python:$PYTHONPATH 。但是我又不知道在哪写。无论是在caffe目录下写还是根目录下写都不对。
都快疯了.....
2 import caffe
后来鬼使神差地在python 下试了试“import caffe”结果意外地发现结果竟然是
惊不惊喜、意不意外、喜不喜欢???!!!我以外make pycaffe后自然就可以实现import caffe了......为了解决这个问题,有搜到:“在caffe目录下 ~/.bashrc文件最后添加 export PYTHONPATH=~/caffe/python:$PYTHONPATH
最好是完整的路径/home...(你的caffe路径)/caffe/python”
具体操作是:
vim打开文件后按“I”(insert)对文件进行编辑,即在文件末尾处加上“export PYTHONPATH=/home/jiao/caffe-sl-master/python:$PYTHONPATH
export LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/4.8/libgomp.so”这两行命令,然后按“Esc”推出编辑,按“:wq”保存并退出。
记住之后一定还要“source ~/.bashrc”使环境变量生效。最后就好了。
但是,当我运行caffe train时依旧是报错。原来是要关掉原先的terminal,重新开启后就可以了。问题总算是解决了。。。。。
参考帖子:http://blog.****.net/u010417185/article/details/53559107 (真正解决问题的)
http://blog.****.net/qq_36259240/article/details/77946409 (差点被误导的)
http://blog.****.net/striker_v/article/details/51596628