移动深度学习
  • 推荐0
  • 收藏0
  • 浏览36

移动深度学习

李永会 (作者) 

  • 书  号:
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:张春雨
在当下互联网行业中,机器学习、神经网路等技术逐步在业界落地实施,而目前还是大部分集中在服务端技术。由于在移动端硬件等因素的限制,深度学习技术的应用有着诸多困难,2016年百度在客户端使用深度学习的能力做了大量工作,终于在2017年初完成所有技术障碍,并准备在手机百度中上线。 使用深度学习可以在不发起网络请求的情况下在移动客户端进行图像识别任务。目前,不管是在国内还是国外深度学习领域中,在移动客户端使用深度学习都是前沿技术,业务虽然有一些应用,但是还是有一些移动端的障碍扫清。
面向5G|AIoT|边缘计算 移动端神经网络实践首著 基于手机百度AI创新应用
深度学习技术在近两年飞速发展,对互联网的诸多方面产生了影响。各种互联网产品都争相应用深度学习技术,这将进一步影响人们的生活。随着移动设备被广泛使用,在移动互联网产品中应用深度学习和神经网络技术已经成为必然趋势。
一直以来,由于技术门槛和硬件条件的限制,在移动端应用深度学习的成功案例不多。传统移动端UI工程师在编写神经网络代码时,可以查阅的移动端深度学习资料也很少。而另一方面,时下的互联网竞争又颇为激烈,率先将深度学习技术在移动端应用起来,可以取得先发制人的优势。
移动端设备的运算能力比PC端弱很多。移动端的CPU要将功耗指标维持在很低的水平,这就给性能指标的提升带来了限制。在App中做神经网络运算,会使CPU的运算量猛增。如何协调好用户功耗指标和性能指标就显得至关重要。另外,App的体积限制也是重大考验,如果为了让用户体验一个深度学习功能而要求其下载200MB甚至更大的模型文件,想必用户是不会愉快接受的。这些都是在移动端应用深度学习技术必须解决的问题。
笔者从2015年开始尝试将深度学习技术应用在移动端,在这个过程中遇到的很多问题是关于性能和功耗的,这些问题最终被逐一解决。现在相关项目代码已经在很多App上运行,这些App有日PV达亿级的产品,也有创业期的产品。2017年9月,笔者所带领的团队在GitHub上开源了该项目的全部代码及脚本,项目名称是mobile-deep-learning,希望它在社区的带动下能够得到更好的发展。本书也是以该项目的代码作为示例进行讲解的。
我们已经在多个重要会议上分享了该方向的成果,听众非常感兴趣,会后和我们讨论了很多问题,我也感觉到这些成果值得分享给更多人,于是产生了撰写本书的想法。
目前,国内外已经有很多关于深度学习的书籍,其中一些对算法的讲述非常精辟且有深度。然而这些书籍基本上都是介绍如何在服务器端使用深度学习技术的,针对在移动端应用深度学习技术的书籍还相对较少。
本书内容
本书力求系统而全面地描绘移动端深度学习技术的实践细节和全景,对iOS和Android两个平台的神经网络实践都会详细讲述。需求不同的读者可以根据自己的情况有重点地阅读。精妙的算法必须加上良好的工业实现,才能给用户提供极致的体验,本书以代码实现为主线讲述工程实践,由浅入深,逐步增加难度,最终会将体系结构和汇编知识应用到实践案例中。
这里需要说明两点:
笔者将书中出现的Paddle-Lite代码压缩并放到了博文视点的官网,读者可以扫描“读者服务”中的二维码查看。如果想体验最新版本的Paddle-Lite,可以直接到GitHub上搜索查看。
笔者将书中的链接列在表格中并放在了博文视点的官网,读者同样可以扫描“读者服务”中的二维码查看表格,并点击其中的链接直接访问。
本书可以作为移动端研发工程师的前沿读物,读者阅读本书后,完全可以将所学知识应用到自己的产品中去;同时本书也适合对移动端运算领域感兴趣的朋友阅读。
致谢
特别感谢我的同事在本书编写过程中提供的巨大帮助,由于本书涉猎的技术方向较广——从体系结构到框架程序设计,从CPU到GPU编程,所以有些内容请教了在相关方向更资深的同事。感谢赵家英和秦雨两位同事对CPU性能优化部分提供的帮助,感谢刘瑞龙和谢柏渊两位同事对深度学习框架和GPU部分提供的帮助,有了你们的帮助,本书的内容才更完善、有深度,在此深表谢意。


