●第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在OS臺上編譯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.和神經網絡61
3.4.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