版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 控制科学前沿技术讲座结课论文 1 深度学习之深度学习之 caffecaffe 框架的认知与理解框架的认知与理解 许楠 (电气工程与自动化学院 控制科学与工程 学号:6120160149) 摘要:摘要: 通过对深度学习框架 Caffe 基本认识来了解深度学习的基本概念, 明白 Caffe 的工作 原理和基本结构以及各结构部分的主要功能,熟悉 C+代码。 关键词:关键词:框架,Caffe,结构,C+ Deep learning of the caffe framework of cognition and understanding Xu Nan (School of Electrical En
2、gineering and Automation Control Science and Engineering student ID: 6120160149) Abstract: Through the basic understanding of the depth of learning framework Caffe to understand the basic concepts of deep learning, understand Caffes working principle and basic structure and the main part of the stru
3、cture of the main functions, familiar with C + + code. Key words: frame,Caffe, structure,C+ 0 引言引言 近年来, 人工智能从初步探索到逐步应用到我们身边的民用生活领域, 可谓是热度不减。 而且大有愈演愈烈之势。 众多的学术专家投身于人工智能领域的研究工作, 随之也产生了一 大批的学科泰斗,为我们智能化发展构建了一个清晰的发展脉络与前景。 而深度学习是人工智能方面一个新的领域, 在智能识别和机器视觉方面具有良好的应用 效果,且必定会有广阔的应用前景。深度学习作为机器学习的一个分支,具有传统图像处理 而无
4、法达到的分类准确率, 在大数据的现实社会背景下, 能够将成千上万的检测目标清晰准 确的区分开来, 这种超强的学习能力将机器学习又推向了一个新的高度。 深度学习产生于对 于神经网络的分析, 通过构建多隐层人工神经网络, 达到有监督或者无监督学习的深层学习 效果。之所以命名为深度学习,是相对于传统机器学习的浅度学习而言的。因为传统的人工 神经网络,大部只包含输入层和输出层两层,至多有一层中间层。而深度神经网络,则通过 将中间层构建为多层,包括卷积层、池化层、全连接层等多隐层加强机器的学习是能力,各 种实验结果表明,在构建合适的层之后,学习能力将会大幅度的提高。 Caffe 框架是一个被广泛使用的开
5、源深度学习框架(在 TensorFlow 出现之前一直是深度 学习领域 GitHub star 最多的项目) 。 他由加州大学伯克利分校的贾扬清教授团队创建, 专门 用来进行深度学习模型训练并测试的一种学习框架, 它在当前的主流深度学习框架中具有一 些无法比拟的优势。但近年来,随着 Google 投入开发和其拥有的强大财团和人才团队的支 持创建的 Tensorflow 深度学习框架的强势冲击下,用户数量有下降的趋势。但相对于 Tensorflow 来说,Caffe 还是拥有其独特的优势,比如其容易上手,网络结构都是以配置文 件形式定义,不需要用代码设计网络;训练速度快,能够训练 state-o
6、f-the-art 的模型与大规 控制科学前沿技术讲座结课论文 2 模的数据;1组件模块化,可以方便地拓展到新的模型和学习任务上等优势。Caffe 非常适 合深度学习初学者的入门,上手快,容易构建训练网络,这也是其老用户钟爱的不舍放手的 重要方面。 本篇文章就是对于像我一样的深度学习初学者对于学习工具的简单认识与了解记录并 分析。探讨其中的奥妙和神奇之处, 寻找其中的不足与解决的难点。为我们今后更加深入 的学习提供一个较好的认知基础。 1 初识初识 Caffe 在引言中我们知道了Caffe的主要作用是用来训练和测试深度学习神经网络的一个工具 以及它所具有的各种优势,那么我们再来了解它的主要结构
7、。Caffe 是用 C+边写的深度学 习框架,大量使用了类封装、继承、多态,所以也可以用来学习 C+语言特性。Caffe 类数 目众多,但通过面向编程(OOP)方式组织的很好2。Caffe 可以在我们大众熟悉的 windows 系统下配置,也可以在编程开发人员常用的 linux 系统下完成配置,当然我们如果想要深入 的学习深度学习,并将其当成自身的事业来讲,建议还是用 linux 系统配置,因为其开发者 就是针对 linux 系统来开发的,windows 系统后来才开放,且某些地方不够完善,如果学者 只是用来简单了解或是作为研究内容的一项了解则利用 windows 也可。本文针对的是 ubun
8、tu14.04(linux 的一种)系统下的 Caffe 来讲述。 我们先来简单的了解一下 ubuntu 系统。是一个以桌面应用为主的开源 GNU/Linux 操作 系统,Ubuntu 是基于 DebianGNU/Linux,支持 x86、amd64(即 x64)和 ppc 架构,由全球 化的专业开发团队(Canonical Ltd)打造的。Ubuntu 基于 Debian 发行版和 GNOME 桌面环 境,而从 11.04 版起,Ubuntu 发行版放弃了 Gnome 桌面环境,改为 Unity,与 Debian 的不 同在于它每 6 个月会发布一个新版本。Ubuntu 的目标在于为一般用户
9、提供一个最新的、同 时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu 具有庞大的社区力量,用户 可以方便地从社区获得帮助3. 。Ubuntu 对 GNU/Linux 的普及特别是桌面普及作出了巨大贡 献,由此使更多人共享开源的成果与精彩3。读者可自行在 ubuntu 官网下载所需要的系统 版本并自行安装且完全开源免费。如图 1-1 为 ubuntu14.04 版系统主见面。 1 1赵永科深度学习-21 天实战 caffeM北京:电子工业出版社,2016:83-170 2 2三名狂客主流深度学习框架对比 3 3百度百科Ubuntu 百度词条 Nr9mBGkLIZV3OHfi4k2vq
10、yPXMsOsuDa,20170620 控制科学前沿技术讲座结课论文 3 图 1-1 ubuntu14.04 系统主界面图 Ubuntu 系统的主要命令通过终端来执行(如图 1-2 为终端命令窗口图) ,我们的 Caffe 框架配置在 ubuntu 主文件夹下。具体配置方法不做阐述,在网上的论坛博客有无数的资源 可供读者参阅。如图 1-3 为 caffe 在主文件夹下面的位置(其他还有一些配置 caffe 所需要的 依赖库文件夹,如 opencv、glog、boost 等) 。 图 1-2 终端命令窗口 控制科学前沿技术讲座结课论文 4 图 1-3 caffe 在主文件夹下的位置 我们用终端在
11、 caffe 的根目录下执行 tree 命令就可以以树状图的方式清晰的看到 caffe 所包含的各个结构,包括每个文件夹的位置,每个文件夹所包含的文件,如图 1-4 tree 命令 示意图。在命令结果中我们可以发现 caffe 中包括的文件有 cmake、data、distribute、build 等文件夹。 图 1-4 tree 在 caffe 根目录下的命令 2 熟悉熟悉 caffe 的主要内容的主要内容 在前面一节中, 我们对 caffe 有了一个很简单的认识, 本节则主要讲述的是 caffe 各个子 文件的内容及其作用。下面罗列了 caffe 框架所包含的主要内容及其作用,如表 2-1
12、 所示1 (二级子文件的具体内容不做详解,请读者自行查阅资料了解) 。 表 2-1 caffe 子文件夹及其作用 子文件夹 作用 build 编译结果的存放处,子目录结构与主目录类似 控制科学前沿技术讲座结课论文 5 cmake 使用 CMake 编译时使用 data 用于存放原始数据及数据获取脚本 distribute 编译后生成发布包的位置,用于迁移 docker 同样是为了便于迁移,使用了 Docker 工具 docs doxygen 工程文件放在此处,这里可生成 Caffe ref_man.pdf examples 存放着 caffe 的简单例程 include Caffe 头文件集中
13、存放于这个目录 matlab 使用于 Matlab 做 Wrapper models 存放示例模型 Python 用于 Python Wrapper scripts 存放脚本 src Caffe 源码 tools 常用工具的源码 这其中,我们想要了解 caffe 工作的具体原理,那么最重要的就是要阅读 caffe 的源码, 庆幸的是 caffe 源码完全开源, 读者能够仔细的阅读每一条源码。 源码的位置位于 caffe 文件 夹下 src 文件夹。而阅读源码的路线最好是从 src/caffe/proto/to 文件开始,了解基本 数据结构内存对象和磁盘文件的一一映射关系。而第
14、二步就是看头文件,也就是 include 文 件夹下的文件,通过头文件类声明理解整个框架,掌握这些类的使用方法。之后就是有正对 性的去阅读 cpp 和 cu 文件。 因为 caffe 的开放性,学习者可以根据自己的不同需求根据规则来改动或者创造我们所 需要的不同文件来实现目标。例如假如使用了新的卷积算法,需要自己实现相应的 ConvolutionLayer,我们可以只需从框架中已有的 ConvolutionLayer 来派生一个新类 MyConvolutionLayer,然后将前向传播计算、反向传播计算按自己的算法实现即可。 在模型学习中,学习者可以编写各类工具,集成到 caffe 内部。在
15、tools 文件夹下有很多 的实用工具(如训练模型、测试模型、特征提取、转换数据格式等) ,可以根据需要修改。 另外,也可以学习用 Python 或 Mtlab 包装 caffe 的方法,便于调节模型训练效果4。 3 Caffe 数据结构数据结构 在 caffe 中的每一个网络模型使用 Net 表示,而 Net 又是由多个 Layer 堆叠而成的,如 图 3-1 所示。 4 4 Firas Abuzaid,Stefan Hadjis,et al.Caffe con Troll:Shallow Ideas to Speed Up Deep learningJ.Statisti-cs.2015.1
16、 控制科学前沿技术讲座结课论文 6 SoftmaxLossLayer fc1 InnerProductLayer W X y DataLayer data diffs diffs datadata diffs data diffs 图 3-1 Caffe 数据结构 3.1 Blob 的了解的了解 Caffe 中的网络 Net 是按照我们的设计文件来搭建的, 而这些搭建的个体又是 Layer, 构 成 Layer 的就是 Blob。Caffe 使用称为 Blob 的 4 维数组用于存储和交换数据。Blob 提供了 统一的存储器接口,持有一批图像或其他数据、权值、权值更新值。 Blob 在内存中表
17、示四维数组,维度从低到高为(width_,height_,channels_,num_) , 其中,width_和 height_表示图像的宽和高,channels_表示颜色通道 RGB,num_biaoshi 第几 帧,用于存储数据或权值(data)和权值更新值(diff) ,在进行网络计算时,每层的输入、 输出都需要通过 Blob 对象缓冲, Blob 是 caffe 的基本存储单元, 我们可以在 to 文件 中查看其数据结构的具体描述,在 include/caffe/blob.hpp 文件中查看其声明,在 src/caffe/blob.cpp 文件中查看其具体的实现过程
18、,通过这些一系列的阅读我们可以清晰的发 现 blob 的具体实现过程5。 3.2 Layer 的解释的解释 Layer 是 caffe 基本的计算单元,至少有一个输入 Blob(Bottom Blob)和一个输出 Blob (Top Blob) ,部分 Layer 带有权值(Weight)和偏置项(Bias) ,有两个运算方向:前向传 播(Forward)和反向传播(Backward) ,其中前向传播计算会对输入的 Blob 进行某种处理 5 5 Christoph Wick.Deep LearningJ.Informatik-Spektrum.207,Vol.1-40.103-107 控制科
19、学前沿技术讲座结课论文 7 (有权值和偏值项的 Layer 会利用这些输入进行处理) ,得到输出 Blob;而反向传播计算则 对输出 Blob 的 diff 进行某种处理,得到输入 Blob 的 diff(有权值和偏置项的 Layer 可能也 会计算权值 Blob、偏置项 Blob 的 diff) 。 总的来说,就是前向传播对最终输出的 data 负责,而根据计算的理论 data 和实际 data 之间的差值得到输出 diff,然后利用反向传播得到输入的 diff。即前向传播负责计算,反向 传播负责参数的更新。同样的我们可以在 to 文件中查看 Layer 的结构描述,在 i
20、nclude/caffe/layer.hpp 文件中查看 Layer 声明, 在 src/caffe/layer.cpp 文件中查看 Layer 的实现 过程。通过相关的源码阅读我们可以清晰的明白 layer 的构建过程6。 3.3 Net 的构建的构建 Net 在 caffe 中代表一个完整的模型,它包含若干个相关的 Layer,它的实体就是后缀 为.prototxt 的文件,该文件用来描述一些网络结构包括他人构建的或者自己构建的,这些结 构反应在 caffe 代码实现上就是一个 Net 对象。我们在 to 文件中可以发现 Net 的描 述,看似 proto 很短,而实际上
21、对应的真实网络 prototxt 可以很长很长,关键在于可重复多 次出现的 LayerParameter layer 这个字段。其他字段的功能基本上都是辅助网络运行的,在 代码中可以看到更多的细节。 如果我们将 Blob 比作 caffe 的砖石,Layer 比作 caffe 的墙面,那么 Net 更像是工匠手中 的图纸,描述了每个墙面应当出现的位置,这样设计的房屋才足够牢固、抗震。同样的我们 在 include/caffe/net.hpp 中可以看到关于 net 的声明,在 src/caffe/net.cpp 文件中可以看到 net 的具体实现过程。 3.4 总结总结 通过对 caffe 数
22、据结构的相关学习之后, 我们可以发现 Blob 提供了数据容器的机制; 而 Layer 则通过不同的策略使用该数据容器,实现多元化的计算处理过程,同事又提供了深度 学习的各种基本算法(卷积、下采样、损失函数计算等)的机制;Net 则利用 Layer 这些机 制,组合成为完整的深度学习模型,提供了更加丰富的学习策略。 4 Caffe 的的 I/O 模块模块 我们知道 caffe 是训练深度学习模型的一个工具框架,而这绝对就离不开对于数据的读 取,在 caffe 中对数据的读取由数据读取层(DataLayer)来实现。而 DataLayer 其实是 Layer 的一个派生类,其根本上是属于 Lay
23、er 的。值得注意的是,caffe 中对于数据的读取并不是 直接读取训练或测试数据,而是要将成千上万的训练或测试数据转化为 lmdb 文件格式来进 行文件的读取。声明和实现代码我们可以在 to 文件、include/caffe/data_layers.hpp 文 件和 src/caffe/layers/base_data_layer.cpp 文件这几类中得到解释和学习78。 除了数据的读取外,I/O 模块还包括数据的变换,即由数据变换器来完成。Caffe 的数据 变换器主要提供了对原始书如图像的预处理方法,包括随机切块、随机镜像、幅度缩放、去 均值、灰度/色度变换等。同样的我
24、们在 to、include/caffe/data_transformer.hpp 以及 src/caffe/data_transformer.cpp 文件中得到声明和实现。 5 结论与展望结论与展望 通过前面几节的讲述, 我们从 caffe 的作用到结构再到实现, 对 caffe 有了一个简单的基 6 6 Yangqing Jia,Evan Shelhamer,et al.Caffe:Convolutional Architecturefor Fast Feature EmbeddingA.2014 7 7 S Bahrampour,N Ramakrishnan,et al.
25、COMPARATIVE STUDY OF CAFFE,NEON,THENO,AND TORCH FOR DEEP DEEP LEARNINGJ.2015:3-6 8 8王茜,张海仙深度学习框架 Caffe 在图像分类中的应用J现代计算机,2016,02 中:73-75 控制科学前沿技术讲座结课论文 8 本了解, 明白了 caffe 框架实现深度学习模型所必须的基本内容。 也对 caffe 相对于其它深度 学习框架的优点进行了简单的汇总。事实上,caffe 在深度学习领域的应用上还是占有相当 大的比重, 其成熟的代码和强大的更新维护团队仍然是值得我们去探索学习的主流学习框架。 本篇文章只是对 c
26、affe 框架的内部结构做了分析和介绍, 而如何利用 caffe 框架完成一个 深度学习训练项目由于精力和水平所限未能有细致的介绍, 下面就用一个简单的结构图举例 来介绍 caffe 实现一个模型训练实例的完整过程。我们以作者之前写过的研究生创新项目报 告中 CNN 深度学习神经网络基于深度学习的脐橙病变叶面检测为例,如图 5-1 为其实 现流程图9。 病变叶面 图片输入 图片预处理 (归一化) 生成lmdb 数据集 构建CNN 网络 训练模型 模型 待检测 叶面图片 图片预处理 (归一化) 结果 图 5-1 CNN 实例图 在深度学习的研究成果如雨后春笋般迸发的今天, 我们赶上时代的潮流去投
27、身与人工智能的 伟大事业洪流之中,需要我们不断的去接受新型事物,在各大科技巨头的轮番竞争中,我们 不知道具有先发优势的 caffe 能够在这科技洪流中存在多久,但是目前,他仍然是我们从事 深度学习研究的优秀入门学习工具之一,相对于其他框架来说难度较小。同时,caffe 开发 团队也对其进行不断的优化改进, 能够更好的进行人机交流, 并且开发出了更进一步的版本 Caffe2。 Caffe2 中优化了 caffe 的依赖问题,使得利用依赖包优化更加和谐;细化了 Net 的组成 方式,对 Caffe 中 Net 的构建方式更加的细化,使之多平台的支持变得更加容易;caffe2 中 把 caffe 中的 Blob 进行扩展,支持了更多的类型,这就让 Binary Net 和模型的量化压缩变 9 9许楠
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳体育学院《形式逻辑》2025-2026学年期末试卷
- 沈阳北软信息职业技术学院《基础日语》2025-2026学年期末试卷
- 上海戏剧学院《逻辑学》2025-2026学年期末试卷
- 上海外国语大学《工程电磁场》2025-2026学年期末试卷
- 2026中国能建中电工程中南院春季校园招聘8人备考题库及答案详解【典优】
- 2026广东佛山市顺德区大良外国语学校招聘校医1人备考题库及答案详解【名师系列】
- 2026湖北武汉市第三医院骨干人才及成熟型人才招聘备考题库及答案详解(新)
- 2026上半年北京事业单位统考市经济和信息化局招聘6人备考题库及答案详解(历年真题)
- 2026浙江丽水市松阳县事业单位招聘39人备考题库附参考答案详解(巩固)
- 2026四川成都市第二十五幼儿园储备教职工招聘备考题库附参考答案详解【b卷】
- 建筑给排水计算书(范本)
- 中国葡萄酒产区和企业-9
- 供应商声明书(REACH)
- 库房的管理制度
- GB/T 9797-2022金属及其他无机覆盖层镍、镍+铬、铜+镍和铜+镍+铬电镀层
- LY/T 1369-2011次加工原木
- GB/T 8642-2002热喷涂抗拉结合强度的测定
- GB/T 35010.3-2018半导体芯片产品第3部分:操作、包装和贮存指南
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- 毫秒脉冲星及X-射线双星某些重要性质的理论解释课件
- 统编版下册《青蒿素:人类征服疾病的一小步》课件
评论
0/150
提交评论