一 简介
caffe是2013年由加州大学伯克利分校的贾杨清博士在Github上发布的一款深度学习开源框架。它 的核心语言是C++,支持python和matlab接口。既可以在CPU上运行,又可以在GPU上运行。主要应用于计算机视觉领域,如图像识别,目标识别,人脸识别,图像风格转换等方面。
我们可以按照框架定义各种各样的卷积神经网络的结构,并且可以再此框架下增加自己的代码,设计新的算法,该框架的一个问题就是,只能够使用卷积网络,所有框架都是在基于卷积神经网路的模型上进行的。
二 组成结构
caffe有三个原子结构,caffe的编程框架就是在这三个原子下实现, Blobs, Layers, and Nets。 原子结构就是说不能随意更改。
Caffe都是一些模块组成,模块包括4个部分:
Blob(caffe的数据表示,在layer上流动),
layer(不仅可以表示神经网络层,也可以表示输入输出层),
Net(神经网络结构,将layer层叠关联起来),
Blob 四维连续数组,通常表示为(n, k, w, h)是基础的数据结构,可表示输入输出数据,也可表示参数数据
slover(协调神经网络的训练和测试,定义一些参数)
Solver 的作用是:a. 创建用于学习的训练网络和用于评估的测试网络; b. 周期性的评估测试网络; c. 通过调用前馈和后馈函数进行的迭代优化和参数更新。solver每轮迭代都会通过前馈函数计算输出和损失(loss),还用后馈传播来计算梯度。通过更新学习率等方法更新solver。
训练好的caffe model 是用于保存和恢复网络参数,后缀为 .caffemodel; solver保存和恢复运行状态,后缀为 .solverstate
数据和模型。数据是带标签的图片集,主要分为训练集,验证集和测试集;
模型是描述表示对原始数据的处理,获得的model;
caffe也不是直接处理原始数据的,而是由预处理程序将原始数据变换存储为LMDB或者LevelDB格式,这两种方式可保持较高的IO效率,加快训练时的数据加载速度,另一方面是因为数据类型很多(二进制文件,文本文件,JPG等图像文件等)不可能用同一套代码实现所有类型的输入数据读取,所以转换为统一的格式可以简化数据读取层的实现。
下载的原始数据集需要转换为LEVELDB或LMDB
LMDB(Lightning Memory-Mapped Database Manager)-闪电般的内存映射型数据库管理器, 在Caffe中的主要作用是进行数据管理,将各种类型的原始数据(比如JPEG图片,二进制数据)都 统一转换为Key-Value存储,以便于Caffe的DataLayer获取这些数据。而LEVELDB是Google开发 的一种数据存储方式,在Caffe早期的版本中用得比较多。现在LMDB会用得比较多。
三 使用过程总结
- 制作标签
- 转换成 lmdb 批处理
- 图片做镜像可以扩充数据集
- 修改caffe_net
- 卷积层 高斯算法 ,Relu函数
- 池化层
- 第2,3.4,5个卷积层
全连接层神经元减少(数据集少,如果过多会出现过拟合)
Dropout抵抗过拟合 ,训练过程中,让一半的神经元处于激活状态
原先的1000分类修改成需要的
- (改变优化策略)训练过程中出现,增加迭代,或者继续训练时,loss不变了,优先选择修改优化器
四 体会
不足:Caffe对递归网络和语言建模的支持很差
优点: 在计算机视觉运用较多。
拥有不少训练好的模型。
比较模块化,而且模型和优化方法都是文本的方式,不是代码。