开始之前一定要提醒大家,不要安装python3.6,目前caffe的官方给的说明是,还不能很好的支持python3.6
刚开始那会,笔者在安装caffe之前就已经装过anaconda3了,但是熟悉anaconda3的童鞋都知道,anaconda3默认安装的是python3.6的版本,导致我在编译caffe时,具体编译指令如下:
可以参考我的另一篇博客:Ubuntu 16.04 在cuda9.0 cudNN7.5 opencv3.4.0下安装 caffe(详细):博客地址
-
cd ..\\回到caffe文件夹的位置
-
-
make all -j12
//j12代表计算机cpu有12个核,这个得根据自己的电脑配置,我这里可以12线程一起make,这样make速度会快上很多
-
-
make test -j12
-
-
sudo
make runtest -j12
-
//这里直接 make runtest -j12 可能如下报错
-
check failed : status == cublas_status_success(
1 vs
0) cublas_status_not_initialized
-
-
make pycaffe
//如果以后用python来开发的话必须执行这一句,一般不管你是否用python,都会执行这一句
在进行make pycaffe后,检测pycaffe是否安装好,使用指令:
-
python
-
-
//进入python,会提示你安装的是在anaconda3的版本
-
-
import caffe
在导入caffe模型时,就会报错:
Caffe中ImportError: dynamic module does not define module export function (PyInit__caffe)错误
主要原因:就是caffe对python3的支持并不好,只支持python2.7,此时你可以去anaconda官方下载anaconda2,使用2来进行对caffe模型的使用。
这里在使用anaconda2来编译caffe时,你的opencv版本不能是opencv3的,否则会报错:大量的opencv未定义的引用。
考虑到python3是未来的趋势,建议大家安装anaconda3.
针对上面的问题:Caffe中ImportError: dynamic module does not define module export function (PyInit__caffe)错误
先对自己电脑中的anaconda3中的python3.6进行降级,下载python3.5,官网链接:python3.6换成3.5
没有anaconda3的可以在这里下载:anaconda3下载,具体安装很简单,可以自行百度。
安装好python3.5,你按照上面要求重新编译caffe,并导入caffe模型时,依然报错,可以通过更改caffe目录下的makefile.config文件:
-
# Uncomment to use Python 3 (default is Python 2)
-
#PYTHON_LIBRARIES := boost_python3 python3.5m
-
#PYTHON_INCLUDE := /usr/include/python3.5m \
-
# /usr/lib/python3.5/dist-packages/numpy/core/include
-
-
将上面的语句后三行的
#号注释掉,如下:
-
# Uncomment to use Python 3 (default is Python 2)
-
PYTHON_LIBRARIES
:= boost_python3 python3.
5m
-
PYTHON_INCLUDE
:=
/usr/include
/python3.5m \
-
/usr
/lib/python3.
5/dist-packages/numpy/core/
include
注释完再重新
-
make clean
-
make all -j12
//12是我服务器的核数,具体根据自己电脑配置
-
make pycaffe
这时又有一个坑等着我们,遇到了这个错误:提示 缺少libboost,很头疼,解决办法:
出现问题“ld cannot find lboost_python3”,这个时候应该创建一个libboost_python-py35.so的符号链接。
具体做法为“cannot find -lboost_python3” when using Python3 Ubuntu16.04:
-
cd /usr/lib/x86_64-linux-gnu
-
sudo ln -s libboost_python-py35.so libboost_python3.so
如果没有boost这时就需要自己去安装一个:
-
sudo apt-get install libboost-all-dev
-
//头文件一般安装在
-
/usr/
include
-
//下面有一个目录boost,里面是头文件。而库文件一般都放在
-
/usr/lib/x86_64-linux-gnu
-
-
//如何查看当前安装的boost版本
-
dpkg -S /usr/
include/boost/version.hpp
-
-
//通过上面的命令,你就可以发现boost的版本了,查看结果可能如下:
-
libboost1
.58-dev: /usr/
include/boost/version.hpp
到这里,在重新编译caffe:
-
make clean
-
make all -j12
//12是我服务器的核数,具体根据自己电脑配置
-
make pycaffe
输入python,再import caffe,报错!!!
-
ImportError: No
module named
'google'
-
//或者报如下错误:
-
ImportError: No
module named google.protobuf.
手动编译和安装 protobuf
3.0 以上版本,到 protobuf
的 release页面去下载两个安装包:github地址
由于是python3.5 必须下载protobuf-cpp-3.5.1.zip和protobuf-python-3.5.1.zip,刚开始下载最新版本的3.6.0,在安装protobuf-python-3.6.0时会报错。
注意,仔细看 protobuf
的说明。安装 protobuf
需要安装两样东西, 少一样都不行:
the protocol compiler
;the protobuf runtime
因此, 接下来首先安装 the protocol compiler
和 protobuf cpp runtime
。
注意:必须先安装完 protobuf-cpp-3.5.1.zip,在安装protobuf-python-3.5.1.zip,否则还是会报错。
-
解压第一个安装包
`protobuf-cpp-3.0.0-beta-2.zip`,并进入解压出来的目录
-
$ ./configure
-
$ make
-
$ make check
-
$ sudo make install
-
$ sudo ldconfig
# refresh shared library cache.
这样 the protocol compiler
和 protobuf cpp runtime
就同时编译和安装好了。下面编译和安装 protobuf python runtime
:
-
解压第二个安装包
`protobuf-python-3.0.0-beta-2.zip`,并进入解压出来的目录
-
$ cd python
-
$ python setup.py build
-
$ python setup.py test
-
$ python setup.py install
这样 protobuf python runtime
就编译和安装好了。注意 protobuf python runtime
是作为 pip
的包安装的。但是你可以从 conda
里面看到它:
-
$ conda
list | grep protobuf
-
protobuf
3.0
.0b2
在重新编译caffe,再在python中导入:import caffe就能成功了。
参考博客:https://blog.csdn.net/Dark_Miro/article/details/78355292?locationNum=9&fps=1
https://blog.csdn.net/lien0906/article/details/51784191
https://stackoverflow.com/questions/34295136/importerror-dynamic-module-does-not-define-module-export-function-pyinit-caff