《智能系统与技术丛书 深度学习实践:基于Caffe的解析》

举报
华章计算机 发表于 2019/05/31 00:25:20 2019/05/31
【摘要】 本书摘自《智能系统与技术丛书 深度学习实践:基于Caffe的解析》,作者是薛云峰。

智能系统与技术丛书


深度学习实践:基于Caffe的解析

深度学习实践 立.jpg

薛云峰 著


PREFACE

前  言

     为什么要写这本书

       2012年年中,我开始关注深度学习这一领域,当时正好是深度学习浪潮开始爆发的时间,我感到非常幸运的是能在一个对的时间进入该领域,当时的自己也是在不断的试错中学习这一领域的知识。一直以来我都非常希望人工智能能够得到真正的发展,希望技术能够辅助人类解决各种问题,而且人工智能同时又是一门非常有意思的学科,所以我选择了长期投入深度学习这一领域,希望自己也能有所成,但是真正进入这一领域学习的时候才发现想要学好并不是那么顺利。

       我在学习深度学习技术的过程中经历了很多困难,遇到了很多“陷阱”,一路走来跌跌撞撞,当时就想如果深度学习领域也能有相关的入门书籍,讲解深度学习的基础知识就好了,这样新手们就能够快速入手,从主干入手,避开遮住主干的枝叶,从而更快速地进入这一领域。希望本书能够为初学深度学习的程序员提供一个科普入门的指引。在经历了各种繁杂的事情之后,本书的编写也给我带来了不少快乐,使得我有机会系统地总结自己在深度学习领域获得的一些经验和教训,希望这些能给大家带来帮助。本书总结了基础层的数学公式,以及其在 Caffe中的写法,后续还列举了一些我在训练学习过程中遇到的实际问题,例如增加新的层、人脸识别、人物属性的识别等,以及对过去一些工作经验的总结。

       每一种框架都有优有劣,框架不会影响最终的结果,希望大家尽量忽略框架的结构和实现,多多掌握理论部分,在实践中,不断提升自己在这一领域的实战经验和理论知识,框架只是末,理论才是本。

       本书主要是针对初学者入门所编写的一本书,其实最初我也没有想过要写一本书,都是在网络上发表一些博客和文章,不断地对自己的技术和学习进行更新和总结。后来,因为一个偶然的机会,我遇到了本书的策划编辑杨绣国老师(lisa),在她的建议和鼓励下我决定写一本入门级的深度学习教程。本书以一个工程师的视角来观察深度学习技术带给我们的便利,同时我也希望更多的技术工程师能够投入这一领域,也许变革就在明天,纵观人工智能的发展历史,有高潮也有寒冬,很多技术都是经历了多次的起伏变化然后才逐渐趋于成熟,而如今人工智能正在经历第三次的高潮,也许寒冬将至,但是即便如此也并不会影响深度学习技术未来发展的大趋势,相信这一技术会变得像今天的软件开发技术一样成熟。

     读者对象

       根据深度学习的用户目标划分,可以总结出如下几类读者对象。

       深度学习的爱好者和研究者。

       深度学习实践应用工程师。

       深度学习理论研究员。

       对深度学习感兴趣的大学师生。

       开设相关课程的大专院校。

     如何阅读本书

       建议读者在阅读本书时,首先对本书讲解的各个层做一个详细的了解,能够运用开源数据运行一些训练示例,学会如何使用现有的网络结构进行训练,等熟悉了训练步骤之后,再按照本书的内容自行调整网络结构。先使用一个网络,根据本书前10章的内容,分别修改和调整每一种网络层的参数,并学习相关的数学公式,本书第5章到第10章的内容可以不分先后顺序进行阅读,大家可以按照自己的喜好和需求随意选择阅读顺序。本书使用的Caffe框架是几个框架中最基础的一种,代码结构简单,很适合作为C++工程师进行深度学习的入门参考。

       第11章到第14章的内容比较适合入门后的读者在实践操作中理解和应用深度学习技术,每一个系统都是一个庞大的工程,本书只是简略地介绍了需要做的事情,与深度学习关联性不大的技术,本书没有做详细介绍,因此大家需要自行查找对应的内容以进行相应的阅读。第12章的多任务是目前深度学习领域进行创新的基石,希望本书的一些观点能够提供给大家一些指引,目标检测从faster rcnn到ssd都是多任务的处理方式,第14章的内容是我进行深度学习调参的一些经验总结,第一次训练之后,在进行准确度调整的时候大家可以将本章内容作为参考。

     勘误和支持

       由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我特意创建了一个GitHub的仓库,具体网址为:https://github.com/HolidayXue/DeepLearningInAction。大家可以将书中的错误发布在Bug勘误文件夹中,同时如果有遇到任何问题,就请在issue中留言,我将尽量在线上为大家提供最满意的解答。本书中的全部源文件都将发布在这个网站上,我也会将相应的功能更新及时发布出来。如果大家有更多的宝贵意见,也欢迎发送邮件至我的邮箱362783516@qq.com,我很期待听到你们的真挚反馈。

     致谢

       首先,我要感谢中科院计算技术研究所的蒋树强老师,在他的引领下,我进入了深度学习技术这一领域,我对这一领域的很多概念和入门知识都是从他那里获得的;接下来,我要感谢浙江大学李玺教授,在实践过程中,需要进行理论突破的时候,他的指点总是令我犹如醍醐灌顶。

       感谢捷尚视觉的余天明在cuda编程实践中给予我的帮助,感谢捷尚视觉的林国锡在人脸实践应用中对我的指点,感谢捷尚视觉的丁连涛在目标检测中给予我的指点。 

       感谢机械工业出版社华章公司的编辑杨绣国老师,感谢你的魄力和远见,在本书编写期间始终支持我的写作,正是你的鼓励和帮助引导我顺利完成全部书稿。

       感谢每一位深度学习的开发者,大家的共同努力使得让人工智能能够应用在我们的未来生活中,从而使得我们的生活更加美好!

