這是一本講解如何基于當前主流的智能芯片RK3399Pro與RK3588進行端側智能開發的著作,它將指導讀者如何基于這兩款芯片進行算法的設計與實施,瑞芯微官方推薦。理論部分,以深度學習為主線,針對零基礎的讀者,不僅講解了卷積神經網絡、循環神經網絡等深度神經網絡的原理以及它們在計算機視覺、自然語言處理、語音識別等領域的經典算法,還講解了深度神經網絡的訓練和模型優化。實踐部分,以基于RK3399Pro與RK3588兩款智能芯片的端側智能開發為主線,講解了芯片的功能架構、開發板及其開發環境、Rock-X API組件庫,以及基于它們的各種端側智能應用開發,包括各種神經網絡的開發、神經網絡的運算加速等,讓讀者掌握深度學習模型從設計、訓練、優化到端側部署的完整流程,快速學會人工智能應用的開發。
未來的社會是智能的社會,智能體現在各種終端中,終端的智能需要算法和算力的結合,本書正是圍繞人工智能算法的落地應用展開。在人工智能算法部分,本書更加關注算法的具體實現,算法的嵌入式落地以豐富的實踐案例展示了瑞芯微人工智能芯片的加速能力,希望能夠對嵌入式智能落地應用開發提供幫助。——史治國 浙江大學信息與電子工程學院副院長 在當前的人工智能浪潮下,各類算法越來越需要落地到各種應用場景中,這都離不開芯片的加速支持。瑞芯微3399Pro和3588是業界主流的人工智能芯片,其RKNN人工智能開發庫易于上手,結合芯片進行算法的設計實施是本書的主旨。本書在介紹人工智能算法基本原理的基礎上,重點介紹了芯片的加速庫和豐富的應用案例,為相關智能產品的開發提供了較好的引導。——林崢源 瑞芯微電子股份有限公司副總裁 在過去的十年里,云計算成功地緩解了日益增長的數據所帶來的存儲、管理等問題,但不能滿足對響應時間和安全性的高要求,這對嵌入式人工智能發起了挑戰。本書理論結合實踐,講述了深度學習模型從設計、訓練、優化到端側部署的完整過程,實屬難能可貴。——劉盼盼 某芯片大廠資深系統架構師
近年來,人工智能如火如荼地發展,并在計算機視覺、自然語言處理等諸多應用領域取得顯著成果。人工智能的發展依賴于深度學習算法、高質量大數據和高性能計算三大要素。在初始階段,人工智能的開發和應用主要集中在云端,通常通過服務器進行算法部署。但是云側智能存在數據安全、隱私保護等問題,服務器部署在實際應用場景中也存在成本高、便捷性差等缺點。同時,隨著越來越多的開發者從事人工智能開發,構建更低成本、更便捷、更開放的人工智能開發平臺和生態變得十分迫切。
因此,人們開始研究和探索能否將人工智能算法與應用部署在終端。但是終端CPU的算力和功耗指標通常無法滿足人工智能應用的需求。隨著人工智能芯片的研發成功,搭載人工智能芯片的嵌入式神經網絡處理器(NPU)能夠以低功耗進行高速運算,于是端側智能得以迅速發展并形成一個繁榮的應用生態。端側智能將人工智能算法和應用部署在手機、嵌入式設備等端側設備上。相比云側智能,使用NPU來進行人工智能運算具有更好地保護數據隱私、更低時延、便于部署、節省計算資源等優勢。對于開發者來講,端側智能更加易于上手,成本更低,因此越來越多的開發者加入端側智能開發隊伍并合力構建其生態。英特爾、蘋果等公司紛紛在端側智能設備上發力,國內也涌現出諸如華為昇騰、瑞芯微RK3399Pro及RK3588等優秀的端側人工智能芯片。
優秀的端側人工智能設備,除了需要有具備強大算力的NPU外,還需要能夠支持主流的深度學習框架,擁有功能豐富的開發工具和豐富的開發案例。我在科研、教學與生產中了解和使用了瑞芯微推出的高性能人工智能開發板TB-RK3399Pro和TB-RK3588X,這兩個開發板集軟硬件開發于一體:在硬件方面擁有同類芯片領先的、具備強大算力的NPU,同時集成了CPU、GPU、VPU、RGA等單元;在軟件方面支持Caffe、TensorFlow、PyTorch等深度學習框架,同時擁有RKNN-Toolkit開發工具,支持模型轉換、模型量化、算子開發、模型可視化等功能,還擁有豐富的人工智能教學案例和開源社區。
在RK3399Pro的發展和使用過程中,社區積累了豐富的案例和資源,因此我萌生了基于RK3399Pro介紹深度學習和端側人工智能開發的想法。我注意到:市面上的深度學習圖書大多側重于介紹基本概念和原理,缺少實踐和案例;而介紹端側人工智能開發平臺的圖書大多類似于用戶手冊或實驗手冊,往往只告訴用戶如何操作,缺乏對背后原理的講解。因此我想結合深度學習的基本原理,基于RK3399Pro的深度學習實踐,將理論和實踐結合起來,寫一本集算法知識、趣味性和實踐于一體的圖書,讓深度學習的入門者、RK3399Pro的開發者深入地了解深度學習和端側人工智能。
前言
第1章 深度學習基礎 1
1.1 深度學習的現實應用 2
1.1.1 計算機視覺 2
1.1.2 自然語言處理 2
1.1.3 推薦系統 3
1.1.4 語音處理 3
1.1.5 其他領域 3
1.2 回歸問題和分類問題 4
1.2.1 線性回歸 5
1.2.2 Softmax分類 6
1.3 梯度下降算法 8
1.3.1 優化算法概述 8
1.3.2 隨機梯度下降算法 10
1.3.3 小批量梯度下降算法 13
1.3.4 Momentum梯度下降
算法 14
1.3.5 Adam優化算法 15
1.4 神經網絡 16
1.4.1 神經網絡的表示 16
1.4.2 激活函數及其導數 19
1.4.3 前向傳播和反向傳播 23
1.4.4 神經網絡的梯度下降 26
1.5 本章小結 27
第2章 卷積神經網絡 28
2.1 卷積基礎知識 28
2.1.1 卷積操作 29
2.1.2 池化 33
2.1.3 卷積的變種 34
2.2 深度卷積神經網絡 37
2.2.1 卷積神經網絡的整體
結構 37
2.2.2 殘差結構和1×1卷積 38
2.2.3 經典卷積網絡 41
2.3 卷積神經網絡的應用 44
2.3.1 圖像分類 44
2.3.2 目標檢測 45
2.3.3 其他應用 49
2.4 本章小結 49
第3章 循環神經網絡 50
3.1 深度循環神經網絡 50
3.1.1 循環神經網絡概述 51
3.1.2 基于時間的反向傳播 52
3.1.3 循環神經網絡的長期依賴
問題 54
3.2 循環神經網絡變體 55
3.2.1 長短時記憶網絡 55
3.2.2 門控循環神經網絡 60
3.3 序列模型和注意力機制 61
3.3.1 Seq2Seq序列模型 62
3.3.2 注意力機制 64
3.3.3 Transformer結構 69
3.4 循環神經網絡的應用 74
3.4.1 自然語言處理 74
3.4.2 語音識別 84
3.4.3 喚醒詞檢測 87
3.5 本章小結 88
第4章 深度神經網絡的訓練 90
4.1 深度學習的學習策略 90
4.1.1 數據集劃分和評估指標 90
4.1.2 偏差、方差和誤差 94
4.1.3 神經網絡的權重初始化 95
4.2 深度學習的訓練技巧 96
4.2.1 梯度消失和梯度爆炸 96
4.2.2 正則化和隨機失活 97
4.2.3 歸一化 99
4.2.4 自適應學習率 100
4.2.5 超參數優化 101
4.3 改善模型表現 102
4.3.1 解決數據不匹配問題 102
4.3.2 遷移學習 103
4.4 動手訓練神經網絡 104
4.4.1 Jupyter Notebook的
使用 104
4.4.2 訓練MNIST手寫數字識別模型 106
4.4.3 TensorBoard的使用 112
4.5 本章小結 115
第5章 RK3399Pro芯片功能與
架構 116
5.1 RK3399Pro芯片的整體架構 116
5.2 神經網絡處理單元 121
5.2.1 神經網絡處理單元的
4個模塊 122
5.2.2 RKNN-Toolkit開發
套件 123
5.2.3 RKNN-API開發套件 126
5.3 視頻處理單元 126
5.4 圖形處理加速單元 128
5.5 本章小結 128
第6章 TB-RK3399Pro開發板 130
6.1 開發板硬件環境介紹 130
6.1.1 硬件總覽 130
6.1.2 硬件規格 131
6.2 開發板開發環境搭建 134
6.2.1 開發板的啟動和網絡
配置 134
6.2.2 終端與軟件包安裝 138
6.3 本章小結 144
第7章 基于TB-RK3399Pro進行卷積神經網絡實戰 145
7.1 TB-RK3399Pro圖像采集 145
7.1.1 原理 145
7.1.2 實戰 146
7.2 TB-RK3399Pro手寫數字
識別 147
7.2.1 原理 147
7.2.2 實戰 150
7.3 TB-RK3399Pro YOLO目標
檢測 152
7.3.1 原理 153
7.3.2 實戰 154
7.4 TB-RK3399Pro人臉識別 156
7.4.1 原理 156
7.4.2 實戰 162
7.5 本章小結 163
第8章 TB-RK3399Pro神經網絡
運算加速 165
8.1 神經網絡運算加速引擎介紹 165
8.2 神經網絡模型部署和推理 166
8.2.1 模型部署 167
8.2.2 模型推理 169
8.3 神經網絡模型量化 170
8.4 本章小結 173
第9章 基于TB-RK3399Pro開發板進行循環神經網絡實戰 174
9.1 TB-RK3399Pro開發板聲音
采集 174
9.1.1 必備環境安裝 174
9.1.2 聲音采集 175
9.2 語音識別模型介紹 176
9.2.1 特征提取 177
9.2.2 語音識別網絡 180
9.2.3 評價指標 182
9.3 TB-RK3399Pro語音識別
實戰 182
9.3.1 實戰目的 182
9.3.2 實戰數據 182
9.3.3 實戰環境 183
9.3.4 實戰步驟 183
9.3.5 實戰結果 187
9.4 本章小結 188
第10章 基于Rock-X API的深度
學習案例 189
10.1 Rock-X SDK介紹 189
10.2 Rock-X環境部署 190
10.3 目標檢測 190
10.4 車牌識別