Caffe + ubuntu 15.10 64bit + opencv 3.0.0 + atlas + cuda7.5 + cudnnv4.0+Anaconda2配置过程记录文档

来源:互联网 发布:java运行库32位 编辑:程序博客网 时间:2024/05/16 07:25

论坛有很多关于caffe的教程,但大部分都很省略,而我基础差,智商低,所以遇到了数不清的问题,因此在这里把我遇到的所有问题及收获写成文档,希望能给大家带来帮助,错误的地方希望指正。

 

具体步骤:

Step 1 安装所需的依赖包:

sudo apt-get install build-essential  //安装一些基础的依赖包

sudo apt-get install libprotobuf-devlibleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-devlibgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

 

Step 2: 安装CUDA7.5:

1. 下载CUDA7.5去官网下载或者我网盘(链接:http://pan.baidu.com/s/1pKfzJzP 密码:67hf),虽然cuda的版本是ubuntu15.04的,但ubuntu15.10完全兼容。

2. 进行md5检验下载安装包的完整性:md5sum  <安装包全名> ,然后会出现一串数码,一般只要出现了就ok了。

3. cd到安装包所在目录,输入:

sudo dpkg -i <安装包全称>

sudo apt-get update         

sudo apt-get install cuda

//waiting~~~等安装好

sudo reboot       //重启(不重启貌似也行)

4. 添加路径:

sudo gedit ~/.bashrc

然后在最后面加上下面几行:

exportPATH=/usr/local/cuda-7.5/bin:$PATH

exportLD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

(32位的同学把lib64改成lib就行)

 

保存退出,输入:source ~/.bashrc  //使其生效

bashrc文件的作用网上可查,当前用户登录时运行一次,写在用户路径,这些路径包括了cuda的库函数,最后编译caffe的时候需要用到,因此写在系统路径,caffe才能找到。

注:(这里的方法是将两个路径添加到了用户主目录里,也可以添加全局路径,方法为编辑/etc/profile文件,在最下面添加:

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

export PATH

保存关闭,source/etc/profile  //使生效

接着在/etc/id.so.conf.d/下创建cuda.conf文件,内容为:

/usr/local/cuda/lib64

保存关闭:

sudo idconfig)

5. 到这里cuda基本安装完成,咱们是不是需要检验一下呢?输入nvcc -V //如果没问题应该会出现以下输出:

     

输入nvidia-settings//会弹出显卡配置界面,如果在GPU-0能看到自己的显卡,就算成功了:


5. 安装cudasamples

这一步来自网上大神指导:

cd /usr/local/cuda-7.5/samples  //进入cuda7.5的sanmples目录

sudo make                                  //编译

然后不出意料会出现很多很多的红色的error,大神的解释是:ubuntu15.10自带的gcc是5.2.1,可以通过gcc –version(两个-)查看,但是cuda不支持超过4.9.0的gcc编译器。要么安装一个低版本的编译器,要么把cuda的这个限制给去掉。

大神选的第二个方案:

cd /usr/local/cuda/include/ #进入到头文件目录cuda(而不是cuda-7.5);

sudo cp host_config.h host_config.h.bak #备份原头文件;
sudo gedit host_config.h
#编辑头文件;
ctrl+F查找4.9出现的地方,大约位于115行,在第113行处应该显示if _GNUC_>4 || (_GNUC_ == 4 && _GNUC_MINOR_ > 9),因为我们的是5.2.1,因此,把上面的2个4都改成5就ok了,保存退出。

于是重新编译就ok了,时间较长,可以先干下面的事。

6. 编译成功后进入/usr/local/cuda-7.5/samples/bin/x86_64/linux/release下,输入./deviceQuery,如果出现以下信息,最后写的PASS,则安装成功:




Step 3 安装cuDNN:

1.  在https://developer.nvidia.com/deep-learning-software网址注册个帐号,然后就能直接下载cuDNN-7.0-linux-x64…,当然你也能直接从我网盘(链接:http://pan.baidu.com/s/1skjz00d 密码:tb36)

2.  进入cuDNN的目录,然后输入:

tar -zxvf cudnn-7.0-linux-x64-v4.0-rc.tgz

cd ./cuda/lib64/                      

sudo cp lib* /usr/local/cuda/lib64/

cd ../include/

sudo cp cudnn.h /usr/local/cuda/include/

更新软链接

cd /usr/local/cuda-7.5/lib64/

sudo rm -rf libcudnn.so libcudnn.so.4

sudo ln -s libcudnn.so.4.0.4libcudnn.so.4

sudo ln -s libcudnn.so.4 libcudnn.so

原因自行百度,我反正看不懂


Step 4 安装Atlas

输入:sudo apt-get install libatlas-base-dev

到这一步应该都没什么问题,因为cuda和cudnn并不需要引用太多的库。接下来才是麻烦的地方。

 

Step 5 安装opencv3.0

1.  安装opencv所需的库(编译库,必须库,可选库)

       [compiler]sudoapt-getinstall build-essential

       [required]sudo apt-getinstallcmake git libgtk2.0-devpkg-configlibavcodec-dev libavformat-dev libswscale-dev

       [optional]sudo apt-getinstallpython-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-devlibjasper-dev libdc1394-22-dev

       都要安装,第一次没装optional,

2.  下载opencv3.0源码

       http://sourceforge.net/projects/opencvlibrary/?source=typ_redirect

       或者我网盘(链接:http://pan.baidu.com/s/1nu1l5lJ密码:7jk2)

3. 编译opencv

       解压缩opencv-3.0.0

       cd到opencv-3.0.0的目录里面

       mkdir release

       cd release

       cmake -D CMAKE_BUILD_TYPE=RELEASE –D CMAKE_INSTALL_PREFIX=/usr/local-D BUILD_TIFF=ON ..

(如果没有-DBUILD_TIFF=ON则编译caffe会出现错误opencv_imgcodecs对乱七八糟的@IFF*未定义)

       make

(这里又出现了各种问题,给个诚恳的意见:把opencv解压在主目录里或者所有文件夹的名字不要有空格!血泪史- -!)

       sudo make install

4. 测试Opencv

       1). 创建工作目录:

           mkdir~/opencv-lena

           cd ~/opencv-lena

           gedit DisplayImage.cpp

       2). 编辑代码如下:

           #include<stdio.h>

           #include <opencv2/opencv.hpp>

           usingnamespace cv;

           int main(int argc,char** argv )

           {

             if (argc !=2 )

             {

               printf("usage: DisplayImage.out <Image_Path>\n");

               return -1;

             }

             Mat image;

             image =imread( argv[1],1 );

             if ( !image.data )

             {

               printf("No image data \n");

               return -1;

             }

             namedWindow("Display Image", WINDOW_AUTOSIZE );

             imshow("Display Image", image);

             waitKey(0);

             return0;

           }

       3). 创建cmake编译文件

           gedit CMakeLists.txt

           写入如下内容

           cmake_minimum_required(VERSION2.8)

           project( DisplayImage)

           find_package( OpenCVREQUIRED )

          add_executable( DisplayImage DisplayImage.cpp )

   target_link_libraries( DisplayImage ${OpenCV_LIBS} )

       4). 编译     

           cd ~/opencv-lena

           cmake .

           make

       5). 执行

           ./DisplayImage<图像名字>.jpg

           能出现图像就代表ok了

 

