ubuntu16.04下安装opencv3.1+anaconda2+caffe

准备步骤:安装ssh远程登录,以方便两台电脑通过FileZilla传输文件。我的所有资料都存在windows的电脑上(不是双系统),没有该需要的可忽略此步骤。
ubuntu系统中默认没有安装ssh程序,可通过以下命令安装:

sudo apt-get install openssh-client
sudo apt-get install openssh-server

ssh的端口号一般为22.在windows上开启FileZilla,设置如图:
这里写图片描述
连接成功,即可直接传输文件。
一、安装caffe配置依赖项

sudo apt-get install libprotobuf-dev protobuf-compiler libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev  
    sudo apt-get install --no-install-recommends libboost-all-dev
    sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

配置一些基本的环境变量

vim ~/.bashrc   在最后加入:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

二. 安装NVIDIA驱动
可直接按照NVIDIA官网上的安装方法安装,由于我安装的时候,总是失败,本文记录的方法是唯一成功的方法。
搜索计算机->附件驱动
这里写图片描述
更改后重启后即可验证:nvidia-smi,出现下图信息即为成功
这里写图片描述
如果出现了你的GPU列表,则说明驱动安装成功了。另外也可以通过

nvidia-settings

查看自己机器上详细的GPU信息,本人机器的信息如下:
这里写图片描述
三. 安装CUDA
CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。
(1)下载CUDA
首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA:
(2)安装CUDA
下载完成后执行以下命令:

sudo sh cuda_8.0.27_linux.run

注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia361驱动时,一定要选择否,因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可(选择是会出错)
这里写图片描述
(3)环境变量配置
打开~/.bashrc文件:

sudo vim ~/.bashrc

将以下内容写入到~/.bashrc尾部:

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

这一步可使环境变量生效,也可在下一步配置玩cudnn之后再生效
(生效方法:切换到root用户下,source ~/.bashrc,ctrl+D退出root用户,输入sudo updatedb)
四、 配置cudnn
cuDNN是GPU加速计算深层神经网络的库。
首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,可能需要注册一个账号才能下载。我选择的下载版本号如下图:
这里写图片描述
下载cuDNN5.1之后进行解压,cd进入cuDNN5.1解压之后的include目录,在命令行进行如下操作:

sudo cp cudnn.h /usr/local/cuda/include/    #复制头文件

再将cd进入lib64目录下的动态文件进行复制和链接:

sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5    #删除原有动态文件
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5  #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so      #生成软链接

上一步配置之后,可不用再重新配置,也可两部分都配置
然后设置环境变量和动态链接库,在命令行输入:

sudo gedit /etc/profile

在打开的文件末尾加入:

export PATH = /usr/local/cuda/bin:$PATH

保存之后,创建链接文件:

sudo vim /etc/ld.so.conf.d/cuda.conf

按下键盘i进行编辑,输入链接库位置:

/usr/local/cuda/lib64

然后按esc,输入:wq保存退出。并在终端输入:

sudo ldconfig

使链接立即生效

测试cuda的samples

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

如果看到一些GPU的信息说明安装成功,如下图:
这里写图片描述

五、 编译opencv3.1
A.首先安装opencv依赖项

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libtbb-dev

B.编译opencv

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D INSTALL_PYTHON_EXAMPLES=ON -D WITH_TIFF=ON -D BUILD_TIFF=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/july/software/opencv_contrib-3.2.0/modules ..

C. 安装

sudo make install –j4

编译安装完成后,将编译好的python里的库cv2.so copy至anaconda2/lib/python2.7/site-packages内即可在python中使用,如下图:
这里写图片描述
此步出现的问题:
1./home/july/software/opencv-3.2.0/build/opencv_lapack.h:2:45:fatalerror:LAPACKE_H_PATH-NOTFOUND/lapacke.h: 没有那个文件或目录
**解决方法:**sudo apt-get install liblapacke-dev checkinstall

六、安装Anaconda2
从官网下载所需的linux版本的可执行文件,执行如下命令:

bash Anaconda2-4.2.0-Linux-x86_64.sh

后面就根据提示执行就可以了,最后一步添加环境变量的部分选择是,它会自动添加到用户环境变量文件~/.bashrc文件中,不要手动添加到/etc/profile这个系统环境变量中,因为anaconda有几个链接库和系统链接库文件类似,如果添加到/etc/profile文件中,有可能会造成冲突,导致意外错误。安装完成后,为了防止编译caffe时文件冲突造成的一些错误,需替换掉anaconda包内的ibstdc++,libgomp这几个4.x版本的gcc编译动态库软连接:

