Caffe简介

  • 什么是caffe?
  • caffe的特点
  • caffe架构
  • caffe的硬件环境
  • caffe的依赖库
  • caffe的接口

1、什么是caffe?

        caffe是一个清晰而高效的深度学习框架,是纯粹的C++/CUDA架构,支持命令行、python和matlab接口;可以在CPU和GPU之间无缝切换,其作者是贾扬清,目前caffe2已经发布。

       caffe的全称是Convolutional Architecture for Fast Feature Embedding(译为:快速特征嵌入的卷积体系结构),核心语言是C++。caffe的基本工作流程是设计建立在神经网络的一个简单假设,所有的计算都是层的形式表示的,网络层所做的事情就是输入数据,然后输出计算结果。比如卷积就是输入一幅图像,然后和这一层的参数(filter)做卷积,最终输出卷积结果。每层需要两种函数计算,一种是forward,从输入计算到输出;另一种是backward,从上层给的gradient来计算相对于输入层的gradient。这两个函数实现之后,我们就可以把许多层连接成一个网络,这个网络输入数据(图像,语音或其他原始数据),然后计算需要的输出(比如识别的标签)。在训练的时候,可以根据已有的标签计算loss和gradient,然后用gradient来更新网络中的参数。

2、caffe的特点

*模块化

caffe设计之初就做到了尽可能的模块化,允许对数据格式、网络层和损失函数进行扩展。

*表示和实现分离

caffe的模型定义是用Protocol Buffer(协议缓冲区)语言写进配置文件的,以任意有向无环图的形式,caffe支持网络架构。caffe会根据网络需要正确占用内存,通过一个函数调用实现CPU和GPU之间的切换。

*测试覆盖

每一个单一的模块都对应一个测试

*python和matlab接口

同时提供两种接口

*预训练参考模型

针对视觉项目,caffe提供了一些参考模型,这些模型仅应用在学术和非商业领域

3、caffe架构

*数据存储

caffe通过“Blobs”即以四维数组的方式存储和传递数据。Blobs提供了一个统一的内存接口,用于批量图像(或其他数据)的操作和参数更新,Models是以Google Protocol Buffers的方式存储在磁盘上的。大型数据存储在LevelDB数据库中。

*层             http://caffe.berkeleyvision.org/tutorial/layers.html

一个caffe层(Layer)是一个神经网络层的本质,它采用一个或多个Blobs作为输入,并产生一个或者多个Blobs作为输出。层有两个关键的职责,前向传播,需要输入并产生输出;反向传播,取梯度作为输出通过参数和输入计算梯度。

*网络和运行方式

caffe保留所有的有向无环图,保证前向传播和反向传播正确进行。caffe模型是终端到终端的机器学习系统。一个典型的网络开始于数据层,结束于loss层。在CPU和GPU上,层会产生相同的结果。

4、caffe的硬件环境

*CPU的选择

caffe支持CPU和GPU训练。如果采用CPU训练,CPU支持的线程越多越好,因为caffe本身显性的使用两个线程。一个线程用来读取数据,另一个线程用来执行前向传播和反向传播;如果采用GPU训练,则大量运算由GPU完成,CPU只运行caffe的两个线程,因此即使选用更多的CPU也无法大幅度加速训练,训练时效取决于GPU。

*GPU的选择

因为caffe只支持cuda(Computer Unified Device Architecture)库,而cuda库是NVIDIA显卡专用的,所以选择caffe作为深度学习框架一定要选用NVIDIA显卡。如果电脑使用两个不同显卡的版本,则训练速度是两张低速卡一起训练的速度。

*内存的选择

选择支持双通道的内存以及高频率的内存有利于训练,GPU训练下,内存频率不是重要影响因素。

*硬盘选择

caffe采用单独线程异步方式从硬盘中顺序读取数据,需要根据实际情况看是否考虑固态硬盘(SSD),硬盘容量和数据集密切相关。

5、caffe的依赖库

Boost库:一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。caffe采用C++作为主开发语言,其中大量的代码依赖于Boost库。

GFlags库:Google的一个开源的处理命令行参数的库,使用C++开发。caffe库采用GFlags库开发caffe的命令行。

GLog库:一个应用程序的日志库,提供基于C++风格的流日志API,caffe运行时的日志依赖于GLog库。

LevelDB库:Google实现的一个非常高效的Key-Value数据库。单进程服务,性能非常高。是caffe支持的两种数据库之一。

LMDB库:是一个超级小、超级快的Key-Value数据存储服务,使用内存映射文件,因此在读取数据的性能跟内存数据库一样,其大小受限于虚拟地址空间的大小。是caffe支持的两种数据库之一。

ProtoBuf库:Google Protocol Buffer,一种轻便高效的结构化数据存储格式,可用于结构化数据的串行化(序列化),适合做数据存储或RPC数据交换格式。可用于通信协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。caffe使用起来非常方便很大程度上是因为采用.proto文件作为用户的输入接口。用户通过编写.proto文件定义网络模型和Solver。按序排列时二进制字符串尺寸最小,高效序列化,易读的文本格式与二进制版本兼容,可用多种语言实现高效的接口,尤其是 C++
和 Python。这些优势造就了 Caffe 模型的灵活性与扩展性。

HDF5库:Hierarchical Data File,一种高效存储和分发科学数据的新型数据格式,可存储不同类型的图像和数码数据的文件格式,可在不同的机器上进行传输,同时还有统一处理这种文件格式的函数库。caffe支持HDF5格式。

snappy库:一个C++库,用来压缩和解压缩的开发包。旨在提供高速压缩速度和合理的压缩率。caffe在数据处理时依赖于snappy库。

6、caffe的接口

caffe python接口------Pycaffe

(1)caffe.Net是主要接口,负责导入数据、校验数据、计算模型;

(2)caffe.Classifier用于图像分类;

(3)caffe.Detector用于图像检测;

(4)caffe.SGDSolver是搂在外的solver的接口;

(5)caffe.io处理输入输出,数据预处理;

(6)caffe.draw可视化net的结构;

(7)Caffe blobs以numpy ndarrays的形式表示,方便而且高效。

caffe matlab接口------matcaffe

caffe命令行接口

           caffe train:用于模型学习

           caffe test:用于测试运行模型的得分,并且用百分比表示网络输出的最终结果

           caffe time:用来检测系统性能和测量模型相对执行时间,此命令通过逐层计时与同步,执行模型检测

 

  • 21
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值