Step 6 安装caffe所需要的python环境

1. 按caffe官网的推荐安装Anaconda(链接:http://pan.baidu.com/s/1dEuGiRJ 密码:848d)

2. 切换到文件所在目录,执行:

       bash <文件全称>

        按要求安装文件即可:



注意其中一步可以选择安装路径,这个路径后面还会用到,如果嫌麻烦,可以装在主目录里。其他都默认就好

4. 在bashrc(sudo gedit~/.bashrc)最后加入以下路径

    exportLD_LIBRARY_PATH="/home/$username/anaconda/lib:$LD_LIBRARY_PATH"

    同理是编译caffe要用到anaconda提供的很多python库,我的路径:



    然后执行source~/.bashrc使生效

 

Step 7 安装python依赖库

1. 下载caffe源码(链接:http://pan.baidu.com/s/1bsKxFS 密码:jm5a)

2.  进入caffe-master的python目录,执行:

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


       注:我这里没装python-pip,听它话装一个就ok了

    结束的时候最好再执行一遍该命令,确保所有的环境都满足后再下一步,如果哪个环境反复装不上就用sudopip install手动安装

3.   cd ..

sudocp Makefile.config.example Makefile.config

sudo gedit Makefile.config

Makefile.config是编译caffe的参数设置,里面要改以下几个地方:

a) 开启GPU加速,USE_CUDNN := 1;# CPU_ONLY := 1

      

b)  设置caffe,opencv的版本是3.0  

 

