在Ubuntu上用python3安装caffe(仅CPU)

在Ubuntu上用python3安装caffe(仅CPU)

现在网上安装caffe的版本基本上都是基于python 2.7的,本教程旨在用anaconda 3安装caffe cpu,其过程非常艰辛,连续弄了三天时间才终于有了一个完整教程。

我的系统环境:Ubuntu 16.04、Anaconda 3.5.2(也就是python 3.5.2)、低端笔记本、安装caffe cpu、在这之前安装了opencv 3.2.0

第一部分: 安装dependencies
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libhdf5-serial-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

然后把CAFFE的源代码下载下来: git clone https://github.com/BVLC/caffe.git
(当然没有安装GIT的得先安装一下)
下载完成之后,进入CAFFE文件夹, 进入里面的PYTHON文件夹,然后输入
for req in $(cat requirements.txt); do pip install $req; done
(PIP如果没有安装得先安装一下:sudo apt install python-pip)

第二部分: 安装CAFFE
到CAFFE文件夹, 使用模板写个Makefile.config. 具体就是先复制一下模板, 再改一些内容(我喜欢用EMACS).
cp Makefile.config.example Makefile.config
-因为CPU MODE, 所以在CPU_ONLY := 1前面的#要去掉.
-两个路径要改成这样:(添加后面的两个hdf5的路径, 否则编译时报hdf5错误)
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

准备好了.
make pycaffe -j 4
另外, 这个make默认是用CPU单核运算,如果想要快一点, 比如我想使用四核, 在make后面加上-j4标签.
如果上面4行某一行报错之后想要重试,建议先make clean再重新开始.

第三部分: 设置 Python Caffe
去到CAFFE文件夹里面的python文件夹, 把当前路径记录下来(pwd). 然后输入以下命令(把记下的路径放在相应地方)
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH


第四部分:也是最重要的部分——分享我解决错误的过程及解决方案

1、错误:按照上面的教程一点没变,老是说找不到Python.h

      解决办法:网上查了各个版本的说法都没解决,后面仔细想了想,肯定是系统找不到自己的Python路径,我发现Python.h在我的anaconda文件中,但在配置文件Makefile.config中的anaconda环境的路径根本就不是"ANACONDA_HOME := $(HOME)/anaconda",所以系统根本找不到Python.h。所以我立即把ANACONDA_HOME改了,改成了我装anaconda时文件的位置,修改后的截图如下:

# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
# ANACONDA_HOME := $(HOME)/anaconda
ANACONDA_HOME := $(HOME)/Downloads/yes

# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
        # $(ANACONDA_HOME)/include/python2.7 \
        # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)
PYTHON_LIBRARIES := boost_python3 python3.5m
# PYTHON_INCLUDE := /usr/include/python3.5m \
#                  /usr/lib/python3.5/dist-packages/numpy/core/include

PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
        $(ANACONDA_HOME)/include/python3.5m \
        $(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include

# We need to be able to find libpythonX.X.so or .dylib.
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib


2、错误:make pycaffe可以通过,但是make all时出现错误,具体错误我没有记录,但是好像是因为系统装了多个opencv的原因,不管怎么说,至少可以在python环境下import caffe了,不过import使又出现错误了:

Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/.../Downloads/caffe-master/python/caffe/__init__.py", line 1, in <module>
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
  File "/home/.../Downloads/caffe-master/python/caffe/pycaffe.py", line 13, in <module>
    from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
ImportError: /home/.../Downloads/caffe-master/python/caffe/../../build/lib/libcaffe.so.1.0.0-rc5: undefined symbol: _ZN2cv6imreadERKNS_6StringEi

make all时出现的错误:

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)'
collect2: error: ld returned 1 exit status
Makefile:625: recipe for target '.build_release/tools/upgrade_net_proto_text.bin' failed
make: *** [.build_release/tools/upgrade_net_proto_text.bin] Error 1
make: *** Waiting for unfinished jobs....

    解决办法:也是,的确在这之前我分别在python 3.5和python 2.7下面装了opencv,而且该教程前面又装了libopencv-dev,所以我就怀疑是这个,但是我尝试着卸载了opencv还是import出现同样的错误,最后不断找解决方案,也尝试了他们的各种解决方法,都不知道make clean然后又make all了多少次,还是不管用。最后在网站https://github.com/BVLC/caffe/issues/2348#issuecomment-95156848看到有人说”Uncomment if you're using OpenCV 3”我顿时又想到了配置文件,于是我在配置文件中去掉 ”OPENCV_ VERSION := 3“,我又make clean,接着make all,奇迹终于出现了,上面的错误消失了,居然make all成功了,哈哈,太高兴了!!!


