zoukankan      html  css  js  c++  java
  • Ubuntu16.04下caffe CPU版的详细安装步骤

    一、caffe简介

    Caffe,是一个兼具表达性、速度和思维模块化的深度学习框架

    伯克利人工智能研究小组和伯克利视觉和学习中心开发。

    虽然其内核是用C++编写的,但Caffe有Python和Matlab 相关接口。

    Caffe支持多种类型的深度学习架构,面向图像分类和图像分割,还支持CNN、RCNN、LSTM和全连接神经网络设计。

    Caffe支持基于GPU和CPU的加速计算内核库,如NVIDIA cuDNN和Intel MKL。

    二、ubuntu16.04 搭建python Conda 环境

    conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系。

    conda是为python程序创建的,适用于Linux,OS X和Windows,也可以打包和分发其他软件。

    conda是目前最流行的python环境管理工具。

    (一)下载

    1. 可选择官网下载  https://www.anaconda.com/download/
    2. 清华大学开源软件镜像站下载相应的anaconda的版本

    (二)我的安装顺序

    cd /workdisk/software  # 切换到自己创建的下载目录
    /workdisk/software# wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
    /workdisk/software# ls
    Anaconda3-5.3.1-Linux-x86_64.sh
    
    安装过程根据提示点击回车和输入yes或no,中途有提示输入环境变量,如果没有配置, 安装完成后配置也可以。
    手动配置环境变量:
    /workdisk/software# vim ~/.bashrc

    增加  export PATH=/root/anaconda3/bin:$PATH

    使环境变量生效

    /workdisk/software# source ~/.bashrc

    验证conda是否安装成功

    /workdisk/software# conda -V

    conda 4.5.11

    (三)创建tensorflow1.5环境

    /workdisk/software# conda create -n tensorflow1.5 python=3.5

    /workdisk/software# conda create -n tensorflow1.5 python=3.5
    Solving environment: done
    
    
    ==> WARNING: A newer version of conda exists. <==
      current version: 4.5.11
      latest version: 4.7.11
    
    Please update conda by running
    
        $ conda update -n base -c defaults conda
    
    
    
    ## Package Plan ##
    
      environment location: /root/anaconda3/envs/tensorflow1.5
    
      added / updated specs: 
        - python=3.5
    
    
    The following packages will be downloaded:
    
        package                    |            build
        ---------------------------|-----------------
        libgcc-ng-9.1.0            |       hdf63c60_0         8.1 MB
        libstdcxx-ng-9.1.0         |       hdf63c60_0         4.0 MB
        wheel-0.31.1               |           py35_0          63 KB
        sqlite-3.29.0              |       h7b6447c_0         1.9 MB
        ca-certificates-2019.5.15  |                1         134 KB
        python-3.5.6               |       hc3d631a_0        28.3 MB
        zlib-1.2.11                |       h7b6447c_3         120 KB
        libedit-3.1.20181209       |       hc058e9b_0         188 KB
        certifi-2018.8.24          |           py35_1         139 KB
        setuptools-40.2.0          |           py35_0         571 KB
        _libgcc_mutex-0.1          |             main           3 KB
        pip-10.0.1                 |           py35_0         1.8 MB
        ncurses-6.1                |       he6710b0_1         958 KB
        openssl-1.0.2s             |       h7b6447c_0         3.1 MB
        ------------------------------------------------------------
                                               Total:        49.4 MB
    
    The following NEW packages will be INSTALLED:
    
        _libgcc_mutex:   0.1-main               
        ca-certificates: 2019.5.15-1            
        certifi:         2018.8.24-py35_1       
        libedit:         3.1.20181209-hc058e9b_0
        libffi:          3.2.1-hd88cf55_4       
        libgcc-ng:       9.1.0-hdf63c60_0       
        libstdcxx-ng:    9.1.0-hdf63c60_0       
        ncurses:         6.1-he6710b0_1         
        openssl:         1.0.2s-h7b6447c_0      
        pip:             10.0.1-py35_0          
        python:          3.5.6-hc3d631a_0       
        readline:        7.0-h7b6447c_5         
        setuptools:      40.2.0-py35_0          
        sqlite:          3.29.0-h7b6447c_0      
        tk:              8.6.8-hbc83047_0       
        wheel:           0.31.1-py35_0          
        xz:              5.2.4-h14c3975_4       
        zlib:            1.2.11-h7b6447c_3  

    Proceed ([y]/n)? y


    Downloading and Extracting Packages
    libgcc-ng-9.1.0      | 8.1 MB    | ##################################### | 100%
    wheel-0.31.1         | 63 KB     | ##################################### | 100%
    pip-10.0.1           | 1.8 MB    | ##################################### | 100%
    sqlite-3.29.0        | 1.9 MB    | ##################################### | 100%
    ca-certificates-2019 | 134 KB    | ##################################### | 100%
    libedit-3.1.20181209 | 188 KB    | ##################################### | 100%
    _libgcc_mutex-0.1    | 3 KB      | ##################################### | 100%
    libstdcxx-ng-9.1.0   | 4.0 MB    | ##################################### | 100%
    setuptools-40.2.0    | 571 KB    | ##################################### | 100%
    openssl-1.0.2s       | 3.1 MB    | ##################################### | 100%
    python-3.5.6         | 28.3 MB   | ##################################### | 100%
    certifi-2018.8.24    | 139 KB    | ##################################### | 100%
    ncurses-6.1          | 958 KB    | ##################################### | 100%
    zlib-1.2.11          | 120 KB    | ##################################### | 100%
    Preparing transaction: done
    Verifying transaction: done
    Executing transaction: done
    #
    # To activate this environment, use
    #
    #     $ conda activate tensorflow1.5 激活虚拟环境
    #
    # To deactivate an active environment, use
    #
    #     $ conda deactivate 停用虚拟环境

    (四)创建caffe2环境

    root@ranxf-TEST:/workdisk/software# conda create -n caffe2 python=3.5Solving environment: done
    
    
    ==> WARNING: A newer version of conda exists. <==
      current version: 4.5.11
      latest version: 4.7.11
    
    Please update conda by running
    
        $ conda update -n base -c defaults conda
    
    
    
    ## Package Plan ##
    
      environment location: /root/anaconda3/envs/caffe2
    
      added / updated specs: 
        - python=3.5
    
    
    The following NEW packages will be INSTALLED:
    
        _libgcc_mutex:   0.1-main               
        ca-certificates: 2019.5.15-1            
        certifi:         2018.8.24-py35_1       
        libedit:         3.1.20181209-hc058e9b_0
        libffi:          3.2.1-hd88cf55_4       
        libgcc-ng:       9.1.0-hdf63c60_0       
        libstdcxx-ng:    9.1.0-hdf63c60_0       
        ncurses:         6.1-he6710b0_1         
        openssl:         1.0.2s-h7b6447c_0      
        pip:             10.0.1-py35_0          
        python:          3.5.6-hc3d631a_0       
        readline:        7.0-h7b6447c_5         
        setuptools:      40.2.0-py35_0          
        sqlite:          3.29.0-h7b6447c_0      
        tk:              8.6.8-hbc83047_0       
        wheel:           0.31.1-py35_0          
        xz:              5.2.4-h14c3975_4       
        zlib:            1.2.11-h7b6447c_3      
    
    Proceed ([y]/n)? y
    
    Preparing transaction: done
    Verifying transaction: done
    Executing transaction: done
    #
    # To activate this environment, use
    #
    #     $ conda activate caffe2
    #
    # To deactivate an active environment, use
    #
    #     $ conda deactivate
    
    (base) root@ranxf-TEST:/workdisk/software# 

    (五)激活虚拟环境

    root@ranxf-TEST:/workdisk/software# conda activate tensorflow1.5  激活tensorflow1.5的虚拟环境
    (tensorflow1.5) root@ranxf-TEST:/workdisk/software# 

    (base) root@ranxf-TEST:/workdisk/software# conda activate caffe2 激活caffe2虚拟环境
    (caffe2) root@ranxf-TEST:/workdisk/software#

    (六)停用虚拟环境

    /workdisk/software# conda deactivate
    (base) root@ranxf-TEST:/workdisk/software# 

    (七)查看已有的环境

    (base) root@ranxf-TEST:/workdisk/software# conda info -e
    # conda environments:
    #
    base                  *  /root/anaconda3
    caffe2                   /root/anaconda3/envs/caffe2
    tensorflow1.5            /root/anaconda3/envs/tensorflow1.5

    三、虚拟环境下安装caffe

    gpu版:conda install -c defaults caffe-gpu
    cpu版:conda install -c defaults caffe
    /workdisk/software# conda install -c defaults caffe
    Solving environment: done
    
    
    ==> WARNING: A newer version of conda exists. <==
      current version: 4.5.11
      latest version: 4.7.11
    …………

    在网上搜索了很多方法(源码安装等)来安装caffe2,折腾整整一天,最后一条命令即可

    (一)虚拟环境下安装caffe2

    信息来源:

    https://pytorch.org/

    https://github.com/pytorch/pytorch

    原有的caffe2源代码现在位于PyTorch存储库中

    conda install pytorch torchvision cudatoolkit = 10.0 -c pytorch                         #  安装pytorch

    方式比较简单,只是因为caffe2集成到了pytorch当中,所以安装pytorch就安装了caffe2,并且如果你的电脑中有显卡并且安装了cuda,会自动安装成gpu版。

    但是这个方式没有c/c++版的库,如果想要使用caffe2写c/c++程序,就只能通过caffe2源码编译了。

    (二)源码安装caffe

    (base) root@ranxf-TEST:/workdisk/caffe# conda activate caffe_src
    (caffe_src) root@ranxf-TEST:/workdisk/caffe# apt-get update
    
    安装caffe之前需要安装一些依赖库:
        sudo apt-get install libprotobuf-dev  
        sudo apt-get install libleveldb-dev  
        sudo apt-get install libsnappy-dev  
        sudo apt-get install libopencv-dev  
        sudo apt-get install libhdf5-serial-dev  
        sudo apt-get install protobuf-compiler  
        sudo apt-get install libgflags-dev  
        sudo apt-get install libgoogle-glog-dev  
        sudo apt-get install liblmdb-dev  
        sudo apt-get install libatlas-base-dev  
        sudo apt-get install --no-install-recommends libboost-all-dev

    1下载源码

    git clone git://github.com/BVLC/caffe.git  
    1.生成Makefile.config文件:
    cp Makefile.config.example Makefile.config
    
    

    2.修改配置Makefile.config 文件

    1)编辑Makefile.config文件:

     vim Makefile.config

    2)去掉CPU_ONLY:=1前面的#号:

    3)配置引用文件路径:(增加部分主要是解决新版本下,HDF5的路径问题)

      将   INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

      换成 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/include/hdf5/serial/

    (这个其实可以根据具体路径进行转换,一般此路径是对的,要是还出现问题,使用命令行查找该文件的正确路径即可)

    3.修改Makefile文件

    在Makefile文件,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。

    
    
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
    变成
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
    
    

    4.执行编译

    make all  
    make test  
    make runtest 

    编译情况

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# make test后的部分截图

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# make runtest开始的部分截图(我目前安装的是CPU 版)

    省略中间部分,最后面的截图

     如果编译报错

    /usr/local/bin/ld: /root/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9' collect2: error: ld returned 1 exit status
    该错误的解决方法
    问题可能是python是通过anaconda安装的而不是直接安装
    解决办法:在Makefile.config中加入下列信息:
    LINKFLAGS := -Wl,-rpath,/root/anaconda3/lib

    四、卸载安装

    (caffe2) root@ranxf-TEST:/workdisk/software# conda list 
    (caffe2) root@ranxf-TEST:/workdisk/software# conda remove caffe

    五、编译Python接口

    首先如果没有Python接口,导入caffe时是要报错的

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# python 
    Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56) 
    [GCC 7.3.0] 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 "/workdisk/caffe/python/caffe/__init__.py", line 1, in <module>
        from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
      File "/workdisk/caffe/python/caffe/pycaffe.py", line 11, in <module>
        import numpy as np
    ImportError: No module named 'numpy'

    (一).安装pip以及numpy

     1.安装pip以及numpy

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt-get install python-pip
      (caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt-get install python-numpy

    2.安装python接口依赖库:

    在安装依赖库前,需要先安装gfortran编辑器:

    (caffe_src) root@ranxf-TEST:/workdisk/caffe#sudo apt-get install gfortran 

    然后安装依赖库,首先进入caffe目录下的python文件中:

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# cd python/
    (caffe_src) root@ranxf-TEST:/workdisk/caffe/python# for req in $(cat requirements.txt); do pip install $req; done

    指定iPython版本

    sudo pip install ipython==5.3.0

    安装完后,执行下面一条语句,该语句的作用是检查依赖库是否都已经安装成功,如果成功会显示requirement already saitisfied,如果未成功会继续安装:

    sudo pip install -r requirements.txt

    3.添加环境变量:(或许已经存在,打开确认即可)

    打开配置文件bashrc:sudo vim ~/.bashrc

    或者直接打开该文件也可以,在文件的最后面添加:
    
    export PYTHONPATH=/workdisk/caffe/python:$PYTHONPATH

    保存文件后关闭,然后输入下面语句,使环境变量生效:

    source ~/.bashrc 

     4.编译python接口:(在caffe目录下)

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# make pycaffe
    CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
    touch python/caffe/proto/__init__.py
    PROTOC (python) src/caffe/proto/caffe.proto

    编译完后,若无错误提示,则说明编译成功。

    5.验证python接口:

    进入python环境,引入caffe包

    (caffe_src) root@ranxf-TEST:/workdisk/caffe# python
    Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56) 
    [GCC 7.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import caffe
    >>> 

    如上显示,说明python接口编译成功。如果显示no model named caffe则说明python接口编译失败,重新检查上述步骤或百度解决。至此整个caffe安装编译的过程就全部结束了。

    caffe_CPU版本编译安装参考文章:ubuntu16.04下安装caffe(cpu only)

    六、是否安装成功

    不报错即代表安装成功。

    (caffe2) root@ranxf-TEST:/workdisk/software# python
    Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56)
    [GCC 7.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import caffe
    >>>

    以上为caffe安装的详细步骤

    以下为学习时的零散笔记,可以略过,后期再来整理

    七、caffe的使用

     训练图片文章参见:

    https://blog.csdn.net/u013832707/article/details/52943935

    https://www.cnblogs.com/denny402/p/5083300.html

    基础篇——了解caffe的基本知识

    实战篇——面向工程实践了解caffe的相关使用技巧

    caffe介绍

    深度学习框架,纯粹的C++CUDA架构,支持命令行,python和MATLAB接口,可以在CPU和GPU之间无缝切换。

    不需要自己编写程序。

    caffe对比其他框架

    容易上手(对于新手,都是采用配置文件实现)

    训练速度快

    组件模块化

    tensorFlow在github上下载量是最多的。资深的深度学习算法工程师可以使用,,灵活性高于其他框架。对于新手来说,要难一些。

    caffe对比caffe2
    caffe2是2017年4月18日开幕的F8年度开发者大会上,Facebook发布的一款全新的开源深度学习框架;

    一个轻量级和模块化的深度学习框架。caffe2以原始Caffe为基础,在设计时充分考虑了表达,速度和模块性。在强调轻便性的同时,也保持了可扩展性和计算性能。

    caffe2:有工具支持将caffe转caffe2模型

    官网:http://caffe2.ai/

    源码:http://github.com/caffe2/caffe2

    支持分布式训练

    支持IOS系统,Android系统和树莓派上训练和部署模型

    简单调用caffe2中预先训练好的Model Zoo模型

    caffe2框架已经应用在Facebook平台上

    NVIDIA(英伟达),Qualcomm(高通),intel(英特尔),Amazon(亚马逊)和Microsoft(微软)等公司的云平台都已支持。

    简化依赖,按需配置,完美的解决了依赖问题

    采用operator方式,由更细粒度的operator组合而成

    对caffe中的Blob进行扩展,支持了更多的类型,这就让BinarynNe,模型的量化压缩变得可行。

    对于工程实践来说,模型压缩具有非常重要的意义,对于一个大模型和对于一个需要跑在芯片上的网络,原始的网络设计需要占用更多的网络资源,而通过量化压缩以后能够大大降低网络的参数规模,能够提高网络的计算速度。对于嵌入式系统来说,具有重要意义,尤其对于目前AI产品的落地。

    很多时候,计算瓶颈是决定产品是否能够市场化的关键因素。

    caffe中的基本概念

    caffe模块包括4个部分,

      Blob:caffe中数据结构的封装,并且封装后的数据用于在layer层流通,也就是说可以作为网络层的输入和输出的数据。

      Blob基本概念:Blob思维连续数组,通常表示为(n,k,w,h)是基础的数据结构,其中n表示了一个milipit,也就是说一个批量样本的大小,也就是样本的个数。k表示通道的数量。w表示图像的宽度。h表示图像的高度。可表示网络层输入输出的数据,也可以表示参数数据;

        

      Layer:主要定义了网络结构。具体的网路结构也是相当丰富的,有输入层,输出层,神经网络层的抽象。网络层数据的传输依赖于Blob这样一个数据结构。

      layer神经网络基本单元,同样定义各种各样的类。每一类中不同的层定义了3种计算:

        初始化网络参数

          完成创建blobs和layers

          调用layers的setup函数来初始化layers

        前向传播

          定义Forward函数

        后向传播  

          定义backward函数

     

      Net:整个layer层通过组合之后,就能够构造一个相应的网络,而这个网络就通过net数据结构来表示,能将layer层关联,这关联依赖于一定的准则。

      caffe中Net为无回路有向图,

      Solver:关于网络的训练和测试部分通过Solver来完成。在Solver配置文件中给出网络训练和测试中各种参数。

       创建训练网络和测试网络

      周期性的测试网络(通过配置文件来对网络进行循环测试)

      调用前向和反响函数进行的迭代优化和参数更新

      slover每轮迭代都会通过前向函数计算输出和损失(loss),还用反向传播来计算梯度(梯度的计算关系到参数的更新,比如常见的网络优化算法SGD、RPMS等,这些算法的优化也是通过slovers来完成的)

    caffe model主要用于保存和恢复网络参数,后缀为.caffemodel。主要是在网络训练之后得到的模型,通常这也是我们要交互的模型。

    solver保存和恢复运行状态,后缀为.solverstate。

      

    caffe配置

    需要安装cuda和cudnn,可以分别从官网进行下载,在安装的时候,注意cuda和cudnn的版本需要对饮,

    caffe源码解读(略)

    安装好caffe的依赖后,下载源码后编译,先需要修改makefile.config。在里面加入python、cuda等支持项,修改支持GPU。

    编译caffe,进入caffe项目目录,使用make all -j32(多线程命令),如果有错误,就去掉多线程,直接用makefile。

    进入caffe

    caffe是通过一些配置文件来完成网络的搭建,训练和测试的过程。

    一个完整的caffe网络需要哪些必须配备的文件,除去我们编译生成的一些工具外,我们需要额外配置的文件有:

    solver.prototxt——配置模型训练的超参数——定义网络训练的中间的规则

      

    train_test.prototxt——训练网络

     

    以上截图给出了训练网络的基本配置,定义了数据层,对于数据层,只需要定义top层,他对应该层的输出,该层的输入对应了。另外将训练网络和测试网络,我们如何区分一个层是否用在训练网络还是测试网络中,通过定义include这个参数,如果phase定义为TRAIN,就应用在train网络中。如果phase定义为TEST(注意大写),那么久应用在测试网络中。如果我们去掉这个参数phase,这个层就会同时出现在测试网络和训练网络中。对于哪些层会存在这些问题,就是loss层。在训练网络中,需要用到loss层来计算梯度,而在测试网路中,不需要用到loss层来计算精度,只需要前向传播就可以。

      在测试网路中,需要用精度层来直接为我们计算精度

    deploy.prototxt——测试网络

    deploy.prototxt用于网络训练完成后,往往通过deploy.prototxt文件进行网络测试

    linux_caffe脚本使用说明

    pycaffe使用范例

    深度学习标准层在caffe中定义

    caffe中特殊层添加

    caffe中如何fine_tuning

    caffe中学习率使用技巧

    caffe中参数共享技巧

    caffe网络通用设计技巧(工程实现中遇到的问题)

    caffe训练网络中的数据打包

    设计一个caffe网络,并用于分类任务

  • 相关阅读:
    PHP session
    PHP范例注册审核
    php文件操作
    JSON 弹窗
    PDO
    CSP-S2020 游记
    Meissel-Lehmer算法 学习笔记
    [AGC046C] Shift 题解
    Min_25筛学习笔记
    GDOI2020 游记
  • 原文地址:https://www.cnblogs.com/ranxf/p/11418504.html
Copyright © 2011-2022 走看看