新書推薦:
《
RDI人际关系发展疗法:修复孤独症核心障碍,让干预回归生活
》
售價:HK$
99.7
《
金融科技监管的目标、原则和实践:全球视野下加密货币的监管
》
售價:HK$
110.9
《
城市轨道交通绿色低碳规划设计研究——深圳地铁6号线工程创新与实践
》
售價:HK$
221.8
《
艾尔米塔什国家博物馆 少年游学 人一生一定要看的博物馆
》
售價:HK$
38.1
《
世界四大博物馆4册套装 卢浮宫大英大都会艾尔米塔什博物馆 青少年游学艺术参观科普书
》
售價:HK$
152.3
《
艺术家之路 塑造插画风格
》
售價:HK$
166.8
《
古乐钩沉(中国音乐学院60周年校庆中青年学者文集)
》
售價:HK$
132.2
《
我和抑郁症的3000天
》
售價:HK$
66.1
|
編輯推薦: |
移动端部署神经网络稀缺资源:ARM汇编|NEON指令|Winograd等实战经验。
深入移动计算设备体系结构的PaddlePaddle移动深度学习系统Paddle-Lite。
将深度学习模型以zui小体积和资源消耗运行在移动设备上,同时追求极致性能。
商业场景中克服技术挑战如模型压缩|编译裁剪|代码精简|多平台支持|汇编优化。
覆盖移动设备内部结构|汇编指令|CPU性能优化|GPU编程|移动端深度学习框架。
底层框架|上层应用开发双重视角,从应用需求到底层技术优化,再到产品落地。
|
內容簡介: |
《移动深度学习》由浅入深地介绍了如何将深度学习技术应用到移动端运算领域,书中尽量避免罗列公式,尝试用浅显的语言和几何图形去解释相关内容。本书第1章展示了在移动端应用深度学习技术的Demo,帮助读者建立直观的认识;第2章至第4章讲述了如何在移动端项目中应用深度学习技术;第5章至第8章的难度略大,主要讲述如何深入地调整框架,适配并定制自己的框架。
《移动深度学习》适合移动端研发工程师阅读,也适合所有对移动端运算领域感兴趣的朋友阅读。
|
關於作者: |
李永会
百度App移动研发部资深工程师。2015年起在百度从事图像搜索和语音搜索客户端研发工作,主持了多个重要创新项目,包括百度Lens、实时翻译等。同时负责开源移动端深度学习框架Paddle-Lite的开发,长期从事移动端AI高性能计算优化工作,在多种软硬件平台上高性能运行深度学习技术。在工作之余有读史、书法等爱好。
|
目錄:
|
第1章初窥移动端深度学习技术的应用1
1.1本书示例代码简介1
1.1.1安装编译好的文件1
1.1.2在DemoApp中应用神经网络技术2
1.2移动端主体检测和分类2
1.3在线上产品中以云 端计算的方式应用深度学习技术4
1.4在移动端应用深度学习技术的业界案例6
1.4.1植物花卉识别6
1.4.2奇妙的风格化效果7
1.4.3视频主体检测技术在App中的应用7
1.5在移动端应用深度学习技术的难点8
1.5.1在服务器端和移动端应用深度学习技术的难点对比8
1.5.2实现AR实时翻译功能9
1.6编译运行深度学习App12
1.6.1mobile-deep-learning项目环境简介12
1.6.2mobile-deep-learning项目整体代码结构13
1.6.3mobile-deep-learning通用环境依赖14
1.7在iOS平台上搭建深度学习框架15
1.7.1在iOS平台上搭建mobile-deep-learning项目15
1.7.2在OSX平台上编译mobile-deep-learning项目16
1.7.3iOS平台上mobile-deep-learning项目的Demo代码结构17
1.8在Android平台上搭建深度学习框架18
1.8.1Android平台上mobile-deep-learning项目的环境依赖18
1.8.2Android平台上mobile-deep-learning项目的Demo代码结构19
1.8.3用Paddle-Lite框架编译与开发Android应用20
1.8.4开发一个基于移动端深度学习框架的AndroidApp22
第2章以几何方式理解线性代数基础知识32
2.1线性代数基础32
2.1.1标准平面直角坐标系32
2.1.2改变坐标系的基向量34
2.2向量的几何意义35
2.2.1向量的加减运算36
2.2.2向量的数乘运算37
2.3线性组合的几何意义38
2.4线性空间40
2.5矩阵和变换41
2.6矩阵乘法43
2.7行列式46
2.8矩阵的逆48
2.9秩49
2.10零空间50
2.11点积和叉积的几何表示与含义51
2.11.1点积的几何意义51
2.11.2叉积的几何意义52
2.12线性代数的特征概念53
2.13抽象向量空间54
第3章什么是机器学习和卷积神经网络56
3.1移动端机器学习的全过程56
3.2预测过程57
3.3数学表达59
3.3.1预测过程涉及的数学公式59
3.3.2训练过程涉及的数学公式60
3.4神经元和神经网络61
3.4.1神经元61
3.4.2神经网络63
3.5卷积神经网络63
3.6图像卷积效果65
3.6.1从全局了解视觉相关的神经网络65
3.6.2卷积核和矩阵乘法的关系66
3.6.3多通道卷积核的应用69
3.7卷积后的图片效果70
3.8卷积相关的两个重要概念:padding和stride75
3.8.1让卷积核出界:padding75
3.8.2让卷积核跳跃:stride75
3.9卷积后的降维操作:池化76
3.10卷积的重要性77
第4章移动端常见网络结构78
4.1早期的卷积神经网络78
4.2AlexNet网络结构79
4.3GoogLeNet网络结构79
4.3.1模型体积问题80
4.3.2计算量问题80
4.4尝试在App中运行GoogLeNet81
4.4.1将32位float参数转化为8位int参数以降低传输量82
4.4.2将CPU版本服务器端框架移植到移动端83
4.4.3应用在产品中的效果84
4.5轻量化模型SqueezeNet85
4.5.1SqueezeNet的优化策略85
4.5.2fire模块86
4.5.3SqueezeNet的全局86
4.6轻量高性能的MobileNet88
4.6.1什么是深度可分离卷积(DepthwiseSeparableConvolution)88
4.6.2MobileNetv1网络结构89
4.6.3MobileNetv2网络结构91
4.7移动端神经网络模型的优化方向92
第5章ARMCPU组成94
5.1现代计算机与ARMCPU架构的现状94
5.1.1冯诺依曼计算机的基本结构94
5.1.2移动计算设备的分工96
5.2简单的CPU模型98
5.2.1取指过程98
5.2.2译码过程99
5.2.3执行过程100
5.2.4回写过程101
5.2.5细化分工:流水线技术102
5.3汇编指令初探102
5.3.1汇编语言程序的第一行102
5.3.2这些指令是什么105
5.4汇编指令概况106
5.4.1ARMCPU家族106
5.4.2ARMv7-A处理器架构107
5.4.3ARMv7汇编指令介绍109
5.5ARM指令集架构111
5.6ARM手机芯片的现状与格局113
第6章存储金字塔与ARM汇编115
6.1ARMCPU的完整结构115
6.2存储设备的金字塔结构117
6.3ARM芯片的缓存设计原理119
6.3.1缓存的基本理解119
6.3.2简单的缓存映射结构:直接映射121
6.3.3灵活高效的缓存结构:组相联映射123
6.3.4利用一个简单的公式优化访存性能125
6.4ARM汇编知识126
6.4.1ARM汇编数据类型和寄存器127
6.4.2ARM指令集130
6.4.3ARM汇编的内存操作131
6.5NEON汇编指令133
6.5.1NEON寄存器与指令类型134
6.5.2NEON存储操作指令135
6.5.3NEON通用数据操作指令137
6.5.4NEON通用算术操作指令138
6.5.5NEON乘法指令139
6.5.6运用NEON指令计算矩阵乘法140
第7章移动端CPU预测性能优化142
7.1工具及体积优化142
7.1.1工具使用143
7.1.2模型体积优化148
7.1.3深度学习库文件体积优化149
7.2CPU高性能通用优化150
7.2.1编译选项优化150
7.2.2内存性能和耗电量优化151
7.2.3循环展开153
7.2.4并行优化与流水线重排154
7.3卷积性能优化方式157
7.3.1滑窗卷积和GEMM性能对比157
7.3.2基于Winograd算法进行卷积性能优化160
7.3.3快速傅里叶变换162
7.3.4卷积计算基本优化163
7.4开发问题与经验总结164
第8章移动端GPU编程及深度学习框架落地实践166
8.1异构计算编程框架OpenCL166
8.1.1开发移动端GPU应用程序167
8.1.2OpenCL中的一些概念168
8.2移动端视觉搜索研发169
8.2.1初次探索移动端AI能力170
8.2.2取消拍照按钮,提升视觉搜索体验171
8.2.3使用深度学习技术提速视觉搜索172
8.2.4通过AI工程技术提升视觉搜索体验174
8.3解决历史问题:研发Paddle-Lite框架176
8.3.1体积压缩178
8.3.2工程结构编码前重新设计178
8.3.3视觉搜索的高级形态:实时视频流式搜索184
|
內容試閱:
|
前言
深度学习技术在近两年飞速发展,对互联网的诸多方面产生了影响。各种互联网产品都争相应用深度学习技术,这将进一步影响人们的生活。随着移动设备被广泛使用,在移动互联网产品中应用深度学习和神经网络技术已经成为必然趋势。
一直以来,由于技术门槛和硬件条件的限制,在移动端应用深度学习的成功案例不多。传统移动端UI工程师在编写神经网络代码时,可以查阅的移动端深度学习资料也很少。而另一方面,时下的互联网竞争又颇为激烈,率先将深度学习技术在移动端应用起来,可以取得先发制人的优势。
移动端设备的运算能力比PC端弱很多。移动端的CPU要将功耗指标维持在很低的水平,这就给性能指标的提升带来了限制。在App中做神经网络运算,会使CPU的运算量猛增。如何协调好用户功耗指标和性能指标就显得至关重要。另外,App的体积限制也是重大考验,如果为了让用户体验一个深度学习功能而要求其下载200MB甚至更大的模型文件,想必用户是不会愉快接受的。这些都是在移动端应用深度学习技术必须解决的问题。
笔者从2015年开始尝试将深度学习技术应用在移动端,在这个过程中遇到的很多问题是关于性能和功耗的,这些问题最终被逐一解决。现在相关项目代码已经在很多App上运行,这些App有日PV达亿级的产品,也有创业期的产品。2017年9月,笔者所带领的团队在GitHub上开源了该项目的全部代码及脚本,项目名称是mobile-deep-learning,希望它在社区的带动下能够得到更好的发展。本书也是以该项目的代码作为示例进行讲解的。
我们已经在多个重要会议上分享了该方向的成果,听众非常感兴趣,会后和我们讨论了很多问题,我也感觉到这些成果值得分享给更多人,于是产生了撰写本书的想法。
目前,国内外已经有很多关于深度学习的书籍,其中一些对算法的讲述非常精辟且有深度。然而这些书籍基本上都是介绍如何在服务器端使用深度学习技术的,针对在移动端应用深度学习技术的书籍还相对较少。
本书内容
本书力求系统而全面地描绘移动端深度学习技术的实践细节和全景,对iOS和Android两个平台的神经网络实践都会详细讲述。需求不同的读者可以根据自己的情况有重点地阅读。精妙的算法必须加上良好的工业实现,才能给用户提供极致的体验,本书以代码实现为主线讲述工程实践,由浅入深,逐步增加难度,最终会将体系结构和汇编知识应用到实践案例中。
这里需要说明两点:
l笔者将书中出现的Paddle-Lite代码压缩并放到了博文视点的官网,读者可以扫描读者服务中的二维码查看。如果想体验最新版本的Paddle-Lite,可以直接到GitHub上搜索查看。
l笔者将书中的链接列在表格中并放在了博文视点的官网,读者同样可以扫描读者服务中的二维码查看表格,并点击其中的链接直接访问。
本书可以作为移动端研发工程师的前沿读物,读者阅读本书后,完全可以将所学知识应用到自己的产品中去;同时本书也适合对移动端运算领域感兴趣的朋友阅读。
致谢
特别感谢我的同事在本书编写过程中提供的巨大帮助,由于本书涉猎的技术方向较广从体系结构到框架程序设计,从CPU到GPU编程,所以有些内容请教了在相关方向更资深的同事。感谢赵家英和秦雨两位同事对CPU性能优化部分提供的帮助,感谢刘瑞龙和谢柏渊两位同事对深度学习框架和GPU部分提供的帮助,有了你们的帮助,本书的内容才更完善、有深度,在此深表谢意。
李永会
2019年7月于北京
|
|