上面的两个问题花的时间最长,用了两天多的时间,下面的问题网上的解决办法都是正确的,花的时间少。


3、错误:现在可以import caffe了,但是又出现了以下错误:

Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/.../Downloads/caffe-master/python/caffe/__init__.py", line 1, in <module>
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
  File "/home/.../Downloads/caffe-master/python/caffe/pycaffe.py", line 15, in <module>
    import caffe.io
  File "/home/..../Downloads/caffe-master/python/caffe/io.py", line 2, in <module>
    import skimage.io
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/__init__.py", line 15, in <module>
    reset_plugins()
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 93, in reset_plugins
    _load_preferred_plugins()
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 73, in _load_preferred_plugins
    _set_plugin(p_type, preferred_plugins['all'])
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 85, in _set_plugin
    use_plugin(plugin, kind=plugin_type)
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 255, in use_plugin
    _load(name)
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/manage_plugins.py", line 299, in _load
    fromlist=[modname])
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/skimage/io/_plugins/matplotlib_plugin.py", line 3, in <module>
    import matplotlib.pyplot as plt
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/matplotlib/pyplot.py", line 36, in <module>
    from matplotlib.figure import Figure, figaspect
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/matplotlib/figure.py", line 40, in <module>
    from matplotlib.axes import Axes, SubplotBase, subplot_class_factory
  File "/home/..../Downloads/yes/lib/python3.5/site-packages/matplotlib/axes/__init__.py", line 4, in <module>
    from ._subplots import *
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/matplotlib/axes/_subplots.py", line 10, in <module>
    from matplotlib.axes._axes import Axes
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 23, in <module>
    import matplotlib.dates as _  # <-registers a date unit converter
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/matplotlib/dates.py", line 126, in <module>
    from dateutil.rrule import (rrule, MO, TU, WE, TH, FR, SA, SU, YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY)
  File "/home/.../Downloads/yes/lib/python3.5/site-packages/dateutil/rrule.py", line 55
    raise ValueError, "Can't create weekday with n == 0"
                    ^
SyntaxError: invalid syntax

    错误解决办法:从上面可以看出也就是在  import matplotlib.pyplot as plt 时出现错误,百度了以下,尝试了几种解决方案,原来是matplotlib版本太低了,需要升级,于是我pip install matplotlib --upgrade 了以下,果然解决了,但是又出现了下面的问题。



3、错误:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so.

Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so.

   解决方案:继续百度了下,哈哈,原来是因为numpy版本过低导致,于是我 conda update numpy ,哈哈又成功了。。所以,我的anaconda里边的包必须得升级啊,里边的包都还是安装anaconda时系统自带的,太老了。








哈哈,我现在可以大声的说我终于可以在Ubuntu下成功使用caffe了,截图为证!!!!!


参考网站:

http://www.voidcn.com/blog/u012675539/article/p-5962112.html

http://www.linuxidc.com/Linux/2016-09/135034.htm

http://caffe.berkeleyvision.org/installation.html#compilation

https://github.com/BVLC/caffe/issues/2348#issuecomment-95156848

http://stackoverflow.com/questions/36659453/intel-mkl-fatal-error-cannot-load-libmkl-avx2-so-or-libmkl-def-so

http://blog.csdn.net/10km/article/details/65936155?locationNum=14&fps=1

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值