谨以此书,献给深度学习的从业者。


      薛云峰(HolidayXue)

      中国,杭州,2018年6月




CONTENTS

目  录

前言

第1章 深度学习简介  1

1.1 深度学习的历史  1

1.2 深度学习工具简介  4

1.3 深度学习的未来趋势  12

第2章 搭建你的Caffe武器库  13

2.1 硬件选型  13

2.2 Caffe在Windows下的安装  14

2.3 Caffe在Linux下的安装  16

2.3.1 Linux安装  16

2.3.2 Nvidia CUDA Toolkit的安装(*.deb方法)  17

2.3.3 Caffe的安装和测试  20

2.4 OpenCV的安装和编译  23

2.4.1 OpenCV的下载  23

2.4.2 配置环境变量  24

2.5 Boost库的安装和编译  27

2.6 Python相关库的安装  31

2.7 MATLAB接口的配置  33

2.8 其他库的安装  44

2.8.1 LMDB的编译与安装  44

2.8.2 LevelDB的编译与安装  51

2.8.3 glog的编译与安装  57

2.8.4 安装gflags  63

第3章 Caffe的简单训练  69

3.1 Caffe转化数据工具的使用介绍  69

3.1.1 命令参数介绍  69

3.1.2 生成文件列表  70

3.1.3 使用的Linux命令简介  70

3.1.4 生成文件结果  71

3.1.5 图片参数组详解  71

3.2 Caffe提取特征的工具使用说明  72

3.3 Caffe训练需要的几个部件  73

3.3.1 网络proto文件的编写  73

3.3.2 Solver配置  74

3.3.3 训练脚本的编写  76

3.3.4 训练log解析  76

3.4 Caffe简单训练分类任务  79

3.5 测试训练结果  86

3.6 使用训练好的模型进行预测  87

第4章 认识深度学习网络中的层  97

4.1 卷积层的作用与类别  97

4.1.1 卷积层的作用  97

4.1.2 卷积分类  98

4.2 激活层的作用与类别  99

4.2.1 激活函数的定义及相关概念  99

4.2.2 激活函数的类别  101

4.3 池化层的作用与类别  101

4.3.1 池化层的历史  101

4.3.2 池化层的作用  102

4.3.3 池化层分类  103

4.4 全连接层的作用与类别  105

4.5 dropout层的作用  106

4.6 损失函数层  106

第5章 Caffe的框架设计  110

5.1 Caffe中CPU和GPU结构的融合  110

5.1.1 SyncedMemory函数及其功能  110

5.1.2 SyncedMemory类的作用  112

5.2 Caffe训练时层的各个成员函数的调用顺序  112

5.3 Caffe网络构建函数的解析  115

5.4 Caffe层如何使用proto文件实现反射机制  116

5.4.1 工厂模式  116

5.4.2 层的创建  118

