為什么要寫這本書
近10年,以深度學習為代表的機器學習技術在圖像處理、語音識別、自然語言處理等領域取得了非常多的突破,這離不開深度學習模型結構設計,尤其是深度卷積神經(jīng)網(wǎng)絡結構的發(fā)展。
早期,以AlexNet和VGGNet為代表的模型結構設計往往在提升深度和寬度上做努力,這提升了模型在圖像分類等基礎任務上的性能,但一味地加深加寬網(wǎng)絡并不能持續(xù)提高模型的性能,甚至會面臨因優(yōu)化困難而導致模型性能下降的問題。隨后,以跳層連接為核心思想的殘差網(wǎng)絡模型在工業(yè)界和學術界取得了成功,成了更好的基礎模型,被廣泛應用于各類任務。
移動端對于模型的體積和運行速度非常敏感,以MobileNet為代表的分組卷積模型和以1×1卷積為核心的維度變換技術在模型壓縮應用中占據(jù)了非常重要的位置。為了節(jié)約計算,研究者們還提出了對不同難度的輸入樣本動態(tài)調(diào)整結構的新奇設計思想。
為了提高對不同尺度目標的檢測能力,多尺度設計和非正常卷積被廣泛研究,每個從事相關研究的技術人員都掌握這些知識。
這幾年,生成對抗網(wǎng)絡從學術界走向了工業(yè)界,不僅帶來了很多新的研究領域和應用,還被用于許多基礎任務輔助提升相關模型的性能。
另外,多輸入網(wǎng)絡、三維卷積、時序網(wǎng)絡等在各自的領域都發(fā)揮著重要作用。
如何系統(tǒng)性地了解深度學習模型的發(fā)展,同時緊隨理論進行全面的實踐,這是筆者一直研究的問題,也是本書要解決的問題。
關于本書作者
本書作者龍鵬,筆名言有三,畢業(yè)于中國科學院,有超過5年的深度學習領域從業(yè)經(jīng)驗,以及超過6年的計算機視覺從業(yè)經(jīng)驗,創(chuàng)辦了微信公眾號《有三AI》和知識星球《有三AI》等知識生態(tài),目前已經(jīng)全職做內(nèi)容輸出,于2019年花費大半年時間總結多年的知識積累和深度學習項目經(jīng)驗并撰寫了這本書。
本書聚焦于深度學習模型設計問題,在本書出版之前,筆者在所維護的微信公眾號、知乎、阿里天池、知識星球等平臺做出了很多的分享,本書可以作為對這些分享的一個更加系統(tǒng)的總結。讀者也可以持續(xù)關注筆者的以上平臺,獲取更新的知識。
因受筆者水平和成書時間所限,本書難免存有疏漏和錯誤之處,敬請大家關注我們的內(nèi)容生態(tài),并溝通指正。
本書特色
1.循序漸進,內(nèi)容系統(tǒng)
本書首先從計算機視覺、圖像處理的背景和基礎理論開始介紹,然后過渡到深度學習基礎。在介紹深度學習模型設計的內(nèi)容時,筆者首先針對深度學習模型的深度、寬度等基礎維度分章節(jié)進行了深刻的原理分析和實踐。隨后對于性能優(yōu)良的殘差網(wǎng)絡、移動端高效的分組網(wǎng)絡、各類任務中常見的多尺度和非規(guī)則卷積技術進行了介紹,并對多輸入網(wǎng)絡、時序網(wǎng)絡、三維卷積、動態(tài)變化的網(wǎng)絡、生成對抗網(wǎng)絡等各類模型進行了原理介紹和實踐,覆蓋了大量應用場景。本書內(nèi)容由淺入深,適合系統(tǒng)性進階學習。
2.內(nèi)容全面與前沿
本書共14章,其中第4~14章針對深度學習模型中的各類設計思想進行了詳細的介紹,時間跨度長達數(shù)十年,覆蓋了從卷積神經(jīng)網(wǎng)絡的誕生到學術界和工業(yè)界的最新發(fā)展等內(nèi)容。當然由于篇幅有限,本書還未包含自動化模型設計及圖神經(jīng)網(wǎng)絡等內(nèi)容,這些將在本書的后續(xù)版本及模型優(yōu)化進階書籍中進行介紹。
3.理論與實踐緊密結合
本書完整剖析了深度學習模型設計技術,對應章節(jié)不停留于理論的闡述和簡單的結果展示,而是從夯實理論到完成實戰(zhàn)一氣呵成。相信跟隨本書進行學習,通過筆者對深度學習模型的介紹和設計,讀者一定會受益匪淺。
本書內(nèi)容及體系結構
第1章神經(jīng)網(wǎng)絡和計算機視覺基礎:對計算機視覺基礎、神經(jīng)網(wǎng)絡的核心概念進行了簡單介紹,這是全書的基礎。
第2章深度學習的基礎:簡單介紹了全連接神經(jīng)網(wǎng)絡的局限性和深度學習帶來的突破,重點介紹了深度學習中的優(yōu)化方法,包括激活函數(shù)、正則化方法、歸一化方法、優(yōu)化方法等,旨在讓讀者掌握深度卷積神經(jīng)網(wǎng)絡中的優(yōu)化基礎內(nèi)容。
第3章數(shù)據(jù)集、評測指標與優(yōu)化目標:對本書中頻繁使用的數(shù)據(jù)集和評測指標進行了集中介紹,它使本書更加精簡、結構清晰。
第4章加深網(wǎng)絡,提升模型性能:回顧了經(jīng)典的淺層卷積神經(jīng)網(wǎng)絡Neocognitron,TDNN 及LeNet系列,介紹了AlexNet和以VGGNet為代表的網(wǎng)絡在提升模型深度后帶來的模型性能提升,探索了需要更深的網(wǎng)絡結構的原因,從理論和實踐分析了網(wǎng)絡的深度對模型性能的影響。
第5章1×1卷積,通道維度升降的利器:討論了特征通道的信息融合方式,詳細介紹了以1×1卷積為核心的維度變換技術在模型壓縮中的應用,實踐分析了1×1卷積在瓶頸結構設計和提升模型表達能力中的應用。
第6章加寬網(wǎng)絡,提升模型性能:介紹了需要更寬的網(wǎng)絡結構的原因,總結了經(jīng)典模型的寬度設計思想,從理論和實踐分析了網(wǎng)絡寬度對模型性能的影響。
第7章殘差連接,深層網(wǎng)絡收斂的關鍵:介紹了殘差連接的基本結構和歷史由來,探索了殘差網(wǎng)絡有效性的原理,總結了殘差網(wǎng)絡的主要結構演變,實踐分析了它在圖像分割任務中的作用。
第8章分組卷積與卷積拆分,移動端高效率經(jīng)典模型:介紹了通道分組與卷積拆分的思想,總結了分組網(wǎng)絡的各類結構演變,實踐了分組卷積在高效模型設計中的應用。
第9章多尺度網(wǎng)絡與非正常卷積,更豐富的感受野與不變性:介紹了目標的常見變換及獲取不變性的方法,總結了常見的多尺度設計和帶孔卷積、可變形卷積等非規(guī)則的卷積設計思想,實踐分析了空間變換網(wǎng)絡對各種變換的學習能力。
第10章多輸入網(wǎng)絡,圖像檢索和排序的基準模型:分析了多輸入網(wǎng)絡的應用場景,介紹了其中常見的多輸入結構,實踐了多輸入模型在目標跟蹤中的應用。
第11章時序神經(jīng)網(wǎng)絡,有記憶的網(wǎng)絡更聰明:介紹了常見的時序模型,包括單向和雙向的RNN模型、LSTM模型,對其在視頻分類中的應用進行了實踐。
第12章卷積從二維變成三維,實現(xiàn)升維打擊:介紹了三維卷積的基本原理及其在視頻分類和三維醫(yī)學圖像中的應用,使用三維卷積完成了一個視頻分類任務。
第13章動態(tài)推理與注意力機制,網(wǎng)絡因樣本而異:介紹了在訓練和推理過程中拓撲結構會動態(tài)變化的網(wǎng)絡結構,介紹了注意力機制網(wǎng)絡,實踐分析了動態(tài)推理網(wǎng)絡BranchyNet在節(jié)省模型計算量任務中的表現(xiàn)。
第14章生成對抗網(wǎng)絡:生成對抗網(wǎng)絡是近幾年深度學習領域的重要新進展,本章介紹了生成對抗網(wǎng)絡的基本原理,闡述了生成對抗網(wǎng)絡的優(yōu)化目標、模型結構發(fā)展,并對圖像生成任務進行了簡單實踐。
本書讀者對象
本書是一本專門介紹深度學習模型,尤其是深度卷積神經(jīng)網(wǎng)絡在計算機視覺領域應用的書籍,因此對讀者的基礎有一定的要求。
首先,讀者必須要具備基本的數(shù)學知識,包括概率論、最優(yōu)化理論等。
其次,讀者需要具備基本的傳統(tǒng)數(shù)字圖像處理知識和計算機視覺理論知識。
最后,讀者需要具備Python等編程能力,掌握Caffe、TensorFlow、Pytorch等主流的深度學習框架。
本書適合以下讀者:
學習深度學習相關技術的學生;
講授深度學習理論和實踐課程的老師、培訓機構;
從事或即將從事深度學習相關工作的研究人員和工程師;
對深度學習模型的整個發(fā)展脈絡和核心設計思想感興趣,想系統(tǒng)性了解和學習的各行業(yè)人員。
致謝
雖然筆者獨立完成了本書的寫作,但在這個過程中也得到了一些幫助。
感謝電子工業(yè)出版社的米俊萍編輯的信任,聯(lián)系我寫作本書,并在后續(xù)的編輯校稿過程中做了大量工作。
感謝有三AI公眾號和有三AI知識星球的忠實讀者們,是你們的閱讀和付費支持讓我有了繼續(xù)前行的力量。
感謝本書中GitHub開源項目的貢獻者,是你們無私的技術分享,讓更多人因此受益,這是這個技術時代最偉大的事情。感謝前赴后繼提出書中各種方法的研究人員,因為你們的辛苦付出才有了本書的內(nèi)容。
感謝我的家人的寬容,因為事業(yè),給你們的時間很少,希望以后會做得更好。
有三
于北京
2019年12月31日
第1章 神經(jīng)網(wǎng)絡和計算機視覺基礎
第1章 神經(jīng)網(wǎng)絡和計算機視覺基礎 1
1.1 計算機視覺 1
1.1.1 研究視覺的重要性 1
1.1.2 生物學視覺原理與視覺分層理論 2
1.2 數(shù)字圖像基礎 3
1.2.1 數(shù)字圖像基礎概述 3
1.2.4 數(shù)字圖像處理基礎 7
1.3 神經(jīng)網(wǎng)絡基礎 11
1.3.1 生物神經(jīng)元與人工神經(jīng)網(wǎng)絡 12
1.3.2 感知機是神經(jīng)網(wǎng)絡嗎 12
1.3.3 BP算法 16
第2章 深度學習的基礎 20
2.1 全連接神經(jīng)網(wǎng)絡的局限性 20
2.1.1 學習原理的缺陷 20
2.1.2 全連接神經(jīng)網(wǎng)絡的結構缺陷 21
2.1.3 高性能的傳統(tǒng)機器學習算法 22
2.2 深度學習第三次復興簡史 22
2.2.1 互聯(lián)網(wǎng)與大數(shù)據(jù)來了 23
2.2.2 GPU的普及 23
2.2.3 深層神經(jīng)網(wǎng)絡華麗歸來 24
2.2.4 語音識別的重大突破 25
2.2.4 圖像識別的重大突破 26
2.2.5 自然語言處理的重大突破 28
2.3 卷積神經(jīng)網(wǎng)絡基礎 29
2.3.1 卷積操作 29
2.3.2 反卷積操作 30
2.3.3 卷積神經(jīng)網(wǎng)絡基本概念 31
2.3.4 卷積神經(jīng)網(wǎng)絡的核心思想 33
2.3.5 卷積神經(jīng)網(wǎng)絡的基本結構配置 33
2.4 深度學習優(yōu)化基礎 37
2.4.1 激活模型與常用激活函數(shù) 38
2.4.2 參數(shù)初始化方法 43
2.4.3 歸一化方法 45
2.4.4 池化 49
2.4.5 最優(yōu)化方法 50
2.4.6 學習率策略 54
2.4.7 正則化方法 57
2.5 深度學習主流開源框架 60
2.5.1 Caffe 60
2.5.2 TensorFlow 61
2.5.3 Pytorch 61
2.5.4 Theano 62
2.5.5 Keras 62
2.5.6 MXNet 63
2.5.7 Chainer 63
參考文獻 64
第3章 數(shù)據(jù)集、評測指標與優(yōu)化目標 66
3.1 數(shù)據(jù)集 66
3.1.1 分類數(shù)據(jù)集MNIST 66
3.1.2 ImageNet 66
3.1.3 分類數(shù)據(jù)集GHIM-10k 67
3.1.4 分類數(shù)據(jù)集Place20 67
3.1.5 肖像分割數(shù)據(jù)集 68
3.1.6 視頻分類數(shù)據(jù)集UCF101 68
3.1.7 目標跟蹤數(shù)據(jù)集ImageNet VIDEO 68
3.2 評測指標 69
3.2.1 分類評測指標 69
3.2.2 檢索與回歸評測指標 73
3.2.3 圖像生成評測指標 75
3.3 優(yōu)化目標 76
3.3.1 分類任務損失 76
3.3.2 回歸任務損失 78
參考文獻 80
第4章 加深網(wǎng)絡,提升模型性能 81
4.1 經(jīng)典的淺層卷積神經(jīng)網(wǎng)絡 81
4.1.1 Neocognitron網(wǎng)絡 81
4.1.2 TDNN 83
4.1.3 Cresceptron網(wǎng)絡 83
4.1.4 LeNet系列 84
4.2 經(jīng)典網(wǎng)絡的深度設計 87
4.2.1 AlexNet 87
4.2.2 從AlexNet到VGGNet的升級 90
4.2.3 為什么需要更深的網(wǎng)絡 93
4.3 實驗:網(wǎng)絡深度對分類模型性能的影響 94
4.3.1 基準模型 94
4.3.2 不同學習率策略與優(yōu)化方法 96
4.3.3 標準卷積模型網(wǎng)絡深度影響實驗 104
4.3.4 MobileNet網(wǎng)絡深度影響實驗 111
4.3.5 總結 113
參考文獻 114
第5章 1×1卷積,通道維度升降的利器 115
5.1 特征通道與信息融合 115
5.1.1 通道內(nèi)特征能做什么 115
5.1.2 通道間特征能做什么 116
5.2 1×1卷積及其應用 117
5.2.1 什么是1×1卷積 117
5.2.2 1×1卷積與瓶頸結構 117
5.2.3 1×1卷積與SqueezeNet 118
5.3 1×1卷積在瓶頸結構中的作用 120
5.3.1 基準模型 120
5.3.2 瓶頸結構探索 126
5.3.3 訓練結果 143
5.4 1×1卷積在增強網(wǎng)絡表達能力中的作用 145
5.4.1 基準模型 145
5.4.2 網(wǎng)絡配置 146
5.4.3 實驗結果 146
參考文獻 148
第6章 加寬網(wǎng)絡,提升模型性能 149
6.1 為什么需要更寬的網(wǎng)絡結構 149
6.2 經(jīng)典模型的網(wǎng)絡寬度設計思想 149
6.2.1 調(diào)整通道數(shù)量 150
6.2.2 多分支網(wǎng)絡結構設計 152
6.2.3 通道補償技術 154
6.3 實驗:網(wǎng)絡寬度對模型性能的影響 155
6.3.1 實驗背景 155
6.3.2 訓練結果 161
6.3.3 總結 166
參考文獻 166
第7章 殘差連接,深層網(wǎng)絡收斂的關鍵 167
7.1 殘差連接 167
7.1.1 什么是殘差連接 167
7.1.2 為什么殘差連接有效 169
7.2 殘差網(wǎng)絡結構發(fā)展和應用 171
7.2.1 密集連接的殘差網(wǎng)絡結構 171
7.2.2 多分支殘差結構 173
7.2.3 殘差連接與多尺度信息融合 174
7.3 跳層連接在圖像分割中的應用 175
7.3.1 數(shù)據(jù)集與基準模型 175
7.3.2 Allconv5_SEG實驗 184
7.3.3 增加跳層連接 186
參考文獻 199
第8章 分組卷積與卷積拆分,移動端高效率經(jīng)典模型 201
8.1 卷積拆分與分組卷積 201
8.1.1 卷積拆分 201
8.1.2 分組卷積 201
8.2 分組卷積結構 202
8.2.1 簡單的通道分組網(wǎng)絡 203
8.2.2 級連通道分組網(wǎng)絡 204
8.2.3 多分辨率卷積核通道分組網(wǎng)絡 205
8.2.4 多尺度通道分組網(wǎng)絡 206
8.2.5 多精度通道分組網(wǎng)絡 207
8.3 訓練一個用于圖像分割的實時分組網(wǎng)絡 208
8.3.1 項目背景 208
8.3.2 嘴唇分割模型訓練 208
8.3.3 嘴唇分割模型優(yōu)化 212
參考文獻 219
第9章 多尺度網(wǎng)絡與非正常卷積,更豐富的感受野與不變性 221
9.1 目標常見變換與不變性 221
9.1.1 常見變換 221
9.1.2 從模型本身獲取不變性 221
9.1.3 從數(shù)據(jù)中學習不變性 223
9.2 多尺度網(wǎng)絡結構 224
9.2.1 圖像金字塔 224
9.2.2 多尺度網(wǎng)絡 225
9.3 非正常卷積網(wǎng)絡結構 228
9.3.1 帶孔卷積 228
9.3.2 可變形卷積 229
9.3.3 非局部卷積 230
9.4 STN在可變形手寫數(shù)字中的應用 232
9.4.1 項目背景 232
9.4.2 STN實驗 233
參考文獻 237
第10章 多輸入網(wǎng)絡,圖像檢索和排序的基準模型 238
10.1 什么時候需要多個輸入 238
10.1.1 圖像檢索 238
10.1.2 目標跟蹤 239
10.1.3 相對排序 239
10.2 常見多輸入網(wǎng)絡 240
10.2.1 Siamese網(wǎng)絡 240
10.2.2 Triplet網(wǎng)絡 241
10.3 目標跟蹤Siamese網(wǎng)絡實戰(zhàn) 242
10.3.1 網(wǎng)絡結構 242
10.3.2 數(shù)據(jù)讀取 244
10.3.3 損失函數(shù)和評估指標 247
10.3.4 模型訓練 248
10.3.5 模型測試 249
參考文獻 254
第11章 時序神經(jīng)網(wǎng)絡,有記憶的網(wǎng)絡更聰明 255
11.1 單向RNN和雙向RNN 255
11.1.1 RNN 255
11.1.2 雙向RNN 257
11.2 LSTM 258
11.3 LSTM視頻分類實踐 260
11.3.1 數(shù)據(jù)準備 260
11.3.2 數(shù)據(jù)讀取 260
11.3.3 網(wǎng)絡定義 264
11.3.4 模型訓練結果 269
11.3.5 總結 270
第12章 卷積從二維變成三維,實現(xiàn)升維打擊 271
12.1 三維卷積 271
12.2 三維卷積的應用 272
12.2.1 分類任務 272
12.2.2 圖像分割 274
12.3 一個用于視頻分類的三維卷積網(wǎng)絡 274
12.3.1 基準模型與數(shù)據(jù)集 275
12.3.2 數(shù)據(jù)讀取 278
12.3.3 訓練結果 280
12.3.4 參數(shù)調(diào)試 281
12.3.5 總結 283
參考文獻 283
第13章 動態(tài)推理與注意力機制,網(wǎng)絡因樣本而異 284
13.1 拓撲結構動態(tài)變化的網(wǎng)絡 284
13.1.1 訓練時拓撲結構變化的網(wǎng)絡 284
13.1.2 測試時拓撲結構變化的網(wǎng)絡 285
13.2 注意力機制 288
13.2.1 空間注意力模型 289
13.2.2 通道注意力模型[9] 289
13.2.3 混合注意力模型 290
13.3 基于提前退出機制的BranchyNet分類實戰(zhàn) 291
13.3.1 背景 291
13.3.2 模型定義 292
13.3.3 實驗結果 302
參考文獻 305
第14章 生成對抗網(wǎng)絡 306
14.1 生成對抗網(wǎng)絡的基本原理 306
14.1.1 生成式模型與判別式模型 306
14.1.2 GAN簡介 307
14.2 生成對抗網(wǎng)絡損失的發(fā)展 308
14.2.1 GAN的損失函數(shù)問題 308
14.2.2 GAN的損失函數(shù)改進 309
14.3 生成對抗網(wǎng)絡結構的發(fā)展 310
14.3.1 條件GAN 310
14.3.2 多尺度級連GAN 311
14.3.3 多判別器單生成器GAN 312
14.3.4 多生成器單判別器GAN 313
14.3.5 多生成器多判別器GAN 313
14.4 DCGAN圖像生成實戰(zhàn) 314
14.4.1 項目背景 314
14.4.2 項目解讀 315
14.4.3 實驗結果 319
參考文獻 321