內容簡介
本書精講移動平台深度學習系統所需核心算法、硬體級指令集、系統設計與編程實戰、海量數據處理、業界流行框架裁剪與產品級性能最佳化策略等,深入、翔實。
深度學習基礎(第1~4章),介紹開發機器學習系統所需重要知識點,以及開發移動平台機器學習系統算法基石,諸如人工神經網路、稀疏自編碼器、深度網路、卷積神經網路等。
移動平台深度學習基礎(第5~6章),介紹移動平台開發環境搭建、移動平台開發基礎、
ARM指令集加速技術,以及輕量級網路的實現原理與實戰。
深入理解深度學習(第7~8章),剖析數據預處理原理與方法,高性能實時處理系統開發,以及基於深度神經網路的物體檢測與識別。本篇是下一篇內容的前導與“基石”。
深入理解移動平台深度學槳敬姜習(第9~12章),本篇套用前述章節的框架與技術,實現移動平台深度學習系統的實現與集成,具體涵蓋:① 移動平台性能最佳化,數據採集與訓練,為開發移動平台圖像分類系統建立基礎;② 深入剖析TensorFlow Lite代碼體系、構建原理、集成方法以及核心代碼與裁剪分析,模型處理工具,並完成移動平台系統集成;③ 結合實戰分析主流移動平台機器學習框架、接口,並展望未來。
作者簡介
盧譽聲
Autodesk數據平台和計算平台資深工程師,負責平台架構研發工作。工作內容涵蓋大規模分散式系統的伺服器後端、前端以及SDK的設計與研發,在數據處理、實時計算、分散式系統設計與實現、性能調優、高可用性和自動化等方面積累了豐富的經驗。擅長C/C++、JavaScript開發,此外對Scala、Java以及移動平台等也有一定研究。著有《移動平台深度神經網路實戰:原理、架構與最佳化》、《分散式實時處理系統:原理架構與實現》,並譯有《高級C/C++編譯技術》和《JavaScript編程精解(原書第2版)》等。
目錄
序一
序二
前言
第一篇 深度學習基礎
第1章 向未來問好 2
1.1 機器學習即正義 2
1.1.1 照本宣科 3
1.1.2 關鍵概念概述 4
1.1.3 數學之美 5
1.2 機器學習的場景和任務 6
1.3.1 分類算法 8
1.3.2 回歸算法廈和糊 8
1.3.3 聚類算法 8
1.3.4 關聯分析算法 9
1.3.5 集成算法 9
1.3.6 強化算法 10
1.4 如何掌握機器學習 10
1.4.1 學習曲線 10
1.4.2 技術棧 11
1.5 深度學習 12
1.5.1 深度學習的貢獻 12
1.5.2 深度學習框架簡介 13
1.5.3 安裝使用深度學習框架 16
1.5.4 深度學習進展 22
1.6 走進移動戀膠估櫃世界的深度學習 25
1.6.1 移動平台機器學習概述 25
1.6.2 難度和挑戰 26
1.7 己跨本書框架 26
1.8 本章小結 27
第2章 機器學習基礎 28
2.1 機器學習的主要任務 28
2.2 貝葉斯模型 29
2.3.1 線性回歸 33
2.3.2 幾率多墓試戀與Logit 35
2.3.3 Logistic回歸 38
2.3.4 背景溯源 39
2.3.5 實現Logistic回歸 42
2.4 本章小結 44
3.1 人工神經網路簡介 45
3.2 基本結構與前向傳播 46
3.2.1 神經元 46
3.2.2 連線與網路 47
3.2.3 神經網路向量化 48
3.2.4 前向傳播 50
3.4 實現前向神經網路 53
3.4.1 神經網路與前向傳播實現 53
3.4.2 Softmax回歸 60
3.5 稀疏自編碼器 61
3.5.1 引子 61
3.5.2 自編碼器簡介 61
3.5.3 稀疏自編碼算法 63
3.6 神經網路數據預處理 64
3.6.1 去均值 64
3.6.2 歸一化備射旬 65
3.7 本章小結 65
4.1 深度網路 66
4.1.1 自我學習 66
4.1.2 特徵笑少嚷學習 67
4.1.3 深度神經網路 68
4.1.4 逐層貪婪訓練方法 69
4.2 卷積神經網路 70
4.2.1 全連線與部分連線網路 70
4.2.2 卷積 70
4.2.3 池化 72
4.2.4 卷積神經網路 73
4.3 卷積神經網路實現 73
4.3.1 Layer實現 74
4.3.2 Net實現 79
4.3.3 InnerProduct實現 92
4.3.4 Convolution實現 95
4.3.5 Pooling實現 101
4.3.6 定義註冊頭檔案 109
4.4 本章小結 110
第二篇 移動平台深度學習基礎
第5章 移動平台深度學習框架設計與實現 112
5.1 移動平台深度學習系統開發簡介 112
5.2 ARM Linux基礎開發環境 113
5.2.1 通用ARM工具鏈安裝 114
5.2.2 Android NDK安裝 114
5.2.3 樹莓派工具鏈安裝 115
5.3 TensorFlow Lite介紹 115
5.3.1 TensorFlow Lite特性 115
5.3.2 TensorFlow Lite架構 116
5.3.3 TensorFlow Lite代碼結構 117
5.4 移動平台性能最佳化基礎 118
5.4.1 ARM v8體系結構 119
5.4.2 ARM v8數據類型與暫存器 120
5.4.3 Neon指令集介紹 122
5.4.4 ARM v8記憶體模型 124
5.4.5 Neon指令集加速實例 127
5.5 本章小結 140
第6章 移動平台輕量級網路實戰 141
6.1 適用於移動平台的輕量級網路 141
6.2 SqueezeNet 142
6.2.1 微觀結構 142
6.2.2 巨觀結構 142
6.2.3 核心思路 143
6.2.4 實戰:用PyTorch實現SqueezeNet 144
6.3 MobileNet 153
6.4 ShuffleNet 154
6.5 MobileNet V2 155
6.5.1 MobileNet的缺陷 155
6.5.2 MobileNet V2的改進 155
6.5.3 網路結構 156
6.5.4 實戰:用PyTorch實現MobileNet V2 157
6.6 本章小結 161
第三篇 深入理解深度學習
第7章 高性能數據預處理實戰 164
7.1 數據預處理任務 164
7.1.1 數據清理 165
7.1.2 數據集成 165
7.1.3 數據歸約 165
7.1.4 數據變換 166
7.2 數據標準化 166
7.3 PCA 167
7.3.1 PCA的現實問題 167
7.3.2 PCA的計算方法 167
7.3.3 PCA的數學理論基礎 169
7.4 在Hurricane之上實現PCA 170
7.4.1 Hurricane實時處理系統 171
7.4.2 實現Hurricane Topology 172
7.4.3 實現PCA 178
7.5 本章小結 192
第8章 基於深度神經網路的物體檢測與識別 193
8.1 模式識別與物體識別 193
8.1.1 模式識別 193
8.1.2 模式識別系統 194
8.1.3 傳統模式識別方法 194
8.1.4 深度學習模式識別方法 197
8.2 圖像分類 197
8.2.1 LeNet 197
8.2.2 AlexNet 200
8.2.3 數據抓取整理 203
8.2.4 數據預處理 204
8.2.5 數據訓練 206
8.3 目標識別與物體檢測 207
8.3.1 目標識別簡介 207
8.3.2 R-CNN 208
8.3.3 SPP-Net 209
8.3.4 Fast R-CNN 211
8.3.5 Faster R-CNN 211
8.3.6 RetinaNet 213
8.4 檢測識別實戰 213
8.4.1 Faster R-CNN 214
8.4.2 RetinaNet 230
8.5 移動平台檢測識別實戰 237
8.5.1 移動平台系統開發思路 237
8.5.2 基於RetinaNet的檢測定位實現 237
8.5.3 基於AlexNet的識別分類實現 244
8.5.4 接口設計封裝 247
8.6 本章小結 258
第四篇 深入理解移動平台深度學習
第9章 深入移動平台性能最佳化 260
9.1 模型壓縮 260
9.2 權重稀疏化 262
9.2.1 Structured Sparsity Learning 262
9.2.2 Dynamic Network Surgery 262
9.2.3 Dynamic Network Surgery實現 264
9.3 模型加速 275
9.3.1 半精度與權重量化 275
9.3.2 深度壓縮 276
9.3.3 二值化網路 278
9.3.4 三值化網路 280
9.3.5 DoReFa-Net 282
9.3.6 編程實戰 283
9.4 嵌入式最佳化 287
9.4.1 算法局限與改進 287
9.4.2 理論改進 287
9.4.3 編程實戰 288
9.5 嵌入式最佳化代碼實現 290
9.5.1 量化分析實現 290
9.5.2 層實現 302
9.5.3 量化矩陣計算 309
9.6 本章小結 313
第10章 數據採集與模型訓練實戰 314
10.1 收集海量數據 314
10.1.1 搜尋引擎工作原理 315
10.1.2 HTTP會話 316
10.1.3 解決JavaScript渲染問題 316
10.2 圖片數據爬蟲實現 317
10.2.1 獲取任務 318
10.2.2 解析圖片 320
10.2.3 圖片存儲 326
10.2.4 圖片去重 327
10.2.5 完成Topology 328
10.3 訓練與測試 330
10.3.1 模型定義 330
10.3.2 訓練 334
10.3.3 測試 342
10.3.4 封裝 344
10.4 本章小結 345
第11章 移動和嵌入式平台引擎與工具實戰 346
11.1 TensorFlow Lite構建 346
11.2 集成TensorFlow Lite 357
11.3 核心實現分析 358
11.3.1 解釋器代碼分析 358
11.3.2 圖代碼分析 373
11.3.3 操作符註冊 381
11.3.4 操作符擴展實現 384
11.3.5 計算與最佳化模組 399
11.4 模型處理工具 407
11.5 本章小結 425
第12章 移動平台框架與接口實戰 426
12.1 Core ML 426
12.1.1 準備數據和生成模型 427
12.1.2 App實戰:引入Core ML實現 430
12.2 Android Neural Networks API 437
12.2.1 等等,Google還有一個ML Kit 437
12.2.2 NNAPI編程模型 437
12.2.3 創建網路與計算 439
12.2.4 JNI封裝與調用 451
12.2.5 App實戰:集成NNAPI 454
12.3 實戰:實現Android圖像分類器App 459
12.3.1 JNI封裝 459
12.3.2 Java調用 474
12.4 未來之路 479
12.5 本章小結 480
1.5.4 深度學習進展 22
1.6 走進移動世界的深度學習 25
1.6.1 移動平台機器學習概述 25
1.6.2 難度和挑戰 26
1.7 本書框架 26
1.8 本章小結 27
第2章 機器學習基礎 28
2.1 機器學習的主要任務 28
2.2 貝葉斯模型 29
2.3.1 線性回歸 33
2.3.2 幾率與Logit 35
2.3.3 Logistic回歸 38
2.3.4 背景溯源 39
2.3.5 實現Logistic回歸 42
2.4 本章小結 44
3.1 人工神經網路簡介 45
3.2 基本結構與前向傳播 46
3.2.1 神經元 46
3.2.2 連線與網路 47
3.2.3 神經網路向量化 48
3.2.4 前向傳播 50
3.4 實現前向神經網路 53
3.4.1 神經網路與前向傳播實現 53
3.4.2 Softmax回歸 60
3.5 稀疏自編碼器 61
3.5.1 引子 61
3.5.2 自編碼器簡介 61
3.5.3 稀疏自編碼算法 63
3.6 神經網路數據預處理 64
3.6.1 去均值 64
3.6.2 歸一化 65
3.7 本章小結 65
4.1 深度網路 66
4.1.1 自我學習 66
4.1.2 特徵學習 67
4.1.3 深度神經網路 68
4.1.4 逐層貪婪訓練方法 69
4.2 卷積神經網路 70
4.2.1 全連線與部分連線網路 70
4.2.2 卷積 70
4.2.3 池化 72
4.2.4 卷積神經網路 73
4.3 卷積神經網路實現 73
4.3.1 Layer實現 74
4.3.2 Net實現 79
4.3.3 InnerProduct實現 92
4.3.4 Convolution實現 95
4.3.5 Pooling實現 101
4.3.6 定義註冊頭檔案 109
4.4 本章小結 110
第二篇 移動平台深度學習基礎
第5章 移動平台深度學習框架設計與實現 112
5.1 移動平台深度學習系統開發簡介 112
5.2 ARM Linux基礎開發環境 113
5.2.1 通用ARM工具鏈安裝 114
5.2.2 Android NDK安裝 114
5.2.3 樹莓派工具鏈安裝 115
5.3 TensorFlow Lite介紹 115
5.3.1 TensorFlow Lite特性 115
5.3.2 TensorFlow Lite架構 116
5.3.3 TensorFlow Lite代碼結構 117
5.4 移動平台性能最佳化基礎 118
5.4.1 ARM v8體系結構 119
5.4.2 ARM v8數據類型與暫存器 120
5.4.3 Neon指令集介紹 122
5.4.4 ARM v8記憶體模型 124
5.4.5 Neon指令集加速實例 127
5.5 本章小結 140
第6章 移動平台輕量級網路實戰 141
6.1 適用於移動平台的輕量級網路 141
6.2 SqueezeNet 142
6.2.1 微觀結構 142
6.2.2 巨觀結構 142
6.2.3 核心思路 143
6.2.4 實戰:用PyTorch實現SqueezeNet 144
6.3 MobileNet 153
6.4 ShuffleNet 154
6.5 MobileNet V2 155
6.5.1 MobileNet的缺陷 155
6.5.2 MobileNet V2的改進 155
6.5.3 網路結構 156
6.5.4 實戰:用PyTorch實現MobileNet V2 157
6.6 本章小結 161
第三篇 深入理解深度學習
第7章 高性能數據預處理實戰 164
7.1 數據預處理任務 164
7.1.1 數據清理 165
7.1.2 數據集成 165
7.1.3 數據歸約 165
7.1.4 數據變換 166
7.2 數據標準化 166
7.3 PCA 167
7.3.1 PCA的現實問題 167
7.3.2 PCA的計算方法 167
7.3.3 PCA的數學理論基礎 169
7.4 在Hurricane之上實現PCA 170
7.4.1 Hurricane實時處理系統 171
7.4.2 實現Hurricane Topology 172
7.4.3 實現PCA 178
7.5 本章小結 192
第8章 基於深度神經網路的物體檢測與識別 193
8.1 模式識別與物體識別 193
8.1.1 模式識別 193
8.1.2 模式識別系統 194
8.1.3 傳統模式識別方法 194
8.1.4 深度學習模式識別方法 197
8.2 圖像分類 197
8.2.1 LeNet 197
8.2.2 AlexNet 200
8.2.3 數據抓取整理 203
8.2.4 數據預處理 204
8.2.5 數據訓練 206
8.3 目標識別與物體檢測 207
8.3.1 目標識別簡介 207
8.3.2 R-CNN 208
8.3.3 SPP-Net 209
8.3.4 Fast R-CNN 211
8.3.5 Faster R-CNN 211
8.3.6 RetinaNet 213
8.4 檢測識別實戰 213
8.4.1 Faster R-CNN 214
8.4.2 RetinaNet 230
8.5 移動平台檢測識別實戰 237
8.5.1 移動平台系統開發思路 237
8.5.2 基於RetinaNet的檢測定位實現 237
8.5.3 基於AlexNet的識別分類實現 244
8.5.4 接口設計封裝 247
8.6 本章小結 258
第四篇 深入理解移動平台深度學習
第9章 深入移動平台性能最佳化 260
9.1 模型壓縮 260
9.2 權重稀疏化 262
9.2.1 Structured Sparsity Learning 262
9.2.2 Dynamic Network Surgery 262
9.2.3 Dynamic Network Surgery實現 264
9.3 模型加速 275
9.3.1 半精度與權重量化 275
9.3.2 深度壓縮 276
9.3.3 二值化網路 278
9.3.4 三值化網路 280
9.3.5 DoReFa-Net 282
9.3.6 編程實戰 283
9.4 嵌入式最佳化 287
9.4.1 算法局限與改進 287
9.4.2 理論改進 287
9.4.3 編程實戰 288
9.5 嵌入式最佳化代碼實現 290
9.5.1 量化分析實現 290
9.5.2 層實現 302
9.5.3 量化矩陣計算 309
9.6 本章小結 313
第10章 數據採集與模型訓練實戰 314
10.1 收集海量數據 314
10.1.1 搜尋引擎工作原理 315
10.1.2 HTTP會話 316
10.1.3 解決JavaScript渲染問題 316
10.2 圖片數據爬蟲實現 317
10.2.1 獲取任務 318
10.2.2 解析圖片 320
10.2.3 圖片存儲 326
10.2.4 圖片去重 327
10.2.5 完成Topology 328
10.3 訓練與測試 330
10.3.1 模型定義 330
10.3.2 訓練 334
10.3.3 測試 342
10.3.4 封裝 344
10.4 本章小結 345
第11章 移動和嵌入式平台引擎與工具實戰 346
11.1 TensorFlow Lite構建 346
11.2 集成TensorFlow Lite 357
11.3 核心實現分析 358
11.3.1 解釋器代碼分析 358
11.3.2 圖代碼分析 373
11.3.3 操作符註冊 381
11.3.4 操作符擴展實現 384
11.3.5 計算與最佳化模組 399
11.4 模型處理工具 407
11.5 本章小結 425
第12章 移動平台框架與接口實戰 426
12.1 Core ML 426
12.1.1 準備數據和生成模型 427
12.1.2 App實戰:引入Core ML實現 430
12.2 Android Neural Networks API 437
12.2.1 等等,Google還有一個ML Kit 437
12.2.2 NNAPI編程模型 437
12.2.3 創建網路與計算 439
12.2.4 JNI封裝與調用 451
12.2.5 App實戰:集成NNAPI 454
12.3 實戰:實現Android圖像分類器App 459
12.3.1 JNI封裝 459
12.3.2 Java調用 474
12.4 未來之路 479
12.5 本章小結 480