您的位置:首页 > 编程语言 > Python开发

(ubuntu16.04)关于caffe+python3.5(非anaconda安装)编译的一些问题

2018-02-01 11:59 891 查看
最近被要求安装caffe+python3.5,又听说python3.5对caffe的不太友好,真的很心累。

不过在尝试了一个晚上和白天之后,终于装好了...

现在将一些我的操作在下面进行说明,常规的那些caffe安装就不说了,很多帖子写的很详细

希望能帮助到大家解决问题...但是由于每个linux的环境都会不同,所以不一定有效...

多账户的服务器慎用!!!因为会牵扯到各种依赖的更新和python不同版本的安装

PS:接触linux时间很短,如果有概念或描述的错误,望各位大神指正~

将参考大神们的链接放在这里

http://blog.csdn.net/zuqiutxy/article/details/71459249

http://blog.csdn.net/EncodeTS/article/details/53946096

http://blog.csdn.net/yingyujianmo/article/details/51014440

一、关于python版本

首先要说明的是,我的python版本是python3.5.2,而且不是通过anaconda安装的...PS:因为一直装不好

可以通过python命令查询你ubuntu的python版本

python
sudo python



另外...即使你显示的是python2.x版本的,也先别着急安python3

对于ubuntu16来说,查看/usr/bin下是否存在python3.5版本,因为可能在你的系统下有多个版本的python

尝试如果有python3.5的话,尝试建立软连接操作如下  

PS:我这里是将python3.5连接到python3,然后python3在连接到python

sudo rm python               #删除原来的python
sudo ln -s python3 python    #建立python3.5的软连接
之后再查看一下python的版本看看是否改变了

二、关于libboost1.55

caffe想用python3.5,有libboost>=1.5的要求,网上很多的教程都让用apt-get libboost1.55-all-dev安装,但是会遇到无法定位安装包的问题,更新源之后也没有效果,但其实可以只安装libboost1.55。执行如下命令

sudo apt-get install libboost1.55-dev      #一定要安装的
sudo apt-get install libboost1.55-all-dev  #不一定能成功,不过没关系

三、关于各种python依赖包

在caffe的python接口教程,会让大家执行一个for req in $(cat requirements.txt); do sudo pip3 install $req; done命令

但是这个是针对python2.7的,这里需要用pip3安装python3的,如果没有安装过pip3的,执行过程如下

sudo apt-get install python3-pip
pip3 --version   #查看pip3版本,确认安装成功

之后进入caffe/python目录,执行

for req in $(cat requirements.txt); do sudo pip3 install $req; done #注意是 pip3,如果是普通用户要加sudo安装结束退到caffe根目录,查看是否安装成功,执行
sudo pip3 install -r python/requirements.txt #注意是 pip3PS:安装成功的项会有 successfully XXX;如果有没有安装成功的,据说需要再单独安装未成功的,但是我没有遇到这个问题

四、关于numpy的安装
caffe想用python3.5,有numpy>=1.7的要求,这里我也不知道装的啥,但是通过如下命令可以解决问题
sudo apt-get install python-numpy

五、关于protobuf的版本
caffe想用python3.5,有protobuf>=3的要求,但是好像太高也会有问题,先查看当前版本

protoc --version如果是3.x的版本应该没有问题,但是不建议太高,这里给出protobuf3.0.0的安装,一步一步复制执行即可
PS:最好在一个统一的安装文件夹下执行;所有make可以考虑 make -j16加速

参考大神教程http://blog.csdn.net/EncodeTS/article/details/53946096
mkdir protobuf && cd protobuf
mkdir cpp && cd cpp
wget https://github.com/google/protobuf/releases/download/v3.0.0/protobuf-cpp-3.0.0.tar.gz tar xvf protobuf-cpp-3.0.0.tar.gz && cd protobuf-3.0.0
./configure && make
make check
sudo make install
sudo ldconfig
cd ../..
mkdir python && cd python
wget https://github.com/google/protobuf/releases/download/v3.0.0/protobuf-python-3.0.0.tar.gz tar xvf protobuf-python-3.0.0.tar.gz && cd protobuf-3.0.0/python/
python setup.py build
python setup.py test
python setup.py install之后查看当前protobuf版本,是否升级到3.0.0,普通账户和root账户最好版本相同
protoc --version
sudo protoc --version
六、关于caffe中Makefile.config的配置

