為什么要寫(xiě)這本書(shū)
機(jī)器學(xué)習(xí)、云計(jì)算與移動(dòng)技術(shù)的興起為計(jì)算機(jī)科學(xué)領(lǐng)域注入了前所未有的活力,而海量數(shù)據(jù)時(shí)代的來(lái)臨更是為機(jī)器學(xué)習(xí)技術(shù)帶來(lái)了新的發(fā)展契機(jī)。我們可以看到,越來(lái)越多的企業(yè)和研發(fā)機(jī)構(gòu)開(kāi)始在自己的產(chǎn)品當(dāng)中加入機(jī)器智能,曾經(jīng)僅僅是為了錦上添花而使用的機(jī)器學(xué)習(xí)應(yīng)用,如今搖身一變,成了現(xiàn)代軟件產(chǎn)品或服務(wù)的核心競(jìng)爭(zhēng)力。通過(guò)機(jī)器學(xué)習(xí)技術(shù),軟件或服務(wù)的功能和體驗(yàn)得到了質(zhì)的提升。比如,我們甚至可以通過(guò)啟發(fā)式引擎智能地預(yù)測(cè)并調(diào)節(jié)云計(jì)算分布式系統(tǒng)的節(jié)點(diǎn)壓力,以此改善服務(wù)的彈性和穩(wěn)定性,這是多么美妙。而對(duì)移動(dòng)平臺(tái)來(lái)說(shuō),越來(lái)越多的移動(dòng)終端、邊緣計(jì)算設(shè)備和App開(kāi)始引入人工智能技術(shù),而且對(duì)預(yù)測(cè)實(shí)時(shí)性要求高的環(huán)境也越來(lái)越依賴于離線實(shí)時(shí)機(jī)器學(xué)習(xí),另外移動(dòng)技術(shù)的普及也讓邊緣計(jì)算支持機(jī)器智能成為可能。
然而,開(kāi)發(fā)成熟完善的機(jī)器學(xué)習(xí)系統(tǒng)并不簡(jiǎn)單。不同于傳統(tǒng)計(jì)算機(jī)軟件系統(tǒng)開(kāi)發(fā),研發(fā)機(jī)器學(xué)習(xí)系統(tǒng)不僅需要掌握扎實(shí)的軟件開(kāi)發(fā)技術(shù)、算法原理,還需要掌握紛繁復(fù)雜的數(shù)據(jù)處理原理和實(shí)踐方法。此外,機(jī)器學(xué)習(xí)系統(tǒng)的實(shí)際載體多種多樣。一個(gè)典型的機(jī)器學(xué)習(xí)系統(tǒng)可以是運(yùn)行在云計(jì)算平臺(tái)(比如Amazon AWS)之上的實(shí)例,通過(guò)API調(diào)用的方式提供預(yù)測(cè)服務(wù)。另一種情況是,集中式提供機(jī)器學(xué)習(xí)服務(wù)固然不錯(cuò),但離線機(jī)器學(xué)習(xí)計(jì)算是一項(xiàng)重大補(bǔ)充。在對(duì)實(shí)時(shí)性要求極為苛刻的生產(chǎn)環(huán)境中,實(shí)時(shí)的本地機(jī)器學(xué)習(xí)預(yù)測(cè)技術(shù)就顯得尤為關(guān)鍵,如何在確保準(zhǔn)確率的前提下,提升整體計(jì)算效率、降低系統(tǒng)功耗成為需要攻克的難題。在移動(dòng)技術(shù)、邊緣計(jì)算等技術(shù)突飛猛進(jìn)的當(dāng)下,研發(fā)高可靠、高效率以及低功耗的移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)系統(tǒng)擁有廣闊的發(fā)展愿景和市場(chǎng),這既為我們創(chuàng)造了新的機(jī)遇,也使研發(fā)面臨巨大的挑戰(zhàn)。這是筆者撰寫(xiě)本書(shū)的原動(dòng)力。本書(shū)著眼于移動(dòng)平臺(tái)之上的深度神經(jīng)網(wǎng)絡(luò)系統(tǒng)的研發(fā)和實(shí)戰(zhàn),從理論開(kāi)始,抽絲剝繭地闡述、歸納和總結(jié)研發(fā)高性能計(jì)算系統(tǒng)的各個(gè)方面,同時(shí)輔以實(shí)戰(zhàn),帶領(lǐng)讀者一起掌握實(shí)際的工程落地方法。
未來(lái)已至,我們需要做好準(zhǔn)備!
本書(shū)特色
本書(shū)是一本由淺入深詳細(xì)講解研發(fā)高性能移動(dòng)平臺(tái)深度學(xué)習(xí)系統(tǒng)的編程實(shí)戰(zhàn)書(shū)。本書(shū)從基礎(chǔ)機(jī)器學(xué)習(xí)知識(shí)開(kāi)始講起,涵蓋設(shè)計(jì)和使用高性能分布式實(shí)時(shí)處理系統(tǒng),移動(dòng)平臺(tái)編程,前向引擎優(yōu)化和裁剪,實(shí)際的代碼編寫(xiě),最終實(shí)現(xiàn)一整套針對(duì)移動(dòng)領(lǐng)域開(kāi)發(fā)的完整機(jī)器學(xué)習(xí)解決方案。在本書(shū)中,我們將介紹一套以C 編寫(xiě)的高性能分布式實(shí)時(shí)處理系統(tǒng)Hurricane及其使用方法,供數(shù)據(jù)收集和預(yù)處理使用。在此基礎(chǔ)上,我們會(huì)深入剖析機(jī)器學(xué)習(xí)原理和深度神經(jīng)網(wǎng)絡(luò)概念,而概念講解伴隨而來(lái)的是編程實(shí)戰(zhàn),本書(shū)主要使用Python來(lái)講解基礎(chǔ)算法,驗(yàn)證設(shè)想。
另外,本書(shū)采用循序漸進(jìn)的方式講解理論知識(shí),從基礎(chǔ)知識(shí)入手到艱澀的優(yōu)化算法。相比于C/C ,Python是一門易于上手并實(shí)驗(yàn)友好的膠水語(yǔ)言,因此在講解各類概念與算法時(shí),我們會(huì)使用Python來(lái)驗(yàn)證設(shè)想。從神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)篇章開(kāi)始,為了給工程開(kāi)發(fā)學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ),本書(shū)除了使用Python代碼驗(yàn)證設(shè)想外,還使用C/C 來(lái)實(shí)現(xiàn)產(chǎn)品級(jí)的代碼。
由于本書(shū)的主題是講解如何開(kāi)發(fā)實(shí)現(xiàn)高性能的移動(dòng)平臺(tái)深度學(xué)習(xí)系統(tǒng),因此會(huì)花費(fèi)大量篇幅講解各種旨在提升算法速度和減小模型的小的算法與技術(shù)手段,從輕量級(jí)網(wǎng)絡(luò)等算法模型層面改良到Neon指令集應(yīng)用、權(quán)重稀疏化、半精度、權(quán)重量化等優(yōu)化算法與技術(shù)實(shí)現(xiàn),最終完成適用于移動(dòng)平臺(tái)的深度學(xué)習(xí)引擎性能增強(qiáng)與模型裁剪。為了完成完整的深度學(xué)習(xí)系統(tǒng),我們除了要掌握基本原理外還需要掌握各類實(shí)現(xiàn)應(yīng)用所需的工程技術(shù)。例如,在第三篇講解與完成整個(gè)系統(tǒng)相關(guān)的所有技術(shù)時(shí),還介紹了如何爬取訓(xùn)練用的圖像數(shù)據(jù)、清理訓(xùn)練數(shù)據(jù)、編寫(xiě)訓(xùn)練代碼等內(nèi)容,并以TensorFlow Lite為例,講解移動(dòng)平臺(tái)深度學(xué)習(xí)引擎框架的搭建方法,卷積層、池化層和全連接層實(shí)現(xiàn)與iOS(包括iPadOS)、Android等平臺(tái)的互操作實(shí)現(xiàn)與封裝方案,最終完成可以在iOS與Android上實(shí)際運(yùn)行的深度學(xué)習(xí)系統(tǒng)。
期待讀者能從本書(shū)中學(xué)到新的知識(shí),以便對(duì)深度學(xué)習(xí)與移動(dòng)平臺(tái)系統(tǒng)開(kāi)發(fā)有更加深入的認(rèn)識(shí),了解如何構(gòu)建一個(gè)高性能移動(dòng)平臺(tái)深度學(xué)習(xí)系統(tǒng)。
如何閱讀本書(shū)
本書(shū)從最基本的機(jī)器學(xué)習(xí)基礎(chǔ)概念和原理開(kāi)始,逐步引入研發(fā)高性能移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)系統(tǒng)所需要的方方面面,抽絲剝繭地把有關(guān)機(jī)器學(xué)習(xí)和框架的問(wèn)題娓娓道來(lái)。
第一篇為深度學(xué)習(xí)基礎(chǔ),包含第1~4章。
第1章 介紹機(jī)器學(xué)習(xí)的一些基本概念、學(xué)習(xí)方法和開(kāi)發(fā)機(jī)器學(xué)習(xí)系統(tǒng)所需的重要知識(shí)點(diǎn),由此引出開(kāi)發(fā)移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)系統(tǒng)的主題,帶領(lǐng)讀者進(jìn)入移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)實(shí)戰(zhàn)領(lǐng)域。
第2章 進(jìn)一步介紹機(jī)器學(xué)習(xí)方法、原理和算法,為理解人工神經(jīng)網(wǎng)絡(luò)打下基礎(chǔ)。
第3章 介紹人工神經(jīng)網(wǎng)絡(luò)、基于無(wú)監(jiān)督學(xué)習(xí)的稀疏自編碼器以及相應(yīng)的數(shù)據(jù)預(yù)處理實(shí)戰(zhàn)。
第4章 介紹深度網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的概念以及相應(yīng)的編程實(shí)戰(zhàn),作為移動(dòng)平臺(tái)實(shí)現(xiàn)算法的基石。
第二篇為移動(dòng)平臺(tái)深度學(xué)習(xí)基礎(chǔ),包含第5~6章。
第5章 介紹移動(dòng)平臺(tái)深度學(xué)習(xí)開(kāi)發(fā)基礎(chǔ),聚焦于ARM指令集加速技術(shù)。
第6章 介紹移動(dòng)平臺(tái)輕量級(jí)網(wǎng)絡(luò)的實(shí)現(xiàn)原理和編程實(shí)戰(zhàn)。
第三篇為深入理解深度學(xué)習(xí),包含第7~8章。
第7章 介紹數(shù)據(jù)預(yù)處理原理、方法,及基于高性能實(shí)時(shí)處理系統(tǒng)開(kāi)發(fā)的PCA產(chǎn)品級(jí)數(shù)據(jù)預(yù)處理解決方案。
第8章 介紹模式識(shí)別和物體識(shí)別的基本概念以及經(jīng)典算法,并通過(guò)深度神經(jīng)網(wǎng)絡(luò)編程實(shí)戰(zhàn)實(shí)現(xiàn)AlexNet、Faster R-CNN和Retina Net。本書(shū)最后實(shí)現(xiàn)的移動(dòng)平臺(tái)示例主要是圖像分類,因此本章的作用是先介紹一下前導(dǎo)知識(shí)。
第四篇為深入理解移動(dòng)平臺(tái)深度學(xué)習(xí),包含第9~12章。
第9章 深入介紹移動(dòng)平臺(tái)性能優(yōu)化主題,在移動(dòng)平臺(tái)對(duì)深度網(wǎng)絡(luò)的速度進(jìn)行優(yōu)化,使移動(dòng)平臺(tái)系統(tǒng)能夠高速低功耗使用模型的具體策略和方法。
第10章 介紹采集、訓(xùn)練數(shù)據(jù)的方法和編程實(shí)戰(zhàn),并通過(guò)TensorFlow完成訓(xùn)練與測(cè)試,最后完成整個(gè)數(shù)據(jù)采集和訓(xùn)練平臺(tái),為開(kāi)發(fā)移動(dòng)平臺(tái)圖像分類系統(tǒng)建立基礎(chǔ)。
第11章 介紹了TensorFlow Lite的代碼體系、構(gòu)建原理、集成方法以及核心代碼與裁剪分析,并介紹模型處理工具,完成移動(dòng)平臺(tái)系統(tǒng)集成。
第12章 介紹流行的移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)框架和接口并輔以實(shí)戰(zhàn),最后總結(jié)并展望未來(lái)。
閱讀前提
本書(shū)采用Ubuntu、Debian以及Windows操作系統(tǒng)作為基本的開(kāi)發(fā)環(huán)境。此外,本書(shū)不會(huì)介紹基礎(chǔ)的編程概念和理論。我們假定讀者在閱讀本書(shū)之前已經(jīng)具備基本的編程技術(shù)以及一定的Python、C/C 編程經(jīng)驗(yàn)(最后一章還需要一些Swift和Java的基本語(yǔ)法知識(shí))。除此之外,數(shù)據(jù)對(duì)深度學(xué)習(xí)來(lái)說(shuō)至關(guān)重要,讀者還應(yīng)該具備基本的實(shí)時(shí)數(shù)據(jù)處理方法和實(shí)踐經(jīng)驗(yàn)。建議讀者先閱讀《Python程序設(shè)計(jì)》和《C 編程思想》以了解編程的基本概念,然后閱讀《高級(jí)C/C 編譯技術(shù)》和《分布式實(shí)時(shí)處理系統(tǒng):原理、架構(gòu)與實(shí)現(xiàn)》來(lái)進(jìn)行提高。
本書(shū)排版約定
在本書(shū)中,讀者會(huì)發(fā)現(xiàn)針對(duì)不同信息類型的文本樣式。下面是這些樣式的示例和解釋。
所有命令行輸入和輸出如下所示:
mkdir mobile-ml-learning
cd mobile-ml-learning
代碼清單通常以以下格式展現(xiàn):
2 #include
3
4 int main()
5 {
6 std::cout << "Hello mobile ML_world!!" << std::endl;
7
8 return 0;
9 }
在正文當(dāng)中,我們可能會(huì)用以下方式拓展所講解的內(nèi)容:
這里是相關(guān)提示的文字。
讀者對(duì)象
本書(shū)適合以下讀者:
移動(dòng)平臺(tái)應(yīng)用程序研發(fā)人員
嵌入式設(shè)備軟件研發(fā)人員
智能系統(tǒng)架構(gòu)設(shè)計(jì)與開(kāi)發(fā)工作者。
對(duì)于研發(fā)人員來(lái)說(shuō),本書(shū)是一本系統(tǒng)學(xué)習(xí)和掌握深度學(xué)習(xí)原理及深入剖析移動(dòng)平臺(tái)開(kāi)發(fā)機(jī)器學(xué)習(xí)系統(tǒng)的指南。對(duì)于架構(gòu)師來(lái)說(shuō),本書(shū)是一本移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)系統(tǒng)架構(gòu)設(shè)計(jì)的實(shí)戰(zhàn)書(shū)。讀者可以深入理解移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)系統(tǒng)的內(nèi)部構(gòu)造以及重要組成部分,并自己設(shè)計(jì)、優(yōu)化和改進(jìn)系統(tǒng)的層次。同時(shí),本書(shū)適合初學(xué)者學(xué)習(xí)機(jī)器學(xué)習(xí)實(shí)戰(zhàn)技術(shù),掌握開(kāi)發(fā)機(jī)器學(xué)習(xí)系統(tǒng)當(dāng)中慣用的編程技巧。
勘誤和支持
雖然筆者在編寫(xiě)本書(shū)的過(guò)程中經(jīng)過(guò)反復(fù)審校,全力確保本書(shū)內(nèi)容的準(zhǔn)確性,但錯(cuò)誤在所難免。書(shū)中難免可能會(huì)出現(xiàn)一些錯(cuò)誤或不準(zhǔn)確的描述,懇請(qǐng)讀者批評(píng)指正。書(shū)中所涉及的所有源代碼及工程都可以從華章官網(wǎng)(www.hzbook.com)或GitHub(https://github.com/samblg/book-mobile-ml)下載,這些項(xiàng)目都是開(kāi)源項(xiàng)目,F(xiàn)在我懷著期盼和忐忑的心情,將這本拙作呈獻(xiàn)給大家,我渴望得到您的認(rèn)可,更渴望和您成為朋友,如果您有任何問(wèn)題和建議,請(qǐng)與我聯(lián)系(電子郵件:samblg@me.com),期待能夠得到您的真摯反饋。
致謝
在創(chuàng)作本書(shū)的過(guò)程中,我得到了很多人的幫助,這里必須要一一感謝,聊表寸心(排名不分先后):顧仁民、侯捷、魯昌華、彭垚、邵良、夏臻新、于俊、彭敏、曠天亮、徐立冰、風(fēng)辰、陳煒、俞歡、Eddie Ruan、龍俊彤、石蓮、徐航、曾玉明、李佳和錢曙光。感謝我在Autodesk的同事和Cisco Systems的朋友。特別是我的良師益友金柳頎,感謝你在技術(shù)問(wèn)題上的嚴(yán)謹(jǐn)精神。還要感謝機(jī)械工業(yè)出版社的高婧雅編輯對(duì)我的信任。
謹(jǐn)以此書(shū)獻(xiàn)給我最親愛(ài)的家人與朋友,你們是我?jiàn)^斗路上堅(jiān)強(qiáng)的后盾。
盧譽(yù)聲
于上海
序一
序二
前言
第一篇 深度學(xué)習(xí)基礎(chǔ)
第1章 向未來(lái)問(wèn)好 2
1.1 機(jī)器學(xué)習(xí)即正義 2
1.1.1 照本宣科 3
1.1.2 關(guān)鍵概念概述 4
1.1.3 數(shù)學(xué)之美 5
1.2 機(jī)器學(xué)習(xí)的場(chǎng)景和任務(wù) 6
1.3 機(jī)器學(xué)習(xí)算法 8
1.3.1 分類算法 8
1.3.2 回歸算法 8
1.3.3 聚類算法 8
1.3.4 關(guān)聯(lián)分析算法 9
1.3.5 集成算法 9
1.3.6 強(qiáng)化算法 10
1.4 如何掌握機(jī)器學(xué)習(xí) 10
1.4.1 學(xué)習(xí)曲線 10
1.4.2 技術(shù)棧 11
1.5 深度學(xué)習(xí) 12
1.5.1 深度學(xué)習(xí)的貢獻(xiàn) 12
1.5.2 深度學(xué)習(xí)框架簡(jiǎn)介 13
1.5.3 安裝使用深度學(xué)習(xí)框架 16
1.5.4 深度學(xué)習(xí)進(jìn)展 22
1.6 走進(jìn)移動(dòng)世界的深度學(xué)習(xí) 25
1.6.1 移動(dòng)平臺(tái)機(jī)器學(xué)習(xí)概述 25
1.6.2 難度和挑戰(zhàn) 26
1.7 本書(shū)框架 26
1.8 本章小結(jié) 27
第2章 機(jī)器學(xué)習(xí)基礎(chǔ) 28
2.1 機(jī)器學(xué)習(xí)的主要任務(wù) 28
2.2 貝葉斯模型 29
2.3 Logistic回歸 33
2.3.1 線性回歸 33
2.3.2 幾率與Logit 35
2.3.3 Logistic回歸 38
2.3.4 背景溯源 39
2.3.5 實(shí)現(xiàn)Logistic回歸 42
2.4 本章小結(jié) 44
第3章 人工神經(jīng)網(wǎng)絡(luò) 45
3.1 人工神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介 45
3.2 基本結(jié)構(gòu)與前向傳播 46
3.2.1 神經(jīng)元 46
3.2.2 連接與網(wǎng)絡(luò) 47
3.2.3 神經(jīng)網(wǎng)絡(luò)向量化 48
3.2.4 前向傳播 50
3.3 反向傳播算法 50
3.4 實(shí)現(xiàn)前向神經(jīng)網(wǎng)絡(luò) 53
3.4.1 神經(jīng)網(wǎng)絡(luò)與前向傳播實(shí)現(xiàn) 53
3.4.2 Softmax回歸 60
3.5 稀疏自編碼器 61
3.5.1 引子 61
3.5.2 自編碼器簡(jiǎn)介 61
3.5.3 稀疏自編碼算法 63
3.6 神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)預(yù)處理 64
3.6.1 去均值 64
3.6.2 歸一化 65
3.7 本章小結(jié) 65
第4章 深度網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò) 66
4.1 深度網(wǎng)絡(luò) 66
4.1.1 自我學(xué)習(xí) 66
4.1.2 特征學(xué)習(xí) 67
4.1.3 深度神經(jīng)網(wǎng)絡(luò) 68
4.1.4 逐層貪婪訓(xùn)練方法 69
4.2 卷積神經(jīng)網(wǎng)絡(luò) 70
4.2.1 全連接與部分連接網(wǎng)絡(luò) 70
4.2.2 卷積 70
4.2.3 池化 72
4.2.4 卷積神經(jīng)網(wǎng)絡(luò) 73
4.3 卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn) 73
4.3.1 Layer實(shí)現(xiàn) 74
4.3.2 Net實(shí)現(xiàn) 79
4.3.3 InnerProduct實(shí)現(xiàn) 92
4.3.4 Convolution實(shí)現(xiàn) 95
4.3.5 Pooling實(shí)現(xiàn) 101
4.3.6 定義注冊(cè)頭文件 109
4.4 本章小結(jié) 110
第二篇 移動(dòng)平臺(tái)深度學(xué)習(xí)基礎(chǔ)
第5章 移動(dòng)平臺(tái)深度學(xué)習(xí)框架設(shè)計(jì)與實(shí)現(xiàn) 112
5.1 移動(dòng)平臺(tái)深度學(xué)習(xí)系統(tǒng)開(kāi)發(fā)簡(jiǎn)介 112
5.2 ARM Linux基礎(chǔ)開(kāi)發(fā)環(huán)境 113
5.2.1 通用ARM工具鏈安裝 114
5.2.2 Android NDK安裝 114
5.2.3 樹(shù)莓派工具鏈安裝 115
5.3 TensorFlow Lite介紹 115
5.3.1 TensorFlow Lite特性 115
5.3.2 TensorFlow Lite架構(gòu) 116
5.3.3 TensorFlow Lite代碼結(jié)構(gòu) 117
5.4 移動(dòng)平臺(tái)性能優(yōu)化基礎(chǔ) 118
5.4.1 ARM v8體系結(jié)構(gòu) 119
5.4.2 ARM v8數(shù)據(jù)類型與寄存器 120
5.4.3 Neon指令集介紹 122
5.4.4 ARM v8內(nèi)存模型 124
5.4.5 Neon指令集加速實(shí)例 127
5.5 本章小結(jié) 140
第6章 移動(dòng)平臺(tái)輕量級(jí)網(wǎng)絡(luò)實(shí)戰(zhàn) 141
6.1 適用于移動(dòng)平臺(tái)的輕量級(jí)網(wǎng)絡(luò) 141
6.2 SqueezeNet 142
6.2.1 微觀結(jié)構(gòu) 142
6.2.2 宏觀結(jié)構(gòu) 142
6.2.3 核心思路 143
6.2.4 實(shí)戰(zhàn):用PyTorch實(shí)現(xiàn)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的改進(jìn) 155
6.5.3 網(wǎng)絡(luò)結(jié)構(gòu) 156
6.5.4 實(shí)戰(zhàn):用PyTorch實(shí)現(xiàn)MobileNet V2 157
6.6 本章小結(jié) 161
第三篇 深入理解深度學(xué)習(xí)
第7章 高性能數(shù)據(jù)預(yù)處理實(shí)戰(zhàn) 164
7.1 數(shù)據(jù)預(yù)處理任務(wù) 164
7.1.1 數(shù)據(jù)清理 165
7.1.2 數(shù)據(jù)集成 165
7.1.3 數(shù)據(jù)歸約 165
7.1.4 數(shù)據(jù)變換 166
7.2 數(shù)據(jù)標(biāo)準(zhǔn)化 166
7.3 PCA 167
7.3.1 PCA的現(xiàn)實(shí)問(wèn)題 167
7.3.2 PCA的計(jì)算方法 167
7.3.3 PCA的數(shù)學(xué)理論基礎(chǔ) 169
7.4 在Hurricane之上實(shí)現(xiàn)PCA 170
7.4.1 Hurricane實(shí)時(shí)處理系統(tǒng) 171
7.4.2 實(shí)現(xiàn)Hurricane Topology 172
7.4.3 實(shí)現(xiàn)PCA 178
7.5 本章小結(jié) 192
第8章 基于深度神經(jīng)網(wǎng)絡(luò)的物體檢測(cè)與識(shí)別 193
8.1 模式識(shí)別與物體識(shí)別 193
8.1.1 模式識(shí)別 193
8.1.2 模式識(shí)別系統(tǒng) 194
8.1.3 傳統(tǒng)模式識(shí)別方法 194
8.1.4 深度學(xué)習(xí)模式識(shí)別方法 197
8.2 圖像分類 197
8.2.1 LeNet 197
8.2.2 AlexNet 200
8.2.3 數(shù)據(jù)抓取整理 203
8.2.4 數(shù)據(jù)預(yù)處理 204
8.2.5 數(shù)據(jù)訓(xùn)練 206
8.3 目標(biāo)識(shí)別與物體檢測(cè) 207
8.3.1 目標(biāo)識(shí)別簡(jiǎn)介 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 檢測(cè)識(shí)別實(shí)戰(zhàn) 213
8.4.1 Faster R-CNN 214
8.4.2 RetinaNet 230
8.5 移動(dòng)平臺(tái)檢測(cè)識(shí)別實(shí)戰(zhàn) 237
8.5.1 移動(dòng)平臺(tái)系統(tǒng)開(kāi)發(fā)思路 237
8.5.2 基于RetinaNet的檢測(cè)定位實(shí)現(xiàn) 237
8.5.3 基于AlexNet的識(shí)別分類實(shí)現(xiàn) 244
8.5.4 接口設(shè)計(jì)封裝 247
8.6 本章小結(jié) 258
第四篇 深入理解移動(dòng)平臺(tái)深度學(xué)習(xí)
第9章 深入移動(dòng)平臺(tái)性能優(yōu)化 260
9.1 模型壓縮 260
9.2 權(quán)重稀疏化 262
9.2.1 Structured Sparsity Learning 262
9.2.2 Dynamic Network Surgery 262
9.2.3 Dynamic Network Surgery實(shí)現(xiàn) 264
9.3 模型加速 275
9.3.1 半精度與權(quán)重量化 275
9.3.2 深度壓縮 276
9.3.3 二值化網(wǎng)絡(luò) 278
9.3.4 三值化網(wǎng)絡(luò) 280
9.3.5 DoReFa-Net 282
9.3.6 編程實(shí)戰(zhàn) 283
9.4 嵌入式優(yōu)化 287
9.4.1 算法局限與改進(jìn) 287
9.4.2 理論改進(jìn) 287
9.4.3 編程實(shí)戰(zhàn) 288
9.5 嵌入式優(yōu)化代碼實(shí)現(xiàn) 290
9.5.1 量化分析實(shí)現(xiàn) 290
9.5.2 層實(shí)現(xiàn) 302
9.5.3 量化矩陣計(jì)算 309
9.6 本章小結(jié) 313
第10章 數(shù)據(jù)采集與模型訓(xùn)練實(shí)戰(zhàn) 314
10.1 收集海量數(shù)據(jù) 314
10.1.1 搜索引擎工作原理 315
10.1.2 HTTP會(huì)話 316
10.1.3 解決JavaScript渲染問(wèn)題 316
10.2 圖片數(shù)據(jù)爬蟲(chóng)實(shí)現(xiàn) 317
10.2.1 獲取任務(wù) 318
10.2.2 解析圖片 320
10.2.3 圖片存儲(chǔ) 326
10.2.4 圖片去重 327
10.2.5 完成Topology 328
10.3 訓(xùn)練與測(cè)試 330
10.3.1 模型定義 330
10.3.2 訓(xùn)練 334
10.3.3 測(cè)試 342
10.3.4 封裝 344
10.4 本章小結(jié) 345
第11章 移動(dòng)和嵌入式平臺(tái)引擎與工具實(shí)戰(zhàn) 346
11.1 TensorFlow Lite構(gòu)建 346
11.2 集成TensorFlow Lite 357
11.3 核心實(shí)現(xiàn)分析 358
11.3.1 解釋器代碼分析 358
11.3.2 圖代碼分析 373
11.3.3 操作符注冊(cè) 381
11.3.4 操作符擴(kuò)展實(shí)現(xiàn) 384
11.3.5 計(jì)算與優(yōu)化模塊 399
11.4 模型處理工具 407
11.5 本章小結(jié) 425
第12章 移動(dòng)平臺(tái)框架與接口實(shí)戰(zhàn) 426
12.1 Core ML 426
12.1.1 準(zhǔn)備數(shù)據(jù)和生成模型 427
12.1.2 App實(shí)戰(zhàn):引入Core ML實(shí)現(xiàn) 430
12.2 Android Neural Networks API 437
12.2.1 等等,Google還有一個(gè)ML Kit 437
12.2.2 NNAPI編程模型 437
12.2.3 創(chuàng)建網(wǎng)絡(luò)與計(jì)算 439
12.2.4 JNI封裝與調(diào)用 451
12.2.5 App實(shí)戰(zhàn):集成NNAPI 454
12.3 實(shí)戰(zhàn):實(shí)現(xiàn)Android圖像分類器App 459
12.3.1 JNI封裝 459
12.3.2 Java調(diào)用 474
12.4 未來(lái)之路 479
12.5 本章小結(jié) 480