Caffe和caffe2漫谈

根据网上博客和自己理解部分进行备注说明,文字内容会有部分重复

1.来源:

Caffe是一套最早起源于Berkeley的深度学习框架,被广泛应用于神经网络的任务当中,大量paper的实验都是用它完成的,而国内电商等互联网公司的大量计算机视觉应用也是基于它完成。现阶段很多国产应用也是基于Caffe框架开发。

Caffe2是在2017年4月18日开幕的 F8 年度开发者大会上,Facebook 发布的一款全新的开源深度学习框架。

Caffe2go是一个以开源项目Caffe2为基础、使用Unix理念构建的轻量级、模块化框架。其核心架构非常轻量化,而且可以附加多个模块。它是Facebook开发的一个可以在移动平台上实时获取、分析、处理像素的深度学习框架Caffe2Go。

2.技术架构:

Caffe
1)数据存储:
Caffe通过“Blobs”即以4维数组的方式存储和传递数据。Blobs提供了一个统一的内存接口,用于批量图像(或其它数据)的操作,参数或参数更新。Models是以Google Protocol Buffers的方式存储在磁盘上。大型数据存储在LevelDB数据库中。
2) Layer层:
一个Caffe层(Layer)是一个神经网络层的本质,它采用一个或多个Blobs作为输入,并产生一个或多个Blobs作为输出。网络作为一个整体的操作,层有两个关键作用:正向传播,需要输入并产生输出;反向传播,取梯度作为输出,通过参数和输入计算梯度。Caffe提供了一套完整的层类型。
3) 网络和运行方式:
Caffe保留所有的有向无环层图,确保正确的进行正 向传播和反向传播。Caffe模型是终端到终端的机器学习系统。一个典型的网络开始于数据层,结束于loss层。通过一个单一的开关,使其网络运行在CPU或GPU上。在CPU或GPU上,层会产生相同的结果。
4) 训练一个网络:
Caffe训练一个模型(Model)靠快速、标准的随机梯度下降算法。

3.具体作用:

(1)Blob:用于存储和传输,单个Blob是对要处理的实际数据的封装,它通过Caffe传递在CPU和GPU之间,Blob也提供同步能力。在数学上,Blob是存储连续的N维数组阵列。

  • Blob使用内存存储:datadiff,前者是前向传播的正常数据,后者是通过网络反向计算的梯度。
  • Blob使用SyncedMem类机制:同步CPU和GPU之间的值,为了隐藏同步的详细信息和尽量最小的数据传输。

不管是Caffe还是现阶段的Caffe2框架都是通过Blobs存储和传输数据。Blobs提供统一的内存接口保存数据,例如,批量图像,model参数,导数的优化。

Blobs隐藏了计算和混合CPU/GPU的操作根据需要从主机CPU到设备GPU进行同步的开销。主机和设备的内存是按需分配。

(2)Layer:Layer是模型(model)的本质和计算的基本单元。Layer卷积滤波、pool、取内积、应用非线性、sigmoid和其它元素转换、归一化、载入数据,计算losses。先阶段Caffe2对于Layer封装的更加明细,对于必要的计算单元都设有operactor文件。

Layer类型的主要作用是:参数配置、正向、反向。

  • 参数配置:初始化这个layer及在model初始化时连接一次;参数大致分为两个类别,层属性和层参数。
  • 正向:从底部对于给定的输入数据计算输出并传送到顶端;
  • 反向:对于给定的梯度,顶端输出计算这个梯度到输入并传送到低端。

(3)Net: 主要作用是定义和操作;每一层输出计算函数来完成给定的任务,每一层反向从学习任务中通过loss计算梯度。Caffe model是终端到终端的机器学习引擎。

Caffe中的Model初始化是通过Net::Init()进行处理。初始化主要工作:

  • 创建Blobs和layers来构建整个有向无环图(DAG)
  • 调用不同Layers的配置函数

(4)Solver: 优化一个model通过首先调用forward得到输出和loss,然后调用backward生成model的梯度,接着合并梯度到权值(weight)更新尽量减少loss。Solver, Net和Layer之间的分工,使Caffe保持模块化和开放式发展。

在Caffe中,Loss是由网络的forward计算。每一个layer采用一组输入Blobs(bottom,表示输入),并产生一组输出Blobs(top,表示输出)。一些Layer的输出可能会用在Loss函数中。对于分类任务,一个典型的Loss函数选择是SoftmaxWithLoss函数。

3.Caffe2框架:

官方介绍Caffe2是一个轻量化和模块化的深度学习框架,在强调轻便性的同时,也保持了可扩展性和计算性能。
Caffe2的特性:

  • Caffe2框架可以通过一台机器上的多个GPU或具有一个及多个GPU的多台机器来进行分布式训练。
  • 也可以在iOS系统、Android系统和树莓派(Raspberry Pi)上训练和部署模型。
  • 只需要运行几行代码即可调用Caffe2中预先训练好的Model Zoo等模型,即加载训练模型。
  • Caffe2框架已经应用在Facebook平台上。
  • NVIDIA(英伟达),Qualcomm(高通),Intel(英特尔),Amazon(亚马逊)和Microsoft(微软)等公司的云平台都已支持Caffe2

Caffe2的计算单元
Operators是Caffe2的基本计算单元,每个Operator包含了给定输入和参数时,计算output所需必要的东西。同时,Caffe2对于不同的operaters的封装性比较好,阅读相关源码可以根据caffe的源码进行类比阅读。Caffe和Caffe2的Operator Functionality对比如下图:
在这里插入图片描述

4.Caffe2和Caffe的区别:

1.擅长移动和大规模部署: 虽然Caffe2新增了支持多GPU的功能,这让新框架与Torch具有了相同的GPU支持能力,但是如前所述,Caffe2支持一台机器上的多个GPU或具有一个及多个GPU的多台机器来进行分布式训练。
2. 侧重工业应用: PyTorch适合进行研究、实验和尝试不同的神经网络;而Caffe2更偏向于工业应用,而且重点关注在移动端上的表现。Caffe2的任务就是提供最佳的性能,而如果想要极端灵活的计算,请选择PyTorch。贾扬清认为这是一个更好的方式,因为“一个框架通吃”可能会影响性能。所以,目前Caffe2只支持非常有限的动态控制,例如动态RNN。
3. 重视移动计算

  1. Caffe2针对ARM CPU进行了优化,拥有超越机载GPU的优势;
  2. 支持Andriod和iOS;
  3. 轻量级和可扩展性强,支持分布式计算。比如Python和C ++ 编写的API编写一次,循环执行;

Facebook发布的广泛流行的PyTorch框架,PyTorch是专为研究建立神经网络和实验而开发的。Caffe2是专为移动生产环境而设计的,可以在各种移动平台上部署大规模数据。

参考链接:
https://www.cnblogs.com/carle-09/p/9033608.html
https://blog.csdn.net/zziahgf/article/details/72461506

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章