rm -rf /home/your_path/anaconda2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/lib/libstdc++.so.6
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/your_path/anaconda2/lib/libstdc++.so.6
ln -s /home/your_path/anaconda2/lib/libstdc++.so.6 /home/your_path/anaconda2/lib/libstdc++.so
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
ln -s /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/lib/libgomp.so
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so
rm -rf /home/your_path/anaconda2/lib/libgomp.so.1
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
ln -s /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/your_path/anaconda2/lib/libgomp.so.1
ln -s /home/your_path/anaconda2/lib/libgomp.so.1 /home/your_path/anaconda2/lib/libgomp.so
ln -s /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
ln -s /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so

注意:在第一步时安装了libprotobuf-dev protobuf-compiler,到此步骤为止,conda list列表内不能有任何关于protobuf的文件,不然编译caffe时会因文件冲突而报错(一次性的解决方法在最后会给出)。

七:安装编译caffe
(1)从github上获取caffe:

git clone https://github.com/BVLC/caffe.git

(2)进入caffe目录,并复制出所需的Makefile.config文件

sudo cp Makefile.config.example Makefile.config

(3)修改Makefile.config文件

vim Makefile.config

需要修改的地方

#USE_CUDNN := 1 修改成: USE_CUDNN := 1
#OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3

注释掉原来的PYTHON_INCLUDE,使用ANACONDA的配置

    ANACONDA_HOME := $(HOME)/anaconda
    修改为:
    ANACONDA_HOME := $(HOME)/anaconda2

# PYTHON_INCLUDE := /usr/include/python2.7 \
# /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
#PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

#WITH_PYTHON_LAYER := 1 
修改为 
WITH_PYTHON_LAYER := 1

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改为: 
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_64-linux-gnu/hdf5/serial

(4)然后修改makefile文件
415行

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) 
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

然后再大概181行的地方做修改

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 
替换为
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui

(5)编辑/usr/local/cuda/include/host_config.h (119行)

#error-- unsupported GNU version! gcc versions later than 5 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 5 are not supported!

更改完文件,保存。
(6)编译caffe

mkdir build
cd build
cmake ..
make all –j4

编译过程中会可能会出现的错误:
a、usr/local/lib/libopencv_imgcodecs.so.3.2.0对‘TIFFReadRGBATile@LIBTIFF_4.0’未定义的引用
解决方法:编译opencv的时候,需要加上-D WITH_TIFF=ON -D BUILD_TIFF=OFF 参考链接:http://www.cnblogs.com/taopanpan/p/4263951.html 还需要删除anaconda/lib/下面的libtiff*
b、/usr/lib/x86_64-linux-gnu/libx264.so.142:对‘__exp_finite@GLIBC_2.15’未定义的引用
解决方法:如果你装了anaconda包的话,删除anaconda/lib/下面的 libm* 命令:sudo rm -rf libm*
(7)编译caffe的python接口

sudo make pycaffe

编译完成后,添加路径到环境变量

sudo gedit ~/.bashrc

添加上caffe的路径:

export PYTHONPATH=/home/july/software/caffe/python:$ PYTHONPATH

保存后在root用户下执行source ~/.bashrc,按ctrl+D切换出root用户,执行sudo updated 使更改的环境变量生效
(8)测试能否正常使用
这里写图片描述
根据本文安装方式,一定会出现此种错误,因为anaconda环境里没有任何关于protobuf的内容,解决方法:
这里写图片描述
再次进行测试:
这里写图片描述
到此为止,caffe安装成功,可在anaconda的python包中正常使用。

八、测试mnist数据集
在终端上执行:

cd  ~/caffe/
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh

可以查看下载的数据:
这里写图片描述
继续执行:

./examples/mnist/train_lenet.sh

这里写图片描述

关于protobuf的问题:
如果在编译caffe之前,安装了libprotobuf-dev protobuf-compiler,在anaconda中也安装了protobuf,会因冲突出现错误:

../lib/libcaffe.so: undefined reference to ‘google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*)

可用本文中规避的方法安装,但测试后anaconda中安装了protobuf,如果再因需要编译caffe的话,可能会因为忽略这个问题而在此踩坑。嫌麻烦的可采用一次性解决方法,安装anaconda2后,将之前安装的libprotobuf-dev protobuf-compiler卸载,直接下载protobuf包,自己重新编译(方法百度可得),排除冲突即可。

关于import cv2报错的问题
装了anaconda和OpenCV,但import cv2报错:no module named cv2
要把opencv编译出来的cv2.so拷贝到anaconda的lib目录下 ,然后就好了
但这时在其他路径运行时还是报错 no module cv2 :需要在bashrc里面添加anaconda的路径

写在最后的话:本文的步骤是一步一步经过操作实现过的,需要参考的童鞋,要根据自己的实际情况进行配置,切勿完全照搬,可留言或加群交流:521370281

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值