



Caffe的全称是Convolutional Architecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,它是开源的,核心语言是C++,它支持命令行、Python和MATLAB接口,既可以在CPU上运行也可以在GPU上运行。
Caffe是其作者贾扬清在2013年下半年利用空闲时间实现的。起初纯粹是一个业余的项目,但在2013年12月开源了之后,由于其高效、简洁,最终成为了一个在深度学习领域有影响力的学习框架。
从2014年开始,Caffe开始吸引很多其他的用户和开发人员,伯克利大学也建立了一个核心的Caffe团队,特别是NVIDIA开始帮助Caffe团队做更多的加速,伯克利大学也成立了Berkeley Learning and Vision Center来组织和吸引工业界的研究人员共同开发多个开源项目(包括Caffe)。Caffe开始吸引世界各地的人来尝试和使用深度学习的技术。
在Caffe之前,深度学习领域缺少一个完全公开所有的代码、算法和各种细节的框架,导致很多研究人员和博士生需要一次又一次地重复实现相同的算法。而Caffe很好地解决了这个问题。
Caffe的基本工作流程是设计建立在神经网络的一个简单假设,所有的计算都是层的形式表示的,网络中层做的事情就是输入数据,然后输出计算以后的结果。比如卷积就是输入一个图像,然后和这一层的参数(filter)做卷积,最终输出卷积的结果。每层需要进行两种函数计算:一种是forward,从输入计算到输出;另一种是backward,从上层给的gradient来计算相对于输入层的gradient。这两个函数实现了以后,我们就可以把很多层连接成一个网络,这个网络输入数据(图像、语音或其他原始数据),然后计算需要的输出(比如识别的标签)。在训练的时候,可以根据已有的标签计算loss和gradient,然后用gradient来更新网络中的参数。
当前的Caffe的Master分支只支持单机上的多GPU训练。2016年3月浪潮发布了集群版Caffe计算框架,它采用高性能计算行业成熟的MPI技术对Caffe版本进行数据并行的优化,该并行Caffe计算框架完全保留了原始Caffe架构的特性。浪潮开发的集群并行Caffe计算框架已经在某超级计算机上进行部署并测试,测试结果显示,在保证正确率相同的情况下,浪潮Caffe在8节点并行计算效率上提升了10.7倍,大大提升了计算速度,加速了业务的快速进行。相信在不久的将来,Caffe的Master分支会支持集群的功能。
浪潮已经将其开发的集群并行版Caffe软件代码开源发布在GitHub,这将有助于更多的用户了解和应用这款软件,加速深度学习的应用发展。有兴趣的读者可以试一下。
1.模块化
Caffe设计之初就做到了尽可能的模块化,允许对数据格式、网络层和损失函数进行扩展。
2.表示和实现分离
Caffe的模型(Model)定义是用Protocol Buffer语言写进配置文件的,以任意有向无环图的形式,Caffe支持网络架构。Caffe会根据网络的需要来正确占用内存。通过一个函数调用,实现CPU和GPU之间的切换。
3.测试覆盖
在Caffe中,每一个单一的模块都对应一个测试。
4.Python和MATLAB接口
同时提供Python和MATLAB接口。
5.预训练参考模型
针对视觉项目,Caffe提供了一些参考模型,这些模型仅应用在学术和非商业领域,它们的License不是BSD。
1.数据存储
Caffe通过“Blobs”即以4维数组的方式存储和传递数据。Blobs提供了一个统一的内存接口,用于批量图像(或其他数据)的操作和参数更新。Models是以Google Protocol Buffers的方式存储在磁盘上的。大型数据存储在LevelDB数据库中。
2.层
一个Caffe层(Layer)是一个神经网络层的本质,它采用一个或多个Blobs作为输入,并产生一个或多个Blobs作为输出。网络作为一个整体的操作,层有两个关键职责:前向传播,需要输入并产生输出;反向传播,取梯度作为输出,通过参数和输入计算梯度。Caffe提供了一套完整的层类型。
3.网络和运行方式
Caffe保留所有的有向无环层图,确保正确地进行前向传播和反向传播。Caffe模型是终端到终端的机器学习系统。一个典型的网络开始于数据层,结束于loss层。通过一个单一的开关,使其网络运行在CPU或GPU上。在CPU或GPU上,层会产生相同的结果。
4.训练网络
Caffe训练一个模型(Model)靠快速、标准的随机梯度下降算法。在Caffe中,微调(Fine tuning)是一个标准的方法,它适应于存在的模型、新的架构或数据。对于新任务,Caffe微调旧的模型权重并按照需要初始化新的权重。