论坛有很多关于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
#include
usingnamespace cv;
int main(int argc,char** argv )
{
if (argc !=2 )
{
printf("usage: DisplayImage.out
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的知识,中间很多步骤我也不知道为什么要那么做,知道的可以告诉我,多谢啦,至于错误的地方希望能不吝指教。