系统版本: OS X 10.11.2
处理器:2.2GHz i7
内存: 16GB
由于caffe安装过程需要依赖多个包,因此最好提前安装好包管理工具。在Mac上推荐使用Homebrew,如果是Mac新手可参考高效 MacBook 工作环境配置 的开发环境配置部分。
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中
由于我的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)将下图中对应行前面的‘#’ 去掉
…
在终端上一次执行如下命令:
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
安装成功!
在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文件中进行修改。
(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的问题
参考网页