5.5 Caffe的调用流程图及函数顺序导视  122

5.6 Caffe框架使用的编码思想  125

5.6.1 Caffe的总体结构  125

5.6.2 Caffe数据存储设计  128

第6章 基础数学知识  130

6.1 卷积层的数学公式及求导  130

6.2 激活层的数学公式图像及求导  132

6.3 三种池化层的数学公式及反向计算  134

6.4 全连接层的数学公式及求导  135

6.4.1 全连接层的前向计算及公式推导  135

6.4.2 全连接层的反向传播及公式推导  136

6.5 反卷积层的数学公式及求导  137

第7章 卷积层和池化层的使用  139

7.1 卷积层参数初始化介绍  139

7.2 池化层的物理意义  141

7.3 卷积层和池化层输出计算及参数说明  141

7.4 实践:在Caffe框架下用Prototxt定义卷积层和池化层  142

7.4.1 卷积层参数的编写  142

7.4.2 必须设置的参数  143

7.4.3 其他可选的设置参数  143

7.4.4 卷积参数编写具体示例  144

7.4.5 卷积参数编写小建议  145

第8章 激活函数的介绍  146

8.1 用ReLU解决sigmoid的缺陷  146

8.2 ReLU及其变种的对比  148

8.3 实践:在Caffe框架下用Prototxt定义激活函数  150

8.3.1 ReLU  150

8.3.2 PReLU  150

8.3.3 Sigmoid  151

第9章 损失函数  152

9.1 contrastive_loss函数和对应层的介绍和使用场景  152

9.2 multinomial_logistic_loss函数和对应层的介绍和使用说明  154

9.3 sigmoid_cross_entropy函数和对应层的介绍和使用说明  155

9.4 softmax_loss函数和对应层的介绍和使用说明  158

9.5 euclidean_loss函数和对应层的介绍和使用说明  161

9.6 hinge_loss函数和对应层的介绍和使用说明  162

9.7 infogain_loss函数和对应层的介绍和使用说明  163

9.8 TripletLoss的添加及其使用  165

9.8.1 TripletLoss的思想  165

9.8.2 TripletLoss梯度推导  166

9.8.3 新增加TripletLossLayer  167

9.9 Coupled Cluster Loss的添加及其使用  176

9.9.1 增加loss层  176

9.9.2 实现具体示例  177

第10章 Batch Normalize层的使用  194

10.1 batch_normalize层的原理和作用  194

10.2 batch_normalize层的优势  196

10.3 常见网络结构batch_normalize层的位置  197

10.4 proto的具体写法  202

10.5 其他归一化层的介绍  204

第11章 回归网络的构建  205

11.1 如何生成回归网络训练数据  205

11.2 回归任务和分类任务的异同点  206

11.3 回归网络收敛性的判断  207

11.4 回归任务与级联模型  210

第12章 多任务网络的构建  214

12.1 多任务历史  214

12.2 多任务网络的数据生成  216

12.3 如何简单建立多任务  216

12.4 近年的多任务深度学习网络  217

12.5 多任务中通用指导性调参和网络构建结论  221

12.5.1 如何避免出现多任务后性能下降的情况  221

12.5.2 怎样构建性能提升的多任务网络  222

第13章 图像检索和人脸识别系统实践  223

13.1 深度学习如何构建成自动化服务,在内存中做测试  223

13.2 Poco库构建服务器指南  234

13.3 深度学习服务和传统服务的区别  237

13.4 深度学习服务如何与传统后台服务进行交互  237

13.5 人脸识别的数据准备和所使用的相关技术  238

13.6 图像检索任务的介绍  243

13.7 在Caffe中添加数据输入层  245

13.7.1 具体示例  246

13.7.2 ImageDataParameter参数含义简介  247

13.7.3 新增加参数的含义简介  248

13.7.4 将新增加的参数加入LayerParameter  248

13.7.5 代码的编写之必写函数  248

13.7.6 用户自定义函数的编写  249

13.7.7 用户自定义数据的读取  250

13.7.8 代码的实现  250

第14章 深度学习的调参技巧总结  265

14.1 不变数据的调参的基本原则  265

14.2 Caffe fine-tuning调参的原则和方法  265

14.3 综合数据调参的指导性建议  267

14.4 2012年以后的经典网络结构概述  271

14.4.1 Google的Inception结构  271

14.4.2 微软的Residual Network结构  279


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。