一、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后的部分截图

Ubuntu16.04下caffe CPU版的详细安装步骤

 

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

Ubuntu16.04下caffe CPU版的详细安装步骤

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

Ubuntu16.04下caffe 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

Ubuntu16.04下caffe CPU版的详细安装步骤

指定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——配置模型训练的超参数——定义网络训练的中间的规则

  Ubuntu16.04下caffe CPU版的详细安装步骤

 

 

train_test.prototxt——训练网络

Ubuntu16.04下caffe CPU版的详细安装步骤

 

 Ubuntu16.04下caffe CPU版的详细安装步骤

 

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

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

deploy.prototxt——测试网络

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

Ubuntu16.04下caffe CPU版的详细安装步骤

 

 

linux_caffe脚本使用说明

pycaffe使用范例

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

caffe中特殊层添加

caffe中如何fine_tuning

caffe中学习率使用技巧

caffe中参数共享技巧

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

caffe训练网络中的数据打包

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