具体描述
《移动深度学习》由浅入深地介绍了如何将深度学习技术应用到移动端运算领域,书中尽量避免罗列公式,尝试用浅显的语言和几何图形去解释相关内容。本书第1章展示了在移动端应用深度学习技术的Demo,帮助读者建立直观的认识;第2章至第4章讲述了如何在移动端项目中应用深度学习技术;第5章至第8章的难度略大,主要讲述如何深入地调整框架,适配并定制自己的框架。
《移动深度学习》适合移动端研发工程师阅读,也适合所有对移动端运算领域感兴趣的朋友阅读
作者简介
李永会
百度App移动研发部资深工程师。2015年起在百度从事图像搜索和语音搜索客户端研发工作,主持了多个重要创新项目,包括百度Lens、实时翻译等。同时负责开源移动端深度学习框架Paddle-Lite的开发,长期从事移动端AI高性能计算优化工作,在多种软硬件平台上高性能运行深度学习技术。在工作之余有读史、书法等爱好。
目录信息
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
· · · · · · (收起)
读后感
用户评价
我是一位对开源社区和跨平台技术有强烈偏好的开发者。目前我们团队的项目需要同时覆盖iOS和Android平台,并且我们倾向于使用统一的技术栈来减少维护成本。因此,我对这本书中关于跨平台框架的对比和实践操作非常感兴趣。它是否详细比较了Core ML(苹果原生)、ML Kit(谷歌生态)以及通用如ONNX Runtime在移动端的优劣势?更重要的是,如果书中能提供一个完整的“一次编写,多端部署”的案例,比如如何用一个统一的中间表示(IR)来管理模型,然后针对不同目标平台进行后端编译和优化,那将是解决我们当前痛点的核心方案。我希望看到详细的环境配置指南,特别是针对新版移动操作系统和硬件架构(如M系列芯片或最新的高通Snapdragon)的兼容性测试和调优技巧。如果这本书能站在一个更宏观的技术选型角度,给出在不同业务场景下选择哪种移动端推理引擎的决策树,那它的实用价值将远超一本技术手册本身。
我是一位对用户体验极度敏感的产品经理。对我来说,深度学习模型的价值,最终体现在它是否能无缝、流畅地融入用户的使用场景中,并且不产生额外的资源消耗或干扰。我更关心的是如何利用移动端的独特能力来增强AI体验。比如,这本书是否探讨了如何结合设备的传感器数据(如摄像头、麦克风、陀螺仪)进行更智能的、低延迟的推理?我们是否能设计出“感知上下文”的模型,只在需要时才唤醒复杂计算,从而最大限度地节省电池寿命?我非常期待看到关于如何平衡精度损失与用户体验的决策模型。一个模型即便精度高了1个百分点,但如果推理延迟增加50毫秒,对于实时交互应用来说,其负面影响可能是灾难性的。这本书如果能从产品视角出发,提供一套评估移动端AI功能的指标体系,帮助我们量化“好的用户体验”与“模型性能”之间的关系,那将是极具洞察力的内容。
作为一名资深的软件架构师,我的关注点已经从模型本身转移到了整个系统的健壮性和可维护性上。在企业级应用中部署AI能力时,我们面临的挑战不仅仅是推理速度快慢的问题,更重要的是如何保证模型在不同版本系统、不同设备型号上的兼容性和稳定性。我希望这本书能深入探讨移动端模型部署的工程化最佳实践。例如,它是否涵盖了模型版本管理、热更新机制的设计?在面对用户反馈的错误推理结果时,我们如何高效地定位是模型本身的问题还是部署环境导致的兼容性问题?此外,数据隐私和安全在移动端部署中是重中之重。我期待看到关于联邦学习在移动端应用的一些前沿探讨,或者至少是如何在设备端安全地加载和执行预训练模型的方法论。如果书里能提供一套成熟的CI/CD流程来应对移动AI模型的持续集成和交付,那对我们搭建规范化的AI工程体系将具有极高的参考价值。单纯的性能优化已不能满足需求,系统层面的鲁棒性才是决定项目能否长期运营的关键。
我是一个自学编程的爱好者,对人工智能领域抱有浓厚的兴趣,但我的数学和计算机理论基础相对薄弱,总感觉在啃那些动辄上百页的算法证明时力不从心。我选择这本书,主要是看中了“移动”这个前缀,直觉上觉得这部分内容可能更偏向于工程实现和应用层面,相比于纯理论书籍,应该更容易“上手”。我真正想知道的是,那些在科研论文里被吹得天花乱坠的SOTA模型,到底是怎么在几百兆内存的手机上跑起来的?这本书是否能用更直观、更贴近代码的方式,将那些复杂的优化技巧——比如如何选择合适的算子库、如何利用硬件加速库——讲解清楚?我特别希望它能用类比或者图示的方式,将模型压缩的过程可视化,这样即使是像我这样半路出家的学习者,也能快速建立起对“轻量化”的直观理解。如果书中能包含大量易于操作的Python或C++代码片段,并且这些代码能直接在主流手机型号上运行并展示性能对比,那无疑会大大增强我的学习信心,让我觉得深度学习不再是遥不可及的“高科技”,而是触手可及的工程实践。
这本《移动深度学习》拿到手,首先映入眼帘的是它那充满未来感的封面设计,线条流畅,色彩搭配大胆又不失科技感,让人忍不住想立刻翻开一探究竟。我本职是做嵌入式系统开发的,平时对前沿技术抱有极大的热情,尤其是涉及到资源受限设备上的AI部署,一直是我关注的重点。说实话,市面上关于深度学习的书籍汗牛充栋,但多数都偏向于云端的大模型训练和理论推导,对于如何将这些复杂的模型轻量化、高效地移植到手机、边缘计算设备上,实操性强的资料实在太少。因此,我抱着很高的期待翻开了这本书,希望能找到那些“干货”——关于模型剪枝、量化、知识蒸馏等关键技术在实际移动平台上的落地细节。我期待看到具体的案例,比如如何在特定的移动端GPU或NPU架构下进行性能调优,而不是停留在高屋建瓴的概念阐述。如果这本书能深入剖析TensorFlow Lite、PyTorch Mobile等框架在不同操作系统(如Android/iOS)上的适配挑战及优化策略,那对我们一线工程师来说,简直是福音。我特别关注它在模型大小和推理速度之间权衡的实践方法论,这直接关系到用户体验和产品迭代速度。希望这本书能提供一套完整的、可复用的移动AI部署流水线,从模型导出到最终上线的每一步都有清晰的指导和避坑指南。
没啥用,感觉就是一个概述,篇幅都不如一篇论文大小吧。完全不值75块,也就是20块的价值。
对移动端深度学习提供了很多方法
没啥用,感觉就是一个概述,篇幅都不如一篇论文大小吧。完全不值75块,也就是20块的价值。
对移动端深度学习提供了很多方法
对移动端深度学习提供了很多方法