全书共13章,分为2篇。第1篇基础知识,介绍了人工智能发展里程、计算机视觉概要、深度学习和计算机视觉中的基础数学知识、神经网络及其相关的机器学习基础、卷积神经网络及其一些常见结构,最后对最前沿的趋势进行了简单探讨。第2篇实例精讲,介绍了Python基础、OpneCV基础、最简单的分类神经网络、图像识别、利用Caffe做回归、迁移学习和模型微调、目标检测、度量学习和图像风格迁移等常见的计算机视觉应用场景。从第5章开始包含了很多有趣和实用的代码示例。从第7章开始的所有实例都基于当前最流行的深度学习框架中的Caffe和MXNet,其中包含了作者原创的大量代码和搜集的数据,这些代码和作者训练好的部分模型已分享到本书github页面上供读者自行下载。
封面图
目录
- 序言
- 前言
- 第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.82006年——深度学习的起点 10
- 1.1.9生活中的深度学习 11
- 1.1.10常见深度学习框架简介 12
- 1.2给计算机一双眼睛——计算机视觉 14
- 1.2.1计算机视觉简史 14
- 1.2.22012年——计算机视觉的新起点 16
- 1.2.3计算机视觉的应用 17
- 1.2.4常见计算机视觉工具包 19
- 1.3基于深度学习的计算机视觉 19
- 1.3.1从ImageNet竞赛到AlphaGo战胜李世石——计算机视觉超越人类 19
- 1.3.2GPU和并行技术——深度学习和计算视觉发展的加速器 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.5KL散度(Kullback–Leibler divergence) 49
- 2.2.6KL散度和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.8PCA——什么是主成分 60
- 2.3.9PCA——通过本征向量和本征值求主成分 60
- 2.3.10PCA——通过主成分分析降维 61
- 2.3.11PCA——归一化和相关性系数 63
- 2.3.12PCA——什么样的数据适合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.6AdaGrad:每个变量有自己的节奏 78
- 2.5.7AdaDelta的进一步改进 79
- 2.5.8其他自适应算法 80
- 2.5.9损失函数 81
- 2.5.10分类问题和负对数似然 82
- 2.5.11逻辑回归 83
- 2.5.12Softmax:将输出转换为概率 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.6L2规范化(L2 Regularization) 113
- 3.5.7L1规范化(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.2LeNet——第一个卷积神经网络 132
- 4.3新起点——AlexNet 133
- 4.3.1网络结构 133
- 4.3.2局部响应归一化(Local Response Normalization,LRN) 136
- 4.4更深的网络——GoogLeNet 136
- 4.4.11×1卷积和Network In Network 136
- 4.4.2Inception结构 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.1Python简介 148
- 5.1.1Python简史 148
- 5.1.2安装和使用Python 149
- 5.2Python基本语法 150
- 5.2.1基本数据类型和运算 150
- 5.2.2容器 153
- 5.2.3分支和循环 156
- 5.2.4函数、生成器和类 159
- 5.2.5map、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.11os模块 166
- 5.3Python的科学计算包——NumPy 167
- 5.3.1基本类型(array) 167
- 5.3.2线性代数模块(linalg) 172
- 5.3.3随机模块(random) 173
- 5.4Python的可视化包——matplotlib 175
- 5.4.12D图表 175
- 5.4.23D图表 178
- 5.4.3图像显示 180
- 第6章OpenCV基础 182
- 6.1OpenCV简介 182
- 6.1.1OpenCV的结构 182
- 6.1.2安装和使用OpenCV 183
- 6.2Python-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.3MXNet基本使用 214
- 7.1.4用MXNet实现一个两层神经网络 215
- 7.2用Caffe实现一个神经网络 219
- 7.2.1安装Caffe 219
- 7.2.2Caffe的基本概念 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.2EuclideanLoss层 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.4P-R曲线和ROC曲线 278
- 10.2.5全局平均池化和激活响应图 284
- 第11章目标检测 288
- 11.1目标检测算法简介 288
- 11.1.1滑窗法 288
- 11.1.2PASCAL VOC、mAP和IOU简介 289
- 11.1.3Selective Search和R-CNN简介 290
- 11.1.4SPP、ROI Pooling和Fast R-CNN简介 291
- 11.1.5RPN和Faster R-CNN简介 293
- 11.1.6YOLO和SSD简介 294
- 11.2基于PASCAL VOC数据集训练SSD模型 296
- 11.2.1MXNet的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.4Contrastive 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.2MXNet中的图像风格迁移例子 320
- 13.2.1MXNet的风格迁移实现 321
- 13.2.2对图片进行风格迁移 326