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

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

Caffe和caffe2漫谈相关推荐

  1. caffe转caffe2

    这个需要同时又caffe和caffe2 https://github.com/Qidian213/mtcnn_caffe2/blob/e1a596d69fd48b4e7063205a2b63ed431 ...

  2. Caffe 与 Caffe2

    Caffe 与 Caffe2 Caffe: - 适用于large-scale product - unparalleled performance - well tested C++ codebase ...

  3. 认识Caffe与Caffe2

    原文链接:https://www.cnblogs.com/carle-09/p/9033608.html 目录: 一.Caffe的作者-贾扬清 二.Caffe简介--Caffe.Caffe2.Caff ...

  4. caffe 以及caffe2 安装时portobuf库相关的编译问题

    安装caffe出现protobuf版本问题,是由于anaconda安装了不同的protobuf版本 pip show protoc protoc –version sudo apt-get insta ...

  5. caffe和caffe2的区别

    前几天 facebook 开源的 caffe2,让我们在深度学习框架上又多了一个选择.caffe2 宣称是轻量级.模块化和可扩展的一个框架,code once,run anywhere.作为一个老 c ...

  6. caffe,caffe2 and pytorch

    1 Difference caffe and caffe2 Caffe2 improves Caffe 1.0 in a series of directions: 支持大规模分布式训练 移动平台的部 ...

  7. pycharm中import caffe/caffe2

    在terminal中import caffe/caffe2都是没问题的,但是在pycharm中如果直接import caffe/caffe2,会报错ImportError: No module nam ...

  8. 【Python】Caffe 模型转换 Caffe2 模型 (支持多输入 / 多输出)

    Model Translator from Caffe to Caffe2 用于将 Caffe 模型转换为对应 Caffe2 模型的 Python 脚本 官方提供了一个基础版本,经修改和优化后,已支持 ...

  9. Ubuntu16.04下caffe CPU版的详细安装步骤

    一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...

最新文章

  1. mysql duplicate jpa_SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码
  2. 用脚本实现“修复连接”的功能
  3. mysql两个表条件_mysql – 在另一个表中选择具有多个条件的...
  4. Java内存溢出详解
  5. Qt / 模态对话框的实现
  6. SpringBootController控制层接收参数的几种常用方式
  7. UE3 光照 阴影
  8. java随机抽样算法_随机抽样一致性(RANSAC)算法详解
  9. NSArray 数组
  10. Blockchain -Corda框架研究一 sendfile-Attachments学习笔记
  11. 计算机图书管理系统测试用例,图书馆管理系统测试用例表
  12. 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
  13. (转载)北上广深房价只会涨不会降
  14. Linux下date和touch用法
  15. java 反射基础_Java反射的基本使
  16. Jeff Atwood倾情推荐——程序员必读之书 (zz)
  17. PD 关于tso 分配源代码分析
  18. Android屏幕截图实现
  19. NAO机器人高尔夫中的视觉系统设计
  20. idea maven无法从私服下载jar和plugin

热门文章

  1. 【JVM调优工具】JVM调优工具
  2. 百度的智能对话定制与服务平台UNIT,图形化对话流管理(复杂对话)
  3. 修改本地hosts的方法
  4. 高数笔记(三):函数的连续性和间断性,闭区间上连续函数的性质
  5. 李艾30场直播数据全解析,挖掘直播高转化技巧
  6. jqgrid setCell 单元格赋值空字符串 无效处理
  7. threejs-经纬度转换成xyz坐标的方法
  8. 什么软件可以将win窗口进行置顶_电脑极简指南,这5个方法可以帮你节约生命...
  9. 怎么把PPT批量变成图片?
  10. 基于FPGA的数字钟(四)——时钟控制模块