Ubuntu16.04+opencv+caffe+pytorch(anaconda下的python3.5)

  1. 前期准备说明:
    由于caffe需要使用opencv库,所以需要先安装opencv,再安装caffe。
    为方便各版本的深度学习框架切换,本次教程将基于anaconda下的虚拟环境进行安装。
  2. anconda 虚拟环境安装
    假设已安装好anaconda,本文使用的python版本为3.5。
    首先创建虚拟环境conda create -n your_env_name python=X.X,比如conda create -n pytorch1 python=3.5
    其他重要命令:
#激活虚拟环境
source activate your_env_name(修改为你的虚拟环境名称)
#退出虚拟环境
source deactivate 
#删除虚拟环境
conda remove -n your_env_name(修改为你的虚拟环境名称) --all
  1. opencv安装(源码编译)
    难点有2个,找到适合自己电脑和需求的opencv版本,设置源码编译的路径。
    参考教程:ubuntu16.04安装opencv完整教程

    注意将教程中的虚拟环境改为自己的conda建立的虚拟环境即可。

  2. caffe安装(源码编译)
    参考教程:手把手教你在Ubuntu 16.04下配置GPU版Caffe
    从step3开始参考。
    除教程中出现的错误及修改方法外,我安装中遇到的报错和坑记录如下(如不特别指明,修改内容均为makefile.config):
    (1)fatal error: pyconfig.h: No such file or directory #include “pyconfig.h”
    参考:caffe编译:fatal error: pyconfig.h: No such file or directory #include “pyconfig.h”
    解决方法:将caffe/makefile.config文件的python include 修改为如下:

PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.5 \
$(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include \
/usr/include/python3.5 

(2)nvcc fatal : Unsupported gpu architecture ‘compute_20’
参考:nvcc fatal : Unsupported gpu architecture ‘compute_20’
因为我装的是CUDA9.0,所以将caffe/makefile.config文件中下面两行删除就可以了

-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \

(3)Caffe .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
参考:Caffe .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
因为你用了opencv 3.x的缘故,只需在caffe/Makefile的最后一行加上:

 LIBRARIES += glog gflags protobuf leveldb snappy \
 lmdb boost_system boost_filesystem hdf5_hl hdf5 m \
 opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio

(4)ubunut14.04配置caffe时出现 error while loading shared libraries: libopencv_core.so.3.2: cannot open share
参考:error while loading shared libraries: libopencv_core.so.3.2: cannot open share

从这个提示可以知道系统找不到libopencv_core.so.3.2在哪儿,而系统是通过/etc/ld.so.conf中的路径找.so这个文件的。将libopencv_core.so.3.2的路径加入到.conf文件中就可以了。.so文件一般存放在/usr/local/lib目录下,博主进入这个文件目录下果然发现了这个文件。

对ld.so.conf这个文件进行编辑是需要获取超级权限的

cd ~                             # 先返回到根目录
sudo vim /etc/ld.so.conf        #获取超级权限,并用vim编辑器打开该文件
#在末尾加入/usr/local/lib即可
sudo ldconfig

ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.
(5)Ubuntu 16.04下安装Caffe解决 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
参考:Ubuntu 16.04下安装Caffe解决 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
原因是boost_python的版本不匹配,默认python版本为3.5,而boost_python为2.7。
解决方法:
先在系统的/usr/lib/x86_64-linux-gnu/路径下查找boost_python文件的版本是否与python版本匹配,我的电脑中文件名为:
libboost_python-py35.so.1.58.0
说明版本为python3.5,匹配。若不匹配则安装对应的boost_python版本。
接下来打开caffe/Makefile文件,将第208行的

PYTHON_LIBRARIES := boost_python python2.7
#改为
PYTHON_LIBRARIES := boost_python-py35  #py35需要改为你自己的python版本,如py34,py33

如果仍旧不对,使用PYTHON_LIBRARIES ?= boost_python-py35 python3.5m
https://stackoverflow.com/questions/42175360/how-to-install-caffe-for-python3-in-ubuntu
(6)caffe 在一个电脑上安装第二次,出现版本兼容问题
参考:cudnn版本问题(注意:同一个电脑可能会配置多个caffe版本,要以一个版本为准)
报错信息:
/usr/local/cuda/include/cudnn.h:500:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
^
Makefile:575: recipe for target ‘.build_release/src/caffe/parallel.o’ failed
make: *** [.build_release/src/caffe/parallel.o] Error 1

解决方法:把caffe里面的所有与cudnn相关的.h 和.cpp 替换成第一次配置caffe时候 所用的cudnn的版本

具体操作:
用caffe-master/include/caffe/util (第一次配置caffe目录)下面的cudnn.hpp替换对应的旧版本cudnn.hpp

对应的cpp 文件为:用 caffe-master/src/caffe/util (第一次配置caffe目录)下面的cudnn.cpp替换对应的旧版本cudnn.cpp

caffe-master/include/caffe/layers(第一次配置caffe目录)下面 文件名含有cudnn的所有文件 替换所有对应的旧版本*.cpp和*.cu文件

然后重新编译应该就没有错误了。

A 开始编译
cd caffe/ 进入caffe 目录下,依次执行一下命令:

make all -j32
make test -j32
make runtest -j32
make pycaffe   # 编译Caffe的python接口
make distribute

如果出错,自己分析或者去网络搜索相应解决办法。修改后,必须重新make clean,再次make all -j32
注意:32是根据自己电脑cpu的核数确定的,一般为2,4,8,16,32等2的幂次,可以加快编译速度。
(7)make test过程的报错
src/caffe/test/test_neuron_layer.cpp:17:38: fatal error: caffe/layers/log_layer.hpp: 没有那个文件或目录/
src/caffe/test/test_neuron_layer.cpp:17:38: fatal error: caffe/layers/log_layer.hpp: No such file or directory
compilation terminated.
Makefile:581: recipe for target ‘.build_release/src/caffe/test/test_neuron_layer.o’ failed
解决办法:
主要是缺少log_layer相应的源文件。
在github上找一份caffe源码,在src和include里面的layer找到log_layer.cpp、log_layer.cu、log_layer.hpp并添加到caffe-sphereface代码相应的文件下面。
(8)make runtest 或者import时报错
参考:
ubuntu 给caffe配置python3.5,报错dateutil/rrule.py raise ValueError, “Can’t create weekday with n == 0”
Invalid syntax error in rrule.py when importing caffe in python3.6
File “/home/bamboo/anaconda3/envs/pt04/lib/python3.5/site-packages/dateutil/rrule.py”, line 55
raise ValueError, “Can’t create weekday with n == 0”
^
SyntaxError: invalid syntax

pip install python-dateutil --upgrade #正确
pip install --upgrade python-util # 错误

千万注意:不可以在pip前面添加sudo。因为需要将库安装到普通用户可以访问,而非仅管理员访问。

(B)添加路径
打开终端,
然后将caffe源码目录中的python文件夹配置到PYTHONPATH这个环境变量里面去←注意别漏了这一步

sudo gedit ~/.bashrc #打开
 export PYTHONPATH=/home/bamboo/anzhaungbao/caffe35(caffe编译路径)/caffe/python:$PYTHONPATH
 #修改完成后保存,退出。
 source ~/.bashrc #是更改生效

如果出现python2变为python3的情况,则需要注销或者重启即可。

make方式编译的caffe不需要install,直接使用解压的这个文件夹里的东西

(C)测试
1)使用 python -c "import caffe;print(caffe.__version__)或者打开python,import caffe 测试。
2)MNIST数据集测试
配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
mnist数据集测试:
1.将终端定位到Caffe根目录
cd ~/caffe

2.下载MNIST数据库并解压缩
bash ./data/mnist/get_mnist.sh

3.将其转换成Lmdb数据库格式
bash ./examples/mnist/create_mnist.sh

4.训练网络
bash ./examples/mnist/train_lenet.sh
训练的时候可以看到损失与精度数值,如下图:
Ubuntu16.04+opencv+caffe+pytorch(anaconda下的python3.5)_第1张图片
可以看到最终训练精度是0.9914。

参考:
1.ubuntu14.04 编译安装CPU版caffe (https://www.cnblogs.com/zealousness/p/8757678.html)
2.Ubuntu】Ubuntu设置和查看环境变量 (https://blog.csdn.net/White_Idiot/article/details/78253004)
3.Ubuntu16.04 Caffe 安装步骤记录(超详尽) (https://blog.csdn.net/yhaolpz/article/details/71375762)

你可能感兴趣的:(搭建环境)