第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
· · · · · · (
收起)