Ubuntu 16.04 在cuda9.0 cudNN7.5 opencv3.4.0下安装 caffe(详细)

说明:本文安装caffe前,已经安装好了python的各种常用包,CUDA9.0,cudNN7.5,opencv3.4.0

安装过程:

1、首先是安装caffe的所有依赖包以及更新包

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install -y build-essential cmake git pkg-config

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install -y libatlas-base-dev

sudo apt-get install -y --no-install-recommends libboost-all-dev

sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install -y python-pip

sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

sudo apt-get install -y libopencv-dev

2、下载caffe并开始安装 

git clone https://github.com/BVLC/caffe.git    //从github上下载 caffe
cd caffe
cp Makefile.config.example Makefile.config //将Makefile.config.example的内容复制到Makefile.config
//因为make指令只能make   Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子
gedit Makefile.config      //打开Makefile.config文件

3、更改Makefile.config相关参数

//如果你不使用GPU的话,就将
# CPU_ONLY := 1
修改成:
CPU_ONLY := 1 显然我这里是要使用GPU的,所以这里不用修改
//使用cudnn加速,需要将
# USE_CUDNN := 1
修改成:
USE_CUDNN := 1

//若使用的opencv版本是3的,则将
# OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
//这里我刚开始就没有修改,导致最后编译出错

# USE_LEVELDB := 0
# USE_LMDB := 0
//修改成:
USE_LEVELDB :=1
USE_LMDB :=1

//若要使用python来编写layer,则需要将
# WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1

将# Whatever else you find you need goes here.下面的
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
//这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径

4、修改makefile文件

//打开makefile文件,按ctrl+F,搜索并替换

//将下面该语句
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
//替换为
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
//保存并退出

 

5、执行python文件夹下的指令

//在caffe目录下cd到caffe下的python目录
cd python

for req in $(cat requirements.txt); do pip install $req; done

\\如果发现执行上述代码后,终端中有很多红字,一堆的错误之类的,那不管是什么错误都执行下面一句话:
for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done
\\执行完上面这句话后应该就不会有很多红字错误了

6、make编译这种文件

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 distribute

到这里,安装caffe基本上就差不多完成了。如下图所示:

但是笔者在安装过程中,遇到了各种各样的问题,百度google了很多,也参见了网上很多博客大牛的博文,后面将罗列出一些安装caffe所遇到的坑。

caffe安装错误集锦

1.make all -j12 出现错误:.build_release/tools/caffe: error while loading shared libraries: libcudart.libcudart.so.9.0 cannot open shared objuect filee : No such file or directory

主要是我这里的CUDA安装的是9.0版本,所以会出现这种错误,那么此时可以执行一下代码:

sudo cp /usr/local/cuda-9.0/lib64/libcudart.so.9.0 /usr/local/lib/libcudart.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/local/lib/libcublas.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcurand.so.9.0 /usr/local/lib/libcurand.so.9.0 && sudo ldconfig

 

2、类似以下情况的错误:

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'

这种问题很有可能是你的系统中使用的是opencv3,但是你的Makefile.config中没有将OPENCV_VERSION := 3这一句取消注释。

3、编译caffe出现以下错误:

nvcc fatal : Unsupported gpu architecture 'compute_20'

解决办法:

在Makefile.config文件中

CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \ 
#-gencode arch=compute_20,code=sm_21 \ 
-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

因为我装的是CUDA9.0所以把下面这两行删除就可以了

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

然后重新make clean,再make all -j12

4、make all -j12出现如下错误:m//home/njust/anaconda3/lib/libpng16.so.16:对‘inflateValidate@ZLIB_1.2.9’未定义的引用

解决办法:在Makefile.config中,加入下面一句:

  • LINKFLAGS := -Wl,-rpath,$(HOME)/anaconda3/lib

7、mnist测试,终端输入

1.下载mnist数据集,终端输入
cd /home/yourname/caffe/data/mnist/
./get_mnist.sh 获取mnist数据集
之后在/home/yourname/caffe/data/mnist/目录下会多出训练集图片、训练集标签、测试集图片和测试集标签等4个文件

 

2.mnist数据格式转换,终端输入

cd /home/yourname/caffe/ 
./examples/mnist/create_mnist.sh
//这里必须在第一行后运行第二行(针对我的指令),即必须在根目录下运行create_mnist.sh,
此时在/caffe/example/mnist/目录下会生成mnist_test_lmdb和mnist_train_lmdb的lmdb格式的训练集和测试集
//我在运行时,报了如下错误,如图所示:

经过Google,在github有人给出了自己的解决方法,

(caffe_root)
cd build
cmake ..
make
//编译好后
cd ..

./examples/mnist/create_mnist.sh 

3.然而在make的时候我又遇到了一个问题,一脸懵逼: 

/usr/local/lib/libopencv_imgcodecs.so.3.4.0: undefined reference to TIFFReadDirectory@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFWriteEncodedStrip@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.4.0: undefined reference to TIFFIsTiled@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFOpen@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.4.0: undefined reference to TIFFReadEncodedStrip@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFSetField@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.4.0: undefined reference to TIFFWriteScanline@LIBTIFF_4.0' /usr/local/lib/libopencv_imgcodecs.so.3.1.0: undefined reference toTIFFGetField@LIBTIFF_4.0'

此时这里就要回到以前安装opencv3.4.0时落下的一个坑,上面提示TIFF未引用,这里要重新回到编译opencv3.4.0那里去,

cd opencv3.4.0
cd 到build文件夹,在里面可以看到CMakeCache.txt,里面发现WITH_TIFF=ON,BUILD_TIFF=OFF
//所以你得重新cmake你的opencv3.4.0,在cmake时加入-D BUILD_TIFF=ON,原cmake语句:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
加入后的语句为:
cmake -D BUILD_TIFF=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
//注意:这里一定不要在末尾加入,笔者之前就是在末尾加的,一直报错,弄了好久才发现不可以在末尾添加

cmake后,就要开始进行编译了,这里也有一个比较坑的地方,还是在build文件夹下

//终端输入
sudo make -j12
//如果你会发现程序一直卡在一个点上,此时你得终止编译
ctrl + Z,
然后转而使用
sudo make //进行编译

上面结束之后,你再尝试如下代码,就可以编译通过了,可以产生两个lmdb文件夹了,如果发现不行,建议你从开始安装caffe,走一遍流程就行了

(caffe_root)
cd build
cmake ..
make
//编译好后
cd ..

./examples/mnist/create_mnist.sh 

 成功的图如下所示:

 

4.这里我们采用LeNet-5模型来训练手写数字体, 

LeNet-5模型描述在/caffe/examples/mnist/lenet_train_test.prototxt

Solver配置文件在/caffe/examples/mnist/lenet_solver.prototxt

5.训练mnist,执行文件在/caffe/examples/mnist/train_lenet.sh

终端输入

cd /home/yourname/caffe/ 
./examples/mnist/train_lenet.sh 

这里呢,可能又有一个坑:

这个错误和前面的一个错误很像,只要在运行程序前加一个 sudo就行了

sudo ./examples/mnist/train_lenet.sh

 最后,测试结果如下:我的GTX1080ti迭代10000次,总共花费了12秒就训练好了,测试结果accuracy=0.9906 

参考博文:

https://blog.csdn.net/wopawn/article/details/52302164

https://blog.csdn.net/autocyz/article/details/51783857

https://blog.csdn.net/ruotianxia/article/details/78437464

https://blog.csdn.net/gpwner/article/details/79179259 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值