Mac 10.11 El Capitan 安装caffe 注意事项

前言:

最近研究深度学习,用过Theano框架做过一些demo,最近caffe比较火,也想试一试。同时在Ubuntu 14.04 64位上和Mac 10.11 EI Capitan上编译caffe。Ubuntu几行命令就轻松搞定了,Mac上面却是坑多到死,查了很多资料,感觉基本都是抄来的,所以这次根据自己亲身经记录一下这坑爹的过程。

正文:

  1. 在你开始参考其他教程之前,请千万记住这一个步骤,不然你会哭死。
    查看你的Mac版本和Xcode版本是否对的上,我的是10.11,就去developer.apple.com上面下载10.11的Xcode和Xcode Command Line工具。因为编译的时候,mac会调用clang来编译,而不是gcc。此外,mac的gcc也是基于clang的。如果你的mac不是NVIDIA显卡的话,那就不需要安装CUDA了。

  2. 编译环境弄好之后,准备安装homebrew,(如果你不知道brew是干什么的话,那就自己去查吧)。然后通过brew 安装snappy leveldb protobuf gflags glog szip boost boost-python lmdb homebrew/science/opencv等相关依赖。注意安装依赖的时候,需要修改homebrew的相关formula,增加”-stdlib=libstdc++”后缀,因为mac上面默认使用的libc++而不是libstdc++。
    还要注意 boost-python可以使用最新的版本,下面的链接中不是用的最新,但是我用最新的成功了的

    这一步我就不写出来了,直接给出大家参考链接吧,可能需要才能访问。
    https://haduonght.wordpress.com/2015/02/21/install-caffe-on-mac-os-x-10-10/
    http://blog.sserhuangdong.com/2014/08/15/caffe-in-mac/
    http://asifr.com/articles/compiling-caffe-for-deep-learning-on-mac.html
    http://caffe.berkeleyvision.org/install_osx.html

  3. 如果你使用make all编译不成功的话,就看这一步。使用cmake来编译。

    mkdir build
    cd build
    cmake ../

    到这里的时,需要修改vim/CmakeCache.txt.
    241行:使用CPU模式
    CPU_ONLY:BOOL=ON

    519行:使用libstdc++ 代替 libc++
    USE_libstdcpp:BOOL=ON

    536行:如果报错找不到cblas.h

    vecLib_INCLUDE_DIR:PATH=/System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current/Headers

    改完之后,

    make all -j4 //根据你自己的cpu自己设置线程数
    make test
    make runtest

如果不出意外,应该就安装成功了;但如果出现意外,我提供一下我遇到的问题的解决办法吧,有些可能不一定管用。
1.

make all ,issue:ld: symbol(s) not found for architecture x86_64

解决办法:https://github.com/BVLC/caffe/issues/2018

2.

Build errors, undefined cv::imread() cv::imencode() ...

解决办法:https://github.com/BVLC/caffe/issues/2288

3.

LD -o .build_release/lib/libcaffe.so
clang: warning: argument unused during compilation: '-pthread'
Undefined symbols for architecture x86_64:
  "cv::imread(std::__1::basic_string, std::__1::allocator > const&, int)", referenced from:
      caffe::WindowDataLayer::InternalThreadEntry() in window_data_layer.o
      caffe::WindowDataLayer::InternalThreadEntry() in window_data_layer.o
      caffe::ReadImageToCVMat(std::__1::basic_string, std::__1::char_traits, std::__1::allocator > const&, int, int, bool) in io.o

解决办法:https://groups.google.com/forum/#!topic/caffe-users/G7gj03A-JPw


如果你已经成功安装了caffe,那你迫不及待的想要试一下了吧。那我们就用mnist数据集来测试好了,步骤和结果都在下面。

cd caffe

./data/mnist/get_mnist.sh //获得mnist数据集

//把原始数据集转为lmdb形式,一定要在caffe根目录中执行,别进到子目录去
./examples/mnist/create_mnist.sh 

vim ./examples/mnist/lenet_solver.prototxt
修改最后一行:solver_mode: CPU

//在caffe根目录执行
GLOG_logtostderr=1 ./examples/mnist/train_lenet.sh lenet_solver.prototxt

你可能感兴趣的:(deep-learning,python,算法)