先将我的Makefile.config的配置放在这里,供各位参考

USE_CUDNN := 1
OPENCV_VERSION := 3
CUDA_DIR := /usr/local/cuda
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
BLAS := atlas
PYTHON_LIBRARIES := boost_python-py35 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
/usr/lib/python3.5/dist-packages/numpy/core/include \
/usr/local/lib/python3.5/dist-packages/numpy/core/include
PYTHON_LIB := /usr/lib
WITH_PYTHON_LAYER := 1
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_6
a171
4-linux-gnu/hdf5/serial
USE_NCCL := 1
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
TEST_GPUID := 0
Q ?= @PYTHON_LIBRARIES
     原本这里关于boost的设置是boost_python3,但是你的系统里可能并不是叫这个名字,所以要执行

locate boost_python     将会显示你系统里的boost_python到底是个啥,我的是boost_python-py35

PYTHON_INCLUDE
     由于我并没有在/usr/lib/python3.5/dist-packages下发现numpy,而是在/usr/local/lib/python3.5/dist-packages下发现numpy的,所以我加上/usr/local/lib/python3.5/dist-packages/numpy/core/include
     PS:但是由于我没有使用单一变量法实验...所以不知道这样改有没有帮助...

WITH_PYTHON_LAYER

     记得打开就好了...

七、关于caffe编译

大多数的教程,关于caffe编译会让你执行如下操作
PS:先别急操作!!!


sudo make clean #不要在已成功编译的caffe下执行
sudo make all -j16
sudo make test -j16
sudo make runtest -j16
sudo make pycaffe -j16这里结合我的血与泪,我的建议是在新的caffe上安装,不要动原来的编译好的caffe,在你安装caffe的目录下执行
sudo cp -r caffe caffe-py3
ll #查看用户名和组,比如我的用户名和组是 aaa:aaa
sudo chown -R aaa:aaa caffe-py3/ #修改caffe-py3的所属
cd caffe-py3
sudo make clean #在一个备份的caffe上,你可以随便实验,只要python的环境变量修改一下即可
sudo make all -j16
sudo make test -j16
sudo make runtest -j16
sudo make pycaffe -j16
但是上面都编译通过可能还不够,还要执行pycaffe的测试,执行

sudo make pytest -j16这里就可能报错了...下面说

八、关于pytest报错——No Module Named:scikit-image
首先,要记住这里的错误要看最后一行,一般是No Module Named:XXX

我的是XXX这个模块没有安装,或安装了但不支持python3

解决方法就是安装,缺什么装什么,一般需要安装的模块名字就是XXX,执行sudo pip3 install XXX,再make pytest

sudo pip3 install scikit-image #一定是pip3
sudo make pytest -j16
九、关于pytest报错——No Module Named:pydot
方法同上

sudo pip3 install pydot #一定是pip3
sudo make pytest -j16PS:这两行装完之后,pytest就通过了...

十、修改环境变量

因为我们另搞了一个caffe-py3,所以环境变量要修改一下

vim ~/.bashrc
...
#注释原来的caffe/python路径,添加这个新的路径
#建议使用/home/XXX/caffe-py3/python

source ~/.bashrc #立即使环境变量生效
python
import caffe #在>>>后面打root那边也照顾一下
sudo vim /etc/profile
...
#注释原来的caffe/python路径,添加这个新的路径
#建议使用/home/XXX/caffe-py3/python

sudo su
... #输入密码
source /etc/profile   #立即使环境变量生效
python
import caffe       #在>>>后面打
exit #退出root用户


import caffe的时候还是老样子,什么都不输出就是编译caffe的python接口成功了

愿诸君安好、安好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息