美文网首页我爱编程
Ubuntu 16.04 下安装配置caffe

Ubuntu 16.04 下安装配置caffe

作者: ACoolBlog | 来源:发表于2018-06-19 17:16 被阅读0次

    原文地址:https://blogof33.com/post/5/

    很长一段时间没有更新博客了,忙着充电,忙着学习。这次做项目需要使用到caffe,花了一些时间搭好了。本来是懒得写这一篇文章的,但是突然看到Tensorflow那一篇已经有700+的阅读量了,小博客访问量本来就少,大多仰仗校友们帮助,不能就这样荒废下去,辜负大家的一片心意,刚好写一下自己踩的坑,防止重蹈覆辙。

    这篇教程参考了caffe官方文档,分成两个版本,CPU版本和GPU版本,其实本质上只是配置不同罢了。

    首先需要查看默认python(针对Python2与Python3并存的情况):

    python --version

    如果是python2.7,则以下请遵循python2.7的配置,如果是python3.5以上,则遵循python3.5的配置(最好使用python2.7,因为教程只在2.7环境下编译通过,不保证3.5以上不会出现问题)。

    初始配置:

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install -y build-essential cmake git pkg-config
    sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libboost-all-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
    #下载包管理器pip,如果有可以跳过
    sudo apt-get install -y python-pip
    
    #如果默认python是Python2.7
    sudo apt-get install -y python-dev
    sudo apt-get install -y python-numpy python-scipy
    
    #如果默认python是Python3.5及以上
    sudo apt-get install -y python3-dev
    sudo apt-get install -y python3-numpy python3-scipy
    
    #如果opencv版本为2.4
    sudo apt-get install -y libopencv-dev
    

    安装CUDA 8以及Cudnn(可选)

    如果你的显卡是英伟达(NVIDA)的,并且你想使用GPU版本的caffe,那么可以安装Cuda Toolkit 8和CUDNN库,详情请见博主的另一篇文章

    在Ubuntu16.04上安装opencv3.3

    如果未安装opencv则可以通过以下方式安装opencv3.3(目前最新版)。

    构建opencv 3.3

    首先安装依赖关系:

    sudo apt-get install --assume-yes build-essential cmake git
    sudo apt-get install --assume-yes pkg-config unzip ffmpeg qtbase5-dev python-dev python3-dev python-numpy python3-numpy
    sudo apt-get install --assume-yes libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev
    sudo apt-get install --assume-yes libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
    sudo apt-get install --assume-yes libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev
    sudo apt-get install --assume-yes libvorbis-dev libxvidcore-dev v4l-utils vtk6
    sudo apt-get install --assume-yes liblapacke-dev libopenblas-dev libgdal-dev checkinstall
    

    然后从https://github.com/opencv/opencv/archive/3.3.0.zip下载OpenCV 3.3的最新源代码,解压以后进入解压后的目录(一般为opencv-3.3.0),执行:

    mkdir build
    cd build/    
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D FORCE_VTK=ON -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -D 
    
    #如果是CUDA 8.0,则执行以下命令
    CUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D WITH_GDAL=ON -D WITH_XINE=ON -D BUILD_EXAMPLES=ON ..
    
    #如果是CUDA 9.0,则执行以下命令
    CUDA_NVCC_FLAGS="-D_FORCE_INLINES --expt-relaxed-constexpr"
    
    #最后make
    make -j $(($(nproc) + 1))
    

    注意:Java 9会导致编译失败。

    安装Opencv 3.3

    使用make:

    sudo make install
    sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
    sudo ldconfig
    sudo apt-get update
    #以上完成以后重启
    reboot
    

    测试opencv 3.3

    进入opencv 3.3目录,执行以下代码:

    cd samples/cpp
    g++ edge.cpp `pkg-config opencv --cflags --libs` -o test 
    ./test
    

    如图所示:

    aoGZy.png

    说明opencv安装成功。

    修改gcc和g++版本

    在编译caffe之前,先要查看ubuntu下的gcc和g++默认版本,如果是5.0以下(比如4.8),则需要修改。查看:

    gcc -v
    g++ -v
    

    如果都是5.0以下,则输入以下命令:

    sudo rm /usr/bin/gcc
    sudo rm /usr/bin/g++
    sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc  
    sudo ln -s /usr/bin/g++-5 /usr/bin/g++  
    sudo ldconfig  
    

    然后再次检查gcc和g++版本:

    gcc -v
    g++ -v
    

    如果都是5.0以上则修改成功。

    然后如果进行了修改,则再编辑/usr/local/cuda-8.0/targets/x86_64-linux/include/host_config.h文件,将119行的

    error -- unsupported GNU version! gcc versions later than 5 are not supported!

    注释掉:

    //#error -- unsupported GNU version! gcc versions later than 5 are not supported!

    编译caffe

    从github上面clone caffe:

    cd
    git clone https://github.com/BVLC/caffe.git
    

    进入caffe目录下,将Makefile.config.example复制到Makefile.config中:

    cd caffe
    cp Makefile.config.example Makefile.config
    

    当前路径如图所示:

    aoJWp.png

    下面分成两个版本分别编译caffe,请各位读者根据需要选择CPU或者GPU版本。

    CPU版本

    编辑Makefile.config:

    vi Makefile.config

    将配置文件里面的#CPU_ONLY:= 1改为CPU_ONLY:= 1,即取消注释。

    同理将# WITH_PYTHON_LAYER := 1修改为 WITH_PYTHON_LAYER:=1#USE_OPENCV := 0修改成USE_OPENCV :=1#USE_LEVELDB := 0修改为 USE_LEVELDB:=1,将#USE_LMDB := 0修改成 USE_LMDB :=1

    然后修改以下几行(路径根据自己的情况来定):

    PYTHON_INCLUDE := /usr/include/python2.7 /usr/local/lib/python2.7/dist-packages/numpy/core/include

    WITH_PYTHON_LAYER := 1

    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 /usr/lib/x86_64-linux-gnu/hdf5/serial

    如果opencv为3以上(本文为3.3),则将OPENCV_VERSION := 3取消注释,然后修改下面一行(opencv中的3rdparty/lib路径根据自己的情况来定):

    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/share/OpenCV/3rdparty/lib/

    然后进入Python目录安装依赖关系:

    cd python
    #默认Python版本为Python2
    for req in $(cat requirements.txt); do sudo -H pip2 install $req --upgrade; done
    

    然后返回caffe目录,修改Makefile.config:

    cd ..
    vi Makefile.config
    

    将这一行:

    NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

    替换为:

    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

    然后打开CMakeLists.txt,加入下面一行:

    # ---[ Includes
    set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")
    

    最后编译caffe(在caffe目录下):

    mkdir build
    cd build
    cmake ..
    make all -j $(($(nproc) + 1))
    make test -j $(($(nproc) + 1))
    make runtest -j $(($(nproc) + 1))
    make pycaffe -j $(($(nproc) + 1))
    #看看是否在caffe目录下,不是就切换到该目录下再执行
    make distribute -j $(($(nproc) + 1))
    

    最后为了让Python与Caffe一起工作,编辑文件~/.bashrc:

    vi ~/.bashrc

    在文件末尾加入这一行:

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

    最后为了使配置立即生效:

    source ~/.bashrc 
    

    CPU版本至此编译完成。

    GPU版本

    和CPU版本很像,只是有些许不同。编译该版本前请保证已经安装CUDA 8和Cudnn。

    编辑Makefile.config:

    vi Makefile.config

    将配置文件里面的# USE_CUDNN := 1 修改成: USE_CUDNN := 1,即取消注释。

    同理将# WITH_PYTHON_LAYER := 1修改为 WITH_PYTHON_LAYER:=1#USE_OPENCV := 0修改成USE_OPENCV :=1#USE_LEVELDB := 0修改为 USE_LEVELDB:=1,将#USE_LMDB := 0修改成 USE_LMDB :=1

    然后修改以下几行(路径根据自己的情况来定):

    PYTHON_INCLUDE := /usr/include/python2.7 /usr/local/lib/python2.7/dist-packages/numpy/core/include

    WITH_PYTHON_LAYER := 1

    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 /usr/lib/x86_64-linux-gnu/hdf5/serial

    CUDA_DIR := /usr/local/cuda-8.0

    如果opencv为3以上(本文为3.3),则将OPENCV_VERSION := 3取消注释,然后修改下面一行(opencv中的3rdparty/lib路径根据自己的情况来定):

    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/share/OpenCV/3rdparty/lib/

    然后进入Python目录安装依赖关系:

    cd python
    #默认Python版本为Python2
    for req in $(cat requirements.txt); do sudo -H pip2 install $req --upgrade; done
    

    然后返回caffe目录,修改Makefile.config:

    cd ..
    vi Makefile.config
    

    将这一行:

    NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

    替换为:

    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

    然后打开CMakeLists.txt,加入下面一行:

    # ---[ Includes
    set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")
    

    最后编译caffe(在caffe目录下):

    mkdir build
    cd build
    cmake ..
    make all -j $(($(nproc) + 1))
    make test -j $(($(nproc) + 1))
    make runtest -j $(($(nproc) + 1))
    make pycaffe -j $(($(nproc) + 1))
    #看看是否在caffe目录下,不是就切换到该目录下再执行
    make distribute -j $(($(nproc) + 1))
    

    最后为了让Python与Caffe一起工作,编辑文件~/.bashrc:

    vi ~/.bashrc

    在文件末尾加入这一行:

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

    最后为了使配置立即生效:

    source ~/.bashrc 
    

    至此GPU版本编译成功。

    测试caffe mnist集

    进入caffe目录并测试:

    cd ~/caffe 
    ./data/mnist/get_mnist.sh  
    ./examples/mnist/create_mnist.sh  
    ./examples/mnist/train_lenet.sh  
    

    结果如下:

    cGyVH.png

    测试成功,至此,本教程结束。

    相关文章

      网友评论

        本文标题:Ubuntu 16.04 下安装配置caffe

        本文链接:https://www.haomeiwen.com/subject/mpfzeftx.html