PREFACE前 言隨著谷歌的AlphaGo、IBM的Watson和百度的小度機器人等智能產品的問世,人工智能成為大眾熱烈討論的焦點。深度學習作為其中的核心技術之一,經過學術界與工業(yè)界的積極推動,已經被廣泛應用于計算機視覺、語音識別和自然語言處理等諸多領域。如果讀者想了解深度學習的總體概況,可參考作者編寫的《深度學習導論及案例分析》一書。
本書專注討論深度學習中應用非常廣泛的模型卷積神經網絡,該模型特別適用于圖像分類和識別、目標分割和檢測以及人工智能游戲方面,受眾對象包括計算機、自動化、信號處理、機電工程、應用數(shù)學等相關專業(yè)的研究生、教師以及算法工程師和科研工作者。
卷積神經網絡是一種特殊的多層感知器或前饋神經網絡,具有局部連接、權值共享的特點,其中大量神經元按照一定方式組織起來對視野中的交疊區(qū)域產生反應。其前身是日本學者Fukushima在感受野概念的基礎上提出的神經認知機模型。利用神經認知機的思想,LeCun等人在1998年提出了卷積神經網絡的現(xiàn)代雛形LeNet。2012年,Krizhevsky等人取得了卷積神經網絡研究的重大突破,提出了著名的AlexNet。AlexNet在ImageNet的大規(guī)模圖像分類競賽中取得優(yōu)異成績,為深度學習的全面推廣立下了汗馬功勞。隨后,卷積神經網絡模型如雨后春筍般出現(xiàn),如VGGNet、GoogLeNet、SPPNet、ResNet、DenseNet、Faster R-CNN、YOLO、SSD、FCN、PSPNet、Mask R-CNN、SiameaseNet、SqueezeNet、DCGAN、NIN,以及在人工智能游戲中用到的深度強化模型等。
本書的最大特色是對卷積神經網絡進行由淺入深的分類描述,依次包括:現(xiàn)代雛形、突破模型、應變模型、加深模型、跨連模型、區(qū)域模型、分割模型、特殊模型、強化模型和頂尖成就。這種分類框架是在模型概述和預備知識的基礎上逐步展開的,既方便讀者入門學習,又有助于讀者深入鉆研。
本書的另一大特色是結合Caffe或TensorFlow的代碼來說明各種卷積神經網絡模型的具體實現(xiàn)過程,并通過應用案例說明其價值和意義所在。典型的應用案例包括:字符識別、交通標志識別、交通路網提取、大規(guī)模圖像分類、人臉圖像性別分類、圖像目標檢測、圖像語義分割、圖像實例分割、人臉圖像生成、Flappy Bird智能體、AlphaGo的仿效圍棋程序等。讀者可以通過運行各個應用案例的程序代碼和實驗數(shù)據(jù),檢驗其演示效果。
與其他深度學習的書籍相比,本書對卷積神經網絡的內容涵蓋更為廣泛、模型討論更為深入、應用實踐更為細致。特別是,還總結了一些運行卷積神經網絡的配置技巧和操作經驗。比如,在運行Mask R-CNN的時候,需要先安裝讀取COCO數(shù)據(jù)集的程序,然后再進行訓練或測試。在運行SSD的時候,可視化結果只給出了類別編號而沒有給出類別名,作者對此已進行了修改,以方便讀者按照書中所示代碼顯示相應的類別名。把這些經過摸索得到的技巧和經驗分享給讀者,對提高讀者的深度學習技術水平,無疑具有很好的加速作用。
本書是集體努力的成果,主要作者包括北京工業(yè)大學的李玉鑑、張婷、單傳輝、劉兆英、聶小廣和歐軍。他們對全書的內容進行了精心的布局、認真的編寫和細致的整理。同時,曾少鋒、劉博文、穆紅章、余華擎和方皓達等人在文獻資料、實現(xiàn)代碼和軟件工具的收集方面也提供了積極的幫助。此外,華章公司的溫莉芳副總經理和張夢玲編輯對本書的排版提出了許多寶貴的意見。最后,需要特別感謝家人的支持,他們也在不知不覺中以各種方式對此書出版做出了貢獻。
限于作者水平,本書難免在內容取材和結構編排上有不妥之處,希望讀者不吝賜教,提出寶貴的批評和建議,我們將不勝感激。
作 者2018年4月于北京工業(yè)大學
CONTENTS
目 錄
前言
第1章 概述 1
1.1 深度學習的起源和發(fā)展 1
1.2 卷積神經網絡的形成和演變 4
1.3 卷積神經網絡的應用和影響 6
1.4 卷積神經網絡的缺陷和視圖 9
1.5卷積神經網絡的GPU實現(xiàn)和cuDNN庫 10
1.6 卷積神經網絡的平臺和工具 10
1.7 本書的內容結構和案例數(shù)據(jù) 13
1.7.1 內容結構 13
1.7.2 案例數(shù)據(jù) 15
第2章 預備知識 22
2.1 激活函數(shù) 22
2.2 矩陣運算 23
2.3 導數(shù)公式 24
2.4 梯度下降算法 25
2.5 反向傳播算法 26
2.5.1 通用反向傳播算法 27
2.5.2 逐層反向傳播算法 28
2.6 通用逼近定理 31
2.7 內外卷積運算 31
2.8 膨脹卷積運算 32
2.9 上下采樣運算 33
2.10 卷積面計算 34
2.11 池化面計算 36
2.12 局部響應歸一化 36
2.13 權值偏置初始化 37
2.14 丟失輸出 37
2.15 丟失連接 38
2.16 隨機梯度下降算法 39
2.17 塊歸一化 39
2.18 動態(tài)規(guī)劃算法 40
第3章卷積神經網絡的現(xiàn)代雛形LeNet 41
3.1 LeNet的原始模型 41
3.2 LeNet的標準模型 43
3.3 LeNet的學習算法 44
3.4 LeNet的Caffe代碼實現(xiàn)及說明 46
3.5 LeNet的手寫數(shù)字識別案例 54
3.6 LeNet的交通標志識別案例 58
3.6.1交通標志數(shù)據(jù)集的格式轉換 58
3.6.2 交通標志的識別分類 60
3.7 LeNet的交通路網提取案例 63
3.7.1 交通路網的人工標注 64
3.7.2 交通路網的圖像塊分類 67
3.7.3交通路網的圖像塊分類LeNet 69
3.7.4交通路網的自動提取代碼及說明 71
3.7.5交通路網的自動提取程序運行結果 75
第4章卷積神經網絡的突破模型 78
4.1 AlexNet的模型結構 78
4.2AlexNet的Caffe代碼實現(xiàn)及說明 82
4.3AlexNet的Caffe大規(guī)模圖像分類案例及演示效果 95
4.4AlexNet的TensorFlow代碼實現(xiàn)及說明 97
4.5AlexNet的TensorFlow大規(guī)模圖像分類案例及演示效果 103
4.6 AlexNet的改進模型ZFNet 107
第5章卷積神經網絡的應變模型 109
5.1 SPPNet的模型結構 109
5.2SPPNet的Caffe代碼實現(xiàn)及說明 112
5.3SPPNet的大規(guī)模圖像分類案例及演示效果 114
第6章卷積神經網絡的加深模型 118
6.1結構加深的卷積網絡VGGNet 118
6.1.1 VGGNet的模型結構 118
6.1.2VGGNet的TensorFlow代碼實現(xiàn)及說明 120
6.1.3VGGNet的物體圖像分類案例 129
6.2結構更深的卷積網絡GoogLeNet 130
6.2.1 GoogLeNet的模型結構 130
6.2.2GoogLeNet的TensorFlow代碼實現(xiàn)及說明 136
6.2.3GoogLeNet的鮮花圖像分類案例 149
第7章卷積神經網絡的跨連模型 154
7.1 快道網絡HighwayNet 154
7.2 殘差網絡ResNet 155
7.2.1 ResNet的模型結構 155
7.2.2ResNet的Caffe代碼實現(xiàn)及說明 157
7.2.3ResNet的大規(guī)模圖像分類案例 163
7.3 密連網絡DenseNet 169
7.3.1 DenseNet的模型結構 169
7.3.2DenseNet的Caffe代碼實現(xiàn)及說明 171
7.3.3DenseNet的物體圖像分類案例 174
7.4 拼接網絡CatNet 178
7.4.1 CatNet的模型結構 178
7.4.2CatNet的Caffe代碼實現(xiàn)及說明 179
7.4.3CatNet的人臉圖像性別分類案例 183
第8章卷積神經網絡的區(qū)域模型 190
8.1 區(qū)域卷積網絡R-CNN 190
8.2快速區(qū)域卷積網絡Fast
R-CNN 191
8.3更快區(qū)域卷積網絡Faster
R-CNN 193
8.3.1Faster R-CNN的模型結構 193
8.3.2Faster R-CNN的TensorFlow代碼實現(xiàn)及說明 196
8.3.3Faster R-CNN的圖像目標檢測案例及演示效果 216
8.4 你只看一次網絡YOLO 220
8.4.1 YOLO的模型結構 220
8.4.2YOLO的TensorFlow代碼實現(xiàn)及說明 226
8.4.3YOLO的圖像目標檢測案例及演示效果 239
8.5 單次檢測器SSD 242
8.5.1 SSD的模型結構 242
8.5.2SSD的TensorFlow代碼實現(xiàn)及說明 245
8.5.3SSD的圖像目標檢測案例及演示效果 260
第9章卷積神經網絡的分割模型 266
9.1 全卷積網絡FCN 266
9.1.1 FCN的模型結構 266
9.1.2FCN的Caffe代碼實現(xiàn)及說明 269
9.1.3FCN的圖像語義和幾何分割案例 272
9.2金字塔場景分析網絡PSPNet 277
9.2.1 PSPNet的模型結構 277
9.2.2PSPNet的TensorFlow代碼實現(xiàn)及說明 282
9.2.3PSPNet的圖像語義分割案例及演示效果 291
9.3掩膜區(qū)域卷積網絡Mask
R-CNN 294
9.3.1Mask R-CNN的模型結構 294
9.3.2Mask R-CNN的Keras和TensorFlow代碼實現(xiàn)及說明 297
9.3.3Mask R-CNN的圖像實例分割案例及演示效果 318
第10章卷積神經網絡的特殊模型 325
10.1 孿生網絡SiameseNet 325
10.1.1SiameseNet的模型結構 325
10.1.2SiameseNet的Caffe代碼實現(xiàn)及說明 326
10.1.3SiameseNet的手寫數(shù)字驗證案例 328
10.2 擠壓網絡SqueezeNet 331
10.2.1SqueezeNet的模型結構 331
10.2.2SqueezeNet的Caffe代碼實現(xiàn)及說明 334
10.2.3SqueezeNet大規(guī)模圖像分類案例 337
10.3深層卷積生成對抗網絡DCGAN 339
10.3.1DCGAN的模型結構 339
10.3.2DCGAN的TensorFlow代碼實現(xiàn)及說明 340
10.3.3DCGAN的CelebA人臉圖像生成案例 345
10.4 網中網NIN 348
10.4.1 NIN的模型結構 348
10.4.2NIN的Caffe代碼實現(xiàn)及說明 350
10.4.3NIN大規(guī)模圖像分類案例 353
第11章卷積神經網絡的強化模型 356
11.1 強化學習的基本概念 356
11.2深度強化學習網絡的學習算法 358
11.3深度強化學習網絡的變種模型 359
11.4深度強化學習網絡的Flappy Bird智能體案例 361
11.4.1笨笨鳥網絡的開發(fā)環(huán)境和工具包 362
11.4.2笨笨鳥網絡的代碼實現(xiàn)及說明 363
11.4.3笨笨鳥網絡的學習訓練過程 367
11.4.4笨笨鳥網絡的演示效果 370
第12章卷積神經網絡的頂尖成就AlphaGo 371
12.1 人工智能棋類程序簡介 371
12.2 AlphaGo的設計原理 373
12.2.1 總體思路 373
12.2.2 訓練流程 374
12.2.3 搜索過程 377
12.3 AlphaGo Zero的新思想 380
12.4仿效AlphaGo的圍棋程序案例MuGo 383
12.4.1 MuGo的開發(fā)環(huán)境 383
12.4.2MuGo的代碼實現(xiàn)及說明 386
12.4.3MuGo的學習訓練過程 401
12.4.4MuGo的演示效果 403
附錄A Caffe在Windows上的?安裝過程 406
附錄B Caffe在Linux上的安裝?過程 409
附錄C TensorFlow在Windows?上的安裝過程 412
附錄D TensorFlow在Linux?上的安裝過程 414
參考文獻 416