一、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环境管理工具。
(一)下载
- 可选择官网下载 https://www.anaconda.com/download/
- 在清华大学开源软件镜像站下载相应的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://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-
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网络,并用于分类任务