Mac下Caffe安装-无GPU

1. 安装环境

系统版本: OS X 10.11.2
处理器:2.2GHz i7
内存: 16GB

2. 安装前的准备

由于caffe安装过程需要依赖多个包,因此最好提前安装好包管理工具。在Mac上推荐使用Homebrew,如果是Mac新手可参考高效 MacBook 工作环境配置 的开发环境配置部分。

  • Homebrew的安装
    在终端中输入如下命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

注: 在安装Caffe前还需要提前安装好Python(2.7以上版本,本人的是2.7.10)和Xcode。
为了以后使用python接口方便,推荐安装Anaconda Python
https://www.continuum.io/downloads
下载需要的Anaconda 版本,如选择Command-Line installer,则会下载一个shell脚本Anaconda2-4.0.0-MacOSX-x86_64.sh,下载完成后执行以下命令即可进行安装

bash Anaconda2-4.0.0-MacOSX-x86_64.sh

安装完成后会自动将Anaconda Python的路径加入到系统的$PATH中


2.Mac下Caffe无GPU安装

由于我的MAC上没有NVIDIA的GPU,所以在安装Caffe时跳过了CUDA的安装步骤,只需要在最后编译时将Makefile.config中CPU_ONLY := 1前的‘#’去掉即可。

从github上下载 Caffe源码

  • 安装依赖的包
    在终端中分别输入如下的命令:
brew install -vd snappy leveldb gflags glog szip lmdb
# need the homebrew science source for OpenCV and hdf5
brew tap homebrew/science
#对于Anaconda Python在安装opencv时需要做如下修改
brew edit opencv
_________
# 将如下两行
args << "-DPYTHON_LIBRARY=#{py_lib}/libpython2.7.#{dylib}"
args << "-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7"
# 修改为:
args << "-DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib"
args << "-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7"
________
# 接着执行如下命令
brew install opencv
brew install openblas
#切换到$CAFFE_ROOT/python路径下执行如下命令:
for req in $(cat requirements.txt); do pip install $req; done

切换到caffe-master主目录下面,将Makefile.config.example 复制为Makefile.config,并做以下修改:
(1)将第8行的 ‘# CPU_ONLY := 1’ 改为 ‘CPU_ONLY := 1’
(2)将第46行的 ‘BLAS := atlas’ 改为 ‘BLAS := open’
(3)将下图中对应行前面的‘#’ 去掉
这里写图片描述
Mac下Caffe安装-无GPU_第1张图片
这里写图片描述
这里写图片描述


3. 编译安装

切换到caffe的主目录下,如下图所示:
这里写图片描述

在终端上一次执行如下命令:

make all -j4
make test -j4
make runtest -j4
make pycaffe

如果要调用caffe的python接口,需要将$CAFFE_ROOT/python路径加入到PYTHONPATH中:

export PYTHONPATH=/your/path/to/caffe-master/python:$PYTHONPATH

安装成功!


4.训练样例

在caffe安装成功后,可以拿MNIST数据测试一把,看看能否跑通。
首先切换到caffe主目录$CAFFE_ROOT下

cd $CAFFE_ROOT
sh ./data/mnist/get_mnist.sh
sh ./examples/mnist/create_mnist.sh

由于我们没有GPU,因此需要将./examples/mnist/lenet_solver.prototxt中的solver_mode设为CPU

solver_mode: CPU

最后,在$CAFFE_ROOT路径下执行如下命令即可开始训练

sh ./examples/mnist/train_lenet.sh

训练过程中的相关参数可在./examples/mnist下的lenet_solver.prototxt和lenet_train_test.prototxt文件中进行修改。

5. 安装遇到的问题

(1)undefined reference to xx

.build_release/lib/libcaffe.so: undefined reference to `boost::thread::start_thread_noexcept()'
.build_release/lib/libcaffe.so: undefined reference to `boost::thread::join_noexcept()'

convert_imageset.cpp:(.text+0x18a): undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, int*, int*)'
convert_imageset.cpp:(.text+0x1b9): undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, int*, int*)'

这里报错是因为make的时候没有找到boost和gflags对应的include和lib, 需要修改Makefile.config中INCLUDE_DIRS和LIBRARY_DIRS的值,加上你自己需要的boost及gflags对应的include和lib路径。

如果自己机器上的gflags或boost版本比较老,则可参考caffe官网给的安装方法:

# gflags
wget https://github.com/schuhschuh/gflags/archive/master.zip
unzip master.zip
cd gflags-master
mkdir build && cd build
export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make && make install

(2)import caffe 遇到 xx segmentation fault python
这个是你的系统里有多个版本的Python,并且编译和运行的时候不是一个版本(通常是boost-Python链接的Python是系统自带Python而不是anaconda)。这个时候可以在编译的时候强制他们都用同一个Python。(该问题的解决方法参考【6】)

首先查看_caffe.so有没有链接到你的anaconda Python

otool -L python/caffe/_caffe.so

如果没有链接,采用下面的命名强制链接

install_name_tool -change "libpython2.7.dylib" "$HOME/anaconda2/lib/libpython2.7.dylib" python/caffe/_caffe.so

完美解决segmentation fault的问题


参考网页

  1. http://caffe.berkeleyvision.org/
  2. http://blog.jobbole.com/89013/
  3. http://www.open-open.com/lib/view/open1421995285109.html
  4. http://blog.csdn.net/yinchuandong2/article/details/4903012
  5. http://www.boost.org/doc/libs/1_59_0/more/getting_started/unix-variants.html#link-your-program-to-a-boost-library1
  6. http://www.cnblogs.com/xyzzhangfan/p/5605081.html?utm_source=tuicool&utm_medium=referral
  7. https://github.com/BVLC/caffe/issues/591

你可能感兴趣的:(Caffe,MAC,Caffe,无GPU,CPU)