Ubuntu 15.04配置Caffe(cpu)_我遇到的坑
2016-06-02 18:50
393 查看
作为一个不怎么用ubuntu的人,为了跑机器学习实验,还是尝试配置下caffe环境。
本来觉得按着不同博客的教程,总能一步一步配好,结果遇到一步一步的难题,总共用了两天才编译通过,所以借此把流程跟坑都记录下来,以便后面慢慢熟练!!!
在终端上打开你下的文件夹caffe-master。然后在目录下将创建一个Makefile.config的副本(原本文件夹只有Makefile.config.example)
接下来就是修改makefile.config,在这个文件里面对应的注释讲的很清楚,需要哪一项,吧对应那一项前面“#”去掉就好了。所以我改了这两项:
BLAS(Basic Linear Algebra Subprograms,基础线性代数程序集)是一个应用程序接口(API)标准。他的实现有很多,caffe用的是其中的三种实现ATLAS, MKL, or OpenBLAS。这里我准备使用atlas,因为很方便,所以把上面的config的BLAS改成了atals。(安装atals后面会讲)
这类的错误。所以,还是用源码包来编译安装才能把这个问题解决掉,因为只要在编译的时候出现这个问题,只要重新编译一次protobuf就ok了。
在安装之前需要先把工具automake给装了:
那接下来就下载protobuf吧,在github下载,解压https://github.com/google/protobuf
解压后,进入目录protobuf-master, 运行:
这是会提醒你的curl没有安装的错误。所以安装curl吧,不过没安装也ok,因为curl起到的作用就是下载文件,但https://googlemock.googlecode.com/files/gmock-1.7.0.zip这个东西还是要下,那就直接下载吧(翻墙下载)。下完后不用解压,直接把gtest-1.7.0.zip放到protobuf-master的目录下就ok了。vim打开autogen.sh 把有用到curl的地方注释掉就ok了。然后再次运行
运行成功后,依次输入命令(还是在protobuf-master的目录下):
就可以开始
成功之后就继续装一些依赖库了。
第一步说到的altas,这里也可以一口气用apt安装。有些教程是编译atlas来安装,其实挺费波折的,因为编译atlas源码过程中还需要给CPU调频…这个过程还需要装个工具包,这条路我绕过我就不叙述了,太麻烦。直接apt,也不碍事:
首先是一些工具包和依赖:
从官网下载最新opencv源码(2.4以上)
http://sourceforge.net/projects/opencvlibrary/ 这里我下的是opencv3.0
编译opencv
先把下载的opencv源码包解压,然后在opencv源码目录下:
编译完,环境也自动加上了。
按理说,这就编译成功哦。。
但假如编译不成功,会遇到什么问题捏?
这是,因为hdf5包的头文件没有include到编译环境里。
这个时候,我找到H5public.h以及一大堆hdf5头文件都在
你可以直接在终端加,也可以加到
问题二
这是没有把hdf5的动态链接库加到路径里。首先,你要定位对应lib的so在哪里:
然后发现它们都在
很多人教我几个方法:
我试了没用(不过你可以试试);或者想前面加环境路径一样,把它加到
还有人教我的是ldconfig,就是先
保存并退出后,运行
但我试了还是没用。所以我干脆把两个so文件直接复制到/usr/lib底下。虽然暴力,但是成功了,没有其他副作用:
问题三
就是刚刚说的问题,可能会随时遇到
这个时候,只要把步骤二过一遍就ok了(当然记得要在make之前make clean一下)、
问题四
这个问题,是因为我装的是opencv3.0,opencv3.0把imread相关函数放到imgcodecs.lib中了,而非原来的imgproc.lib。
所以我要vi打开caffe-master目录下的
在位置
然后再重新编译,就ok了
这几个是比较难发现的问题..中间还有无数个坑,只要你发现报错是那个依赖包的问题,就针对哪个依赖包重装或配环境就ok了。
done!
本来觉得按着不同博客的教程,总能一步一步配好,结果遇到一步一步的难题,总共用了两天才编译通过,所以借此把流程跟坑都记录下来,以便后面慢慢熟练!!!
第一步 下载caffe
首先从github上下载好caffe库:https://github.com/BVLC/caffe,解压,得到这些东西在终端上打开你下的文件夹caffe-master。然后在目录下将创建一个Makefile.config的副本(原本文件夹只有Makefile.config.example)
cp Makefile.config.example Makefile.config
接下来就是修改makefile.config,在这个文件里面对应的注释讲的很清楚,需要哪一项,吧对应那一项前面“#”去掉就好了。所以我改了这两项:
CPU_ONLY:=1 //把前面注释#去掉就好了 BLAS:=atlas //这个很重要
BLAS(Basic Linear Algebra Subprograms,基础线性代数程序集)是一个应用程序接口(API)标准。他的实现有很多,caffe用的是其中的三种实现ATLAS, MKL, or OpenBLAS。这里我准备使用atlas,因为很方便,所以把上面的config的BLAS改成了atals。(安装atals后面会讲)
第二步 编译以及安装protoc
实际上,有些教程是让人用apt安装sudo apt-get install libprotobuf-dev。我开始以为很方便,但实际上到最后回遇到一个问题,就是当你所有依赖库还有环境配好后,总是会遇到
.build_release/lib/libcaffe.so: undefined reference to google ::protobuf...
这类的错误。所以,还是用源码包来编译安装才能把这个问题解决掉,因为只要在编译的时候出现这个问题,只要重新编译一次protobuf就ok了。
在安装之前需要先把工具automake给装了:
sudo apt-get install autoconf automake libtool
那接下来就下载protobuf吧,在github下载,解压https://github.com/google/protobuf
解压后,进入目录protobuf-master, 运行:
./autogen.sh
这是会提醒你的curl没有安装的错误。所以安装curl吧,不过没安装也ok,因为curl起到的作用就是下载文件,但https://googlemock.googlecode.com/files/gmock-1.7.0.zip这个东西还是要下,那就直接下载吧(翻墙下载)。下完后不用解压,直接把gtest-1.7.0.zip放到protobuf-master的目录下就ok了。vim打开autogen.sh 把有用到curl的地方注释掉就ok了。然后再次运行
./autogen.sh。
运行成功后,依次输入命令(还是在protobuf-master的目录下):
./configure make make check
make跟
make check都会费一点时间(如果你遇到很多次坑,每次都想重新编译protobuf的话记得make之前要make clean一下)。如果
make check之后出现类似:
就可以开始
sudo make install
成功之后就继续装一些依赖库了。
第三步 一些依赖库
一口气可以用apt安装的依赖库:sudo apt-get install libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
第一步说到的altas,这里也可以一口气用apt安装。有些教程是编译atlas来安装,其实挺费波折的,因为编译atlas源码过程中还需要给CPU调频…这个过程还需要装个工具包,这条路我绕过我就不叙述了,太麻烦。直接apt,也不碍事:
apt-get install libatlas-dev sudo apt-get install libatlas-base-dev apt-get install liblapack-dev
第四步 配置opencv环境
网上很多caffe教程都是默认你装好opencv的,所以可能会忽略掉这个重要的步骤。这里我就用最简单的opencv教程来叙述。首先是一些工具包和依赖:
sudo apt-get install build-essential //搭建编译环境 sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev //必须 sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev //可选
从官网下载最新opencv源码(2.4以上)
http://sourceforge.net/projects/opencvlibrary/ 这里我下的是opencv3.0
编译opencv
先把下载的opencv源码包解压,然后在opencv源码目录下:
cd ~/opencv-3.0.0-rc1 mkdir release cd release cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. make sudo make install
编译完,环境也自动加上了。
第五步 编译Caffe
前面的步骤完了之后,就可以返回到caffe-master的目录下了。make clean //记得每次编译前都要clean一下咯 make all
按理说,这就编译成功哦。。
但假如编译不成功,会遇到什么问题捏?
可能遇到的问题
问题一/usr/include/hdf5.h:24:22: fatal error: H5public.h: 没有那个文件或目录
这是,因为hdf5包的头文件没有include到编译环境里。
这个时候,我找到H5public.h以及一大堆hdf5头文件都在
/usr/include/hdf5/serial下,所以添加g++个gcc的include目录:
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include/hdf5/serial export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/hdf5/serial
你可以直接在终端加,也可以加到
/etc/bashrc和
/etc/profile里面再source一下,但是关掉终端后还是会失效(我还没查到有什么方法,求指导),所以每次记得手动加咯…
问题二
/usr/bin/ld: cannot find -lhdf5_hl /usr/bin/ld: cannot find -lhdf5
这是没有把hdf5的动态链接库加到路径里。首先,你要定位对应lib的so在哪里:
locate libhdf5_hl.so locate libhdf5.so
然后发现它们都在
/usr/lib/x86_64-linux-gnu/hdf5/serial里。
很多人教我几个方法:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/hdf5/serial
我试了没用(不过你可以试试);或者想前面加环境路径一样,把它加到
/etc/bashrc或者
/etc/profile里面再source一下。我试了没用。
还有人教我的是ldconfig,就是先
cat /etc/ld.so.conf vi /etc/ld.so.conf //然后在文件里加入下面一行: /usr/lib/x86_64-linux-gnu/hdf5/serial
保存并退出后,运行
ldconfig让配置生效。
但我试了还是没用。所以我干脆把两个so文件直接复制到/usr/lib底下。虽然暴力,但是成功了,没有其他副作用:
cp -i /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so /usr/lib/ cp -i /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_hl.so /usr/lib/
问题三
就是刚刚说的问题,可能会随时遇到
.build_release/lib/libcaffe.so: undefined reference to google ::protobuf...
这个时候,只要把步骤二过一遍就ok了(当然记得要在make之前make clean一下)、
问题四
CXX/LD -o .build_release/tools/convert_imageset.bin .build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)'.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)'
这个问题,是因为我装的是opencv3.0,opencv3.0把imread相关函数放到imgcodecs.lib中了,而非原来的imgproc.lib。
所以我要vi打开caffe-master目录下的
Makefile(注意不是Makefile.config)
在位置
LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m opencv_core opencv_imgproc opencv_imgcodecs //在后面加入imgcodecs
然后再重新编译,就ok了
这几个是比较难发现的问题..中间还有无数个坑,只要你发现报错是那个依赖包的问题,就针对哪个依赖包重装或配环境就ok了。
done!
相关文章推荐
- Ubuntu 默认壁纸历代记
- Ubuntu Remix Cinnamon 20.04 评测:Ubuntu 与 Cinnamon 的完美融合
- 关于Ubuntu 11.10启动提示waiting for the network configuration的问题
- 在 Ubuntu 桌面中使用文件和文件夹
- ubuntu下chrome无法同步问题解决
- Ubuntu Linux使用体验
- 使用 GNOME 优化工具自定义 Linux 桌面的 10 种方法
- 以Ubuntu 9.04为例 将工作环境迁移到 Linux
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- 从USB安装Ubuntu Server 10.04.3 图文详解
- Ubuntu 15.04 正式版发布下载
- Linux-Ubuntu 10.04安装Cadence-ic610 方法总结图解
- Ubuntu 12.04和Windows 7双系统安装图解
- Ubuntu /home下中文目录如何修改成英文?
- 开机出现:grub rescue的修复方法
- Ubuntu连接Android真机调试
- 你应该选择 Ubuntu 还是 Fedora?
- 100 个最佳 Ubuntu 应用(中)
- 看看我的Ubuntu Linux截图
- Ubuntu 12.04 LTS服务器版安装过程及使用图解