李永会
2019年7月于北京

目录

第1章 初窥移动端深度学习技术的应用 1
1.1 本书示例代码简介 1
1.1.1 安装编译好的文件 1
1.1.2 在Demo App中应用神经网络技术 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 编译运行深度学习App 12
1.6.1 mobile-deep-learning项目环境简介 12
1.6.2 mobile-deep-learning项目整体代码结构 13
1.6.3 mobile-deep-learning通用环境依赖 14
1.7 在iOS平台上搭建深度学习框架 15
1.7.1 在iOS平台上搭建mobile-deep-learning项目 15
1.7.2 在OS X平台上编译mobile-deep-learning项目 16
1.7.3 iOS平台上mobile-deep-learning项目的Demo代码结构 17
1.8 在Android平台上搭建深度学习框架 18
1.8.1 Android平台上mobile-deep-learning项目的环境依赖 18
1.8.2 Android平台上mobile-deep-learning项目的Demo代码结构 19
1.8.3 用Paddle-Lite框架编译与开发Android应用 20
1.8.4 开发一个基于移动端深度学习框架的Android App 22
第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和stride 75
3.8.1 让卷积核“出界”:padding 75
3.8.2 让卷积核“跳跃”:stride 75
3.9 卷积后的降维操作:池化 76
3.10 卷积的重要性 77
第4章 移动端常见网络结构 78
4.1 早期的卷积神经网络 78
4.2 AlexNet网络结构 79
4.3 GoogLeNet网络结构 79
4.3.1 模型体积问题 80
4.3.2 计算量问题 80
4.4 尝试在App中运行GoogLeNet 81
4.4.1 将32位float参数转化为8位int参数以降低传输量 82
4.4.2 将CPU版本服务器端框架移植到移动端 83
4.4.3 应用在产品中的效果 84
4.5 轻量化模型SqueezeNet 85
4.5.1 SqueezeNet的优化策略 85
4.5.2 fire模块 86
4.5.3 SqueezeNet的全局 86
4.6 轻量高性能的MobileNet 88
4.6.1 什么是深度可分离卷积(Depthwise Separable Convolution) 88
4.6.2 MobileNet v1网络结构 89
4.6.3 MobileNet v2网络结构 91
4.7 移动端神经网络模型的优化方向 92
第5章 ARM CPU组成 94
5.1 现代计算机与ARM CPU架构的现状 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.1 ARM CPU家族 106
5.4.2 ARMv7-A处理器架构 107
5.4.3 ARMv7汇编指令介绍 109
5.5 ARM指令集架构 111
5.6 ARM手机芯片的现状与格局 113
第6章 存储金字塔与ARM汇编 115
6.1 ARM CPU的完整结构 115
6.2 存储设备的金字塔结构 117
6.3 ARM芯片的缓存设计原理 119
6.3.1 缓存的基本理解 119
6.3.2 简单的缓存映射结构:直接映射 121
6.3.3 灵活高效的缓存结构:组相联映射 123
6.3.4 利用一个简单的公式优化访存性能 125
6.4 ARM汇编知识 126
6.4.1 ARM汇编数据类型和寄存器 127
6.4.2 ARM指令集 130
6.4.3 ARM汇编的内存操作 131
6.5 NEON汇编指令 133
6.5.1 NEON寄存器与指令类型 134
6.5.2 NEON存储操作指令 135
6.5.3 NEON通用数据操作指令 137
6.5.4 NEON通用算术操作指令 138
6.5.5 NEON乘法指令 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.2 CPU高性能通用优化 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 异构计算编程框架OpenCL 166
8.1.1 开发移动端GPU应用程序 167
8.1.2 OpenCL中的一些概念 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

读者评论

相关博文

  • 移动深度学习:人工智能的深水区

    移动深度学习:人工智能的深水区

    管理员账号 2019-10-17

    人工智能技术经历6年的快速发展,重新定义了很多行业的用户体验,而这仅是开始。 随着5G商用大规模落地,以及智能手机硬件性能越来越强、AIoT设备的快速普及,基于云-边缘-端算法和算力结构的移动端人工智能,仍有非常大的发展空间,亟待...

    管理员账号 2019-10-17
    16 0 0 0