在caffe中安装python3.5的原因:
开始之前一定要提醒大家,不要安装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:
手动编译和安装 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 <pip>
最后:
在重新编译caffe,再在python中导入:import caffe就能成功了。
参考博客:https://blog.csdn.net/Dark_Miro/article/details/78355292?locationNum=9&fps=1