序言
前言
第1篇 基礎知識
第1章 引言 2
1.1 人工智能的新焦點——深度學習 2
1.1.1 人工智能——神話傳說到影視漫畫 2
1.1.2 人工智能的誕生 3
1.1.3 神經科學的研究 4
1.1.4 人工神經網絡的興起 5
1.1.5 神經網絡的第一次寒鼕 6
1.1.6 神經網絡的第一次復興 8
1.1.7 神經網絡的第二次寒鼕 9
1.1.8 2006年——深度學習的起點 10
1.1.9 生活中的深度學習 11
1.1.10 常見深度學習框架簡介 12
1.2 給計算機一雙眼睛——計算機視覺 14
1.2.1 計算機視覺簡史 14
1.2.2 2012年——計算機視覺的新起點 16
1.2.3 計算機視覺的應用 17
1.2.4 常見計算機視覺工具包 19
1.3 基於深度學習的計算機視覺 19
1.3.1 從ImageNet競賽到AlphaGo戰勝李世石——計算機視覺超越人類 19
1.3.2 GPU和並行技術——深度學習和計算視覺發展的加速器 21
1.3.3 基於捲積神經網絡的計算機視覺應用 22
第2章 深度學習和計算機視覺中的基礎數學知識 27
2.1 綫性變換和非綫性變換 27
2.1.1 綫性變換的定義 27
2.1.2 高中教科書中的小例子 28
2.1.3 點積和投影 28
2.1.4 矩陣乘法的幾何意義(1) 30
2.1.5 本徵嚮量和本徵值 34
2.1.6 矩陣乘法的幾何意義(2) 37
2.1.7 奇異值分解 38
2.1.8 綫性可分性和維度 39
2.1.9 非綫性變換 42
2.2 概率論及相關基礎知識 43
2.2.1 條件概率和獨立 43
2.2.2 期望值、方差和協方差 44
2.2.3 熵 45
2.2.4 最大似然估計(Maximum Likelihood Estimation,MLE) 47
2.2.5 KL散度(Kullback–Leibler divergence) 49
2.2.6 KL散度和MLE的聯係 49
2.3 維度的詛咒 50
2.3.1 采樣和維度 50
2.3.2 高維空間中的體積 51
2.3.3 高維空間中的距離 53
2.3.4 中心極限定理和高維樣本距離分布的近似 54
2.3.5 數據實際的維度 56
2.3.6 局部泛化 58
2.3.7 函數對實際維度的影響 59
2.3.8 PCA——什麼是主成分 60
2.3.9 PCA——通過本徵嚮量和本徵值求主成分 60
2.3.10 PCA——通過主成分分析降維 61
2.3.11 PCA——歸一化和相關性係數 63
2.3.12 PCA——什麼樣的數據適閤PCA 64
2.3.13 其他降維手段 65
2.4 捲積 66
2.4.1 點積和捲積 66
2.4.2 一維捲積 67
2.4.3 捲積和互相關 68
2.4.4 二維捲積和圖像響應 69
2.4.5 捲積的計算 70
2.5 數學優化基礎 71
2.5.1 最小值和梯度下降 72
2.5.2 衝量(Momentum) 73
2.5.3 牛頓法 75
2.5.4 學習率和自適應步長 77
2.5.5 學習率衰減(Learning Rate Decay) 78
2.5.6 AdaGrad:每個變量有自己的節奏 78
2.5.7 AdaDelta的進一步改進 79
2.5.8 其他自適應算法 80
2.5.9 損失函數 81
2.5.10 分類問題和負對數似然 82
2.5.11 邏輯迴歸 83
2.5.12 Softmax:將輸齣轉換為概率 84
2.5.13 鏈式求導法則 84
第3章 神經網絡和機器學習基礎 87
3.1 感知機 87
3.1.1 基本概念 87
3.1.2 感知機和綫性二分類 87
3.1.3 激活函數 88
3.2 神經網絡基礎 89
3.2.1 從感知機到神經網絡 89
3.2.2 最簡單的神經網絡二分類例子 90
3.2.3 隱層神經元數量的作用 93
3.2.4 更加復雜的樣本和更復雜的神經網絡 94
3.3 後嚮傳播算法 95
3.3.1 求神經網絡參數的梯度 95
3.3.2 計算圖(Computational Graph) 95
3.3.3 利用後嚮傳播算法計算一個神經網絡參數的梯度 97
3.3.4 梯度消失 99
3.3.5 修正綫性單元(ReLU) 100
3.3.6 梯度爆炸 101
3.3.7 梯度檢查(gradient check) 102
3.3.8 從信息傳播的角度看後嚮傳播算法 103
3.4 隨機梯度下降和批量梯度下降 104
3.4.1 全量數據(full-batch)梯度下降 104
3.4.2 隨機梯度下降(SGD)和小批量數據(mini-batch) 104
3.4.3 數據均衡和數據增加(data augmentation) 106
3.5 數據、訓練策略和規範化 108
3.5.1 欠擬閤和過擬閤 108
3.5.2 訓練誤差和測試誤差 109
3.5.3 奧卡姆剃刀沒有免費午餐 111
3.5.4 數據集劃分和提前停止 112
3.5.5 病態問題和約束 113
3.5.6 L2規範化(L2 Regularization) 113
3.5.7 L1規範化(L1 Regularization) 114
3.5.8 集成(Ensemble)和隨機失活(Dropout) 115
3.6 監督學習、非監督學習、半監督學習和強化學習 117
3.6.1 監督學習、非監督學習和半監督學習 117
3.6.2 強化學習(reinforcement learning) 118
第4章 深度捲積神經網絡 120
4.1 捲積神經網絡 120
4.1.1 基本概念 120
4.1.2 捲積層和特徵響應圖 121
4.1.3 參數共享 123
4.1.4 稀疏連接 124
4.1.5 多通道捲積 125
4.1.6 激活函數 125
4.1.7 池化、不變性和感受野 126
4.1.8 分布式錶徵(Distributed Representation) 128
4.1.9 分布式錶徵和局部泛化 130
4.1.10 分層錶達 131
4.1.11 捲積神經網絡結構 131
4.2 LeNet——第一個捲積神經網絡 132
4.3 新起點——AlexNet 133
4.3.1 網絡結構 133
4.3.2 局部響應歸一化(Local Response Normalization,LRN) 136
4.4 更深的網絡——GoogLeNet 136
4.4.1 1×1捲積和Network In Network 136
4.4.2 Inception結構 138
4.4.3 網絡結構 138
4.4.4 批規一化(Batch Normalization,BN) 140
4.5 更深的網絡——ResNet 142
4.5.1 睏難的深層網絡訓練:退化問題 142
4.5.2 殘差單元 142
4.5.3 深度殘差網絡 144
4.5.4 從集成的角度看待ResNet 144
4.5.5 結構更復雜的網絡 146
第2篇 實例精講
第5章 Python基礎 148
5.1 Python簡介 148
5.1.1 Python簡史 148
5.1.2 安裝和使用Python 149
5.2 Python基本語法 150
5.2.1 基本數據類型和運算 150
5.2.2 容器 153
5.2.3 分支和循環 156
5.2.4 函數、生成器和類 159
5.2.5 map、reduce和filter 162
5.2.6 列錶生成(list comprehension) 163
5.2.7 字符串 163
5.2.8 文件操作和pickle 164
5.2.9 異常 165
5.2.10 多進程(multiprocessing) 165
5.2.11 os模塊 166
5.3 Python的科學計算包——NumPy 167
5.3.1 基本類型(array) 167
5.3.2 綫性代數模塊(linalg) 172
5.3.3 隨機模塊(random) 173
5.4 Python的可視化包——matplotlib 175
5.4.1 2D圖錶 175
5.4.2 3D圖錶 178
5.4.3 圖像顯示 180
第6章 OpenCV基礎 182
6.1 OpenCV簡介 182
6.1.1 OpenCV的結構 182
6.1.2 安裝和使用OpenCV 183
6.2 Python-OpenCV基礎 184
6.2.1 圖像的錶示 184
6.2.2 基本圖像處理 185
6.2.3 圖像的仿射變換 188
6.2.4 基本繪圖 190
6.2.5 視頻功能 192
6.3 用OpenCV實現數據增加小工具 193
6.3.1 隨機裁剪 194
6.3.2 隨機鏇轉 194
6.3.3 隨機顔色和明暗 196
6.3.4 多進程調用加速處理 196
6.3.5 代碼:圖片數據增加小工具 196
6.4 用OpenCV實現物體標注小工具 203
6.4.1 窗口循環 203
6.4.2 鼠標和鍵盤事件 205
6.4.3 代碼:物體檢測標注的小工具 206
第7章 Hello World! 212
7.1 用MXNet實現一個神經網絡 212
7.1.1 基礎工具、NVIDIA驅動和CUDA安裝 212
7.1.2 安裝MXNet 213
7.1.3 MXNet基本使用 214
7.1.4 用MXNet實現一個兩層神經網絡 215
7.2 用Caffe實現一個神經網絡 219
7.2.1 安裝Caffe 219
7.2.2 Caffe的基本概念 220
7.2.3 用Caffe實現一個兩層神經網絡 221
第8章 最簡單的圖片分類——手寫數字識彆 227
8.1 準備數據——MNIST 227
8.1.1 下載MNIST 227
8.1.2 生成MNIST的圖片 227
8.2 基於Caffe的實現 228
8.2.1 製作LMDB數據 229
8.2.2 訓練LeNet-5 230
8.2.3 測試和評估 235
8.2.4 識彆手寫數字 239
8.2.5 增加平移和鏇轉擾動 240
8.3 基於MXNet的實現 242
8.3.1 製作Image Recordio數據 242
8.3.2 用Module模塊訓練LeNet-5 243
8.3.3 測試和評估 245
8.3.4 識彆手寫數字 247
第9章 利用Caffe做迴歸 249
9.1 迴歸的原理 249
9.1.1 預測值和標簽值的歐式距離 249
9.1.2 EuclideanLoss層 250
9.2 預測隨機噪聲的頻率 250
9.2.1 生成樣本:隨機噪聲 250
9.2.2 製作多標簽HDF5數據 252
9.2.3 網絡結構和Solver定義 253
9.2.4 訓練網絡 259
9.2.5 批量裝載圖片並利用GPU預測 260
9.2.6 捲積核可視化 262
第10章 遷移學習和模型微調 264
10.1 吃貨必備——通過Python采集美食圖片 264
10.1.1 通過關鍵詞和圖片搜索引擎下載圖片 264
10.1.2 數據預處理——去除無效和不相關圖片 267
10.1.3 數據預處理——去除重復圖片 267
10.1.4 生成訓練數據 269
10.2 美食分類模型 271
10.2.1 遷移學習 271
10.2.2 模型微調法(Finetune) 272
10.2.3 混淆矩陣(Confusion Matrix) 276
10.2.4 P-R麯綫和ROC麯綫 278
10.2.5 全局平均池化和激活響應圖 284
第11章 目標檢測 288
11.1 目標檢測算法簡介 288
11.1.1 滑窗法 288
11.1.2 PASCAL VOC、mAP和IOU簡介 289
11.1.3 Selective Search和R-CNN簡介 290
11.1.4 SPP、ROI Pooling和Fast R-CNN簡介 291
11.1.5 RPN和Faster R-CNN簡介 293
11.1.6 YOLO和SSD簡介 294
11.2 基於PASCAL VOC數據集訓練SSD模型 296
11.2.1 MXNet的SSD實現 296
11.2.2 下載PASCAL VOC數據集 297
11.2.3 訓練SSD模型 298
11.2.4 測試和評估模型效果 299
11.2.5 物體檢測結果可視化 299
11.2.6 製作自己的標注數據 302
第12章 度量學習 304
12.1 距離和度量學習 304
12.1.1 歐氏距離和馬氏距離 304
12.1.2 歐式距離和餘弦距離 305
12.1.3 非綫性度量學習和Siamese網絡 306
12.1.4 Contrastive Loss:對比損失函數 307
12.2 用MNIST訓練Siamese網絡 307
12.2.1 數據準備 307
12.2.2 參數共享訓練 309
12.2.3 結果和可視化 314
12.2.4 用τ-SNE可視化高維特徵 316
第13章 圖像風格遷移 317
13.1 風格遷移算法簡介 317
13.1.1 通過梯度下降法進行圖像重建 317
13.1.2 圖像風格重建和Gram矩陣 318
13.1.3 圖像風格遷移 320
13.2 MXNet中的圖像風格遷移例子 320
13.2.1 MXNet的風格遷移實現 321
13.2.2 對圖片進行風格遷移 326
· · · · · · (
收起)