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使用内存存储:data和diff,前者是前向传播的正常数据,后者是通过网络反向计算的梯度。
- 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. 重视移动计算:
- Caffe2针对ARM CPU进行了优化,拥有超越机载GPU的优势;
- 支持Andriod和iOS;
- 轻量级和可扩展性强,支持分布式计算。比如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漫谈相关推荐
- caffe转caffe2
这个需要同时又caffe和caffe2 https://github.com/Qidian213/mtcnn_caffe2/blob/e1a596d69fd48b4e7063205a2b63ed431 ...
- Caffe 与 Caffe2
Caffe 与 Caffe2 Caffe: - 适用于large-scale product - unparalleled performance - well tested C++ codebase ...
- 认识Caffe与Caffe2
原文链接:https://www.cnblogs.com/carle-09/p/9033608.html 目录: 一.Caffe的作者-贾扬清 二.Caffe简介--Caffe.Caffe2.Caff ...
- caffe 以及caffe2 安装时portobuf库相关的编译问题
安装caffe出现protobuf版本问题,是由于anaconda安装了不同的protobuf版本 pip show protoc protoc –version sudo apt-get insta ...
- caffe和caffe2的区别
前几天 facebook 开源的 caffe2,让我们在深度学习框架上又多了一个选择.caffe2 宣称是轻量级.模块化和可扩展的一个框架,code once,run anywhere.作为一个老 c ...
- caffe,caffe2 and pytorch
1 Difference caffe and caffe2 Caffe2 improves Caffe 1.0 in a series of directions: 支持大规模分布式训练 移动平台的部 ...
- pycharm中import caffe/caffe2
在terminal中import caffe/caffe2都是没问题的,但是在pycharm中如果直接import caffe/caffe2,会报错ImportError: No module nam ...
- 【Python】Caffe 模型转换 Caffe2 模型 (支持多输入 / 多输出)
Model Translator from Caffe to Caffe2 用于将 Caffe 模型转换为对应 Caffe2 模型的 Python 脚本 官方提供了一个基础版本,经修改和优化后,已支持 ...
- Ubuntu16.04下caffe CPU版的详细安装步骤
一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...
最新文章
- mysql duplicate jpa_SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码
- 用脚本实现“修复连接”的功能
- mysql两个表条件_mysql – 在另一个表中选择具有多个条件的...
- Java内存溢出详解
- Qt / 模态对话框的实现
- SpringBootController控制层接收参数的几种常用方式
- UE3 光照 阴影
- java随机抽样算法_随机抽样一致性(RANSAC)算法详解
- NSArray	数组
- Blockchain -Corda框架研究一 sendfile-Attachments学习笔记
- 计算机图书管理系统测试用例,图书馆管理系统测试用例表
- 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
- (转载)北上广深房价只会涨不会降
- Linux下date和touch用法
- java 反射基础_Java反射的基本使
- Jeff Atwood倾情推荐——程序员必读之书 (zz)
- PD 关于tso 分配源代码分析
- Android屏幕截图实现
- NAO机器人高尔夫中的视觉系统设计
- idea maven无法从私服下载jar和plugin