原因是opencv3.0.0把imread相关函数放到imgcodecs.lib中了,而非原来版本的imgproc.lib

否则会出现:

CXX/LD -o.build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference tocv::imread(cv::Stringconst&, int)'.build_release/lib/libcaffe.so: undefinedreferencetocv::imencode(cv::Stringconst&, cv::_InputArray const&, std::vector>&, std::vector > const&)'

如果您的Makefile.config文件中没有这一选项,原因是caffe版本低,opencv3.0没出来,解决方法:sudo gedit Makefile

在位置 LIBRARIES += gloggflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m  \

opencv_core opencv_highguiopencv_imgproc处添加opencv_imgcodecs

改为:opencv_coreopencv_highgui opencv_imgproc \

          opencv_imgcodecs

 c)  将有PYTHON_INCLUDE路径改成以下样子:

注意ANACONDA_HOME:= 后面要跟自己anaconda所在的路径

否则编译caffe的时候会出现找不到hdf5.so文件。


4.  makeall -j4

a)  这里如果出现找不到hdf5.so文件,要不是bashrc里面anaconda2路径,就是Makefile.config里路径不对

b)  如果出现*/x86_64-linux-gnu/lib*对乱七八糟的变量未定义,在bashrc最后加入:

exportLD_LIBRARY_PATH="/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"

然后source ~/.bashrc

c)  如果出现opencv_imgcodecs对乱七八糟的@IFF*未定义,解决方案在前面。

5.make test

6. make runtest

 

Step 8: 测试caffe (Le-Net 5)

红色警报:以下命令都不要用sudo,因为前面的路径都添加在bashrc里面,如果用sudo,则换成了root用户,那前面添加的路径都无效,就会出现各种问题,除非你的路径添加在/etc/ld_conf.so里面,这一点折磨死我了,事实上前面的编译也不要用sudo

%获取数据

sh .data/mnist/get_mnist.sh %下载mnist的数据

sh./examples/mnist/creat_mnist.sh %重建数据文件,将mnist重建为能被caffe使用的数据格式

%训练Le-net 5

%注意如果是使用CPU模式的话,需要修改目录下的lenet_solver.prototxt文件,将

%solver_mode:GPU改为solver_mode:CPU

%另外可以把迭代次数改小一点,比如5000

sudosh ./examples/mnist/train_lenet.sh

最终训练完的模型会存储为一个lenet_iter_10000的文件,同时在训练时会显示训练的过程,每1000次训练会测试一次模型,accuracy为此时模型的准确率,loss为测试的代价函数。

另外每100次会显示一次loss和lr(learningrate 学习率)

 

如果运行到这里都成功了,就恭喜你了~,by the way,关于matlab,python的接口配置,网上有很多教程,问题不大。配置caffe浪费了不少时间,但也学了很多关于linux的知识,中间很多步骤我也不知道为什么要那么做,知道的可以告诉我,多谢啦,至于错误的地方希望能不吝指教。

    

0 0