深度学习计算机视觉
豆瓣
[埃及] 穆罕默德·埃尔根迪(Mohamed Elgendy) 译者: 刘升容 / 安丹 …
简介
计算机视觉有多先进?开一开特斯拉就知道了。深度学习技术已在人脸识别、交互式仿真和医学成像方面取得了令人兴奋的突破,但最让人心潮澎湃的当属自动驾驶技术。如今,自动驾驶的汽车已经能在高速上畅意驰骋并对各种复杂路况做出灵活反应了。
计算机如何“理解”它所“看到”的东西?本书试图将深度学习应用于计算机视觉以回答该问题。本书仅用高中代数知识阐明视觉直觉背后的概念。你将了解如何使用深度学习架构来构建视觉系统应用程序,以实现图像生成和人脸识别功能。
主要内容
图像分类和目标检测
先进的深度学习架构
迁移学习与生成对抗网络
DeepDream和神经风格迁移
视觉嵌入和图像搜索
阅读门槛
本书适用于Python中级程序员。
目录
第Ⅰ部分 深度学习基础
1 章 概述••••••••••••••••••••••••••••••••••••••3
1.1 计算机视觉••••••••••••••••••• 4
1.1.1 视觉感知的定义••••••••• 4
1.1.2 视觉系统•••••••••••••••••• 4
1.1.3 感知设备•••••••••••••••••• 6
1.1.4 解译设备•••••••••••••••••• 7
1.2 CV 应用••••••••••••••••••••••• 8
1.2.1 图像分类•••••••••••••••••• 9
1.2.2 目标检测与定位••••••••10
1.2.3 生成艺术(风格迁移) •••11
1.2.4 图像生成•••••••••••••••••11
1.2.5 人脸识别•••••••••••••••••12
1.2.6 图片推荐系统•••••••••••13
1.3 计算机视觉管道概览•••••• 14
1.4 图像输入••••••••••••••••••••• 15
1.4.1 图像的函数表达••••••••16
1.4.2 计算机读取图像••••••••17
1.4.3 彩色图像•••••••••••••••••17
1.5 图像处理••••••••••••••••••••• 19
1.6 特征提取••••••••••••••••••••• 21
1.6.1 计算机视觉中特征的
定义•••••••••••••••••••••••22
1.6.2 有用特征的定义••••••••23
1.6.3 手动与自动的特征
提取•••••••••••••••••••••••25
1.7 分类器学习算法•••••••••••• 27
1.8 本章小结••••••••••••••••••••• 28
第2 章 深度学习和神经网络••••••••• 29
2.1 理解感知机•••••••••••••••••• 30
2.1.1 感知机的定义•••••••••••31
2.1.2 感知机的学习机制•••••34
2.1.3 单层感知机的
局限性••••••••••••••••••••35
2.2 多层感知机•••••••••••••••••• 36
2.2.1 多层感知机架构••••••••37
2.2.2 关于隐藏层••••••••••••••38
2.2.3 隐藏层的设计•••••••••••38
2.2.4 本节内容拓展•••••••••••40
2.3 激活函数••••••••••••••••••••• 41
2.3.1 线性转移函数•••••••••••42
2.3.2 Heaviside 阶跃函数
(二元分类器) ••••••••••••43
2.3.3 Sigmoid/logistic
函数•••••••••••••••••••••••43
2.3.4 Softmax 函数••••••••••••46
2.3.5 双_3恄黖衉J曲正切函数
2.5.1 误差函数的定义••••••••55
2.5.2 误差函数的意义••••••••55
2.5.3 误差为正的必要性•••••55
2.5.4 均方误差损失函数•••••56
2.5.5 交叉熵损失函数••••••••57
2.5.6 关于误差和权重的补充
说明•••••••••••••••••••••••58
2.6 优化算法••••••••••••••••••••• 59
2.6.1 优化的定义••••••••••••••59
2.6.2 批梯度下降••••••••••••••62
2.6.3 随机梯度下降•••••••••••67
2.6.4 小批梯度下降•••••••••••68
2.6.5 梯度下降总结•••••••••••68
2.7 反向传播••••••••••••••••••••• 69
2.7.1 反向传播的定义••••••••70
2.7.2 反向传播总结•••••••••••72
2.8 本章总结••••••••••••••••••••• 73
第3 章 卷积神经网络•••••••••••••••••••••75
3.1 使用MLP 进行图像
分类••••••••••••••••••••••••••• 76
3.1.1 输入层••••••••••••••••••••76
3.1.2 隐藏层••••••••••••••••••••78
3.1.3 输出层••••••••••••••••••••78
3.1.4 组合•••••••••••••••••••••••78
3.1.5 MLP 处理图像的
缺点•••••••••••••••••••••••80
3.2 CNN 架构•••••••••••••••••••• 82
3.2.1 概述•••••••••••••••••••••••83
3.2.2 特征提取详解•••••••••••84
3.2.3 分类详解•••••••••••••••••85
3.3 CNN 的基本组件••••••••••• 85
3.3.1 卷积层••••••••••••••••••••86
3.3.2 池化层或下采样••••••••92
3.3.3 全连接层•••••••••••••••••96
3.4 使用CNN 进行图像
分类••••••••••••••••••••••••••• 98
3.4.1 构建模型体系架构•••••98
3.4.2 参数(权重)的数量••••100
3.5 添加dropout 层以避免
过拟合•••••••••••••••••••••• 101
3.5.1 过拟合定义••••••••••••101
3.5.2 dropout 层定义••••••••102
3.5.3 dropout 层的重要
意义•••••••••••••••••••••102
3.5.4 dropout 层在CNN
架构中的位置•••••••••103
3.6 彩色(3D)图像的卷积•••• 104
3.6.1 彩色图像的卷积••••••105
3.6.2 计算复杂度的变化•••107
3.7 练习项目:彩色图像
分类••••••••••••••••••••••••• 109
3.8 本章总结••••••••••••••••••• 118
第4 章 构造DL 项目以及超参数
调优•••••••••••••••••••••••••••••••••119
4.1 定义性能指标••••••••••••• 120
4.1.1 选择评价模型的最佳
指标•••••••••••••••••••••120
4.1.2 混淆矩阵•••••••••••••••120
4.1.3 精确度和召回率••••••121
4.1.4 F1 得分•••••••••••••••••122
4.2 设计基准模型••••••••••••• 122
4.3 为训练准备数据•••••••••• 124
4.3.1 划分数据集••••••••••••124
4.3.2 数据处理•••••••••••••••125
4.4 评估模型并解释其
性能••••••••••••••••••••••••• 127
4.4.1 诊断过拟合和
欠拟合••••••••••••••••••127
4.4.2 绘制学习曲线•••••••••129
4.4.3 练习项目:构建、
训练和评估网络••••••129
4.5 网络改进和超参数
调优••••••••••••••••••••••••• 132
4.5.1 收集更多数据与超
参数调优•••••••••••••••132
4.5.2 参数与超参数•••••••••133
4.5.3 神经网络超参数••••••133
4.5.4 网络架构•••••••••••••••134
4.6 学习和优化•••••••••••••••• 135
4.6.1 学习率及其衰减
策略•••••••••••••••••••••135
4.6.2 找到最佳学习率的
系统性方法••••••••••••138
4.6.3 学习率衰减和自适应
学习•••••••••••••••••••••138
4.6.4 小批大小•••••••••••••••139
4.7 优化算法••••••••••••••••••• 141
4.7.1 动量梯度下降•••••••••142
4.7.2 Adam ••••••••••••••••••••142
4.7.3 训练轮数和早停
标准•••••••••••••••••••••143
4.7.4 Early stopping••••••••••144
4.8 正则化技术•••••••••••••••• 144
4.8.1 L2 正则化••••••••••••••145
4.8.2 Dropout 层•••••••••••••146
4.8.3 数据增强•••••••••••••••146
4.9 批归一化••••••••••••••••••• 147
4.9.1 协变量偏移问题••••••148
4.9.2 神经网络中的协变量
偏移•••••••••••••••••••••148
4.9.3 批归一化的工作
原理•••••••••••••••••••••149
4.9.4 批归一化在keras 中的
实现•••••••••••••••••••••150
4.9.5 批归一化回顾•••••••••151
4.10 练习项目:实现高准确度
的图像分类•••••••••••••• 151
4.11 本章小结••••••••••••••••• 157
第Ⅱ部分 图像分类和检测
第5 章 先进的CNN 架构•••••••••••• 161
5.1 CNN 设计模式•••••••••••• 162
5.2 LeNet-5 ••••••••••••••••••••• 164
5.2.1 LeNet 架构•••••••••••••164
5.2.2 LeNet-5 在Keras 中的
实现•••••••••••••••••••••165
5.2.3 设置学习超参数••••••167
5.2.4 LeNet 在MNIST 数据
集上的性能••••••••••••168
5.3 AlexNet••••••••••••••••••••• 168
5.3.1 AlexNet 网络架构••••169
5.3.2 AlexNet 的新特性••••169
5.3.3 Keras 中的AlexNet
实现•••••••••••••••••••••171
5.3.4 设置学习超参数••••••174
5.3.5 AlexNet 的性能•••••••174
5.4 VGGNet •••••••••••••••••••• 175
5.4.1 VGGNet 新特性•••••••175
5.4.2 VGGNet 配置••••••••••176
5.4.3 学习超参数••••••••••••179
5.4.4 VGGNet 性能••••••••••179
5.5 Inception 和
GoogLeNet •••••••••••••••• 179
5.5.1 Inception 新特性••••••180
5.5.2 Inception 模块:
Naive 版•••••••••••••••••181
5.5.3 Inception 模块与维数
约减•••••••••••••••••••••182
5.5.4 Inception 体系架构••••184
5.5.5 GoogLeNet 的Keras
实现•••••••••••••••••••••185
5.5.6 学习参数•••••••••••••••190
5.5.7 Inception 在CIFAR
数据集上的性能••••••190
5.6 ResNet •••••••••••••••••••••• 191
5.6.1 ResNet 新特性•••••••••191
5.6.2 残差块••••••••••••••••••193
5.6.3 keras 中的ResNet
实现•••••••••••••••••••••195
5.6.4 学习超参数••••••••••••197
5.6.5 ResNet 在CIFAR
数据集上的性能••••••197
5.7 本章小结••••••••••••••••••• 198
第6 章 迁移学习••••••••••••••••••••••••••199
6.1 迁移学习的必要性••••••• 200
6.2 迁移学习的定义•••••••••• 201
6.3 迁移学习的工作原理•••• 207
6.3.1 神经网络如何学习
特征•••••••••••••••••••••208
6.3.2 网络后期提取的特征
的可迁移性••••••••••••210
6.4 迁移学习方法••••••••••••• 210
6.4.1 使用预训练网络作为
分类器••••••••••••••••••210
6.4.2 使用预训练网络作为
特征提取器••••••••••••212
6.4.3 微调•••••••••••••••••••••213
6.5 选择合适的迁移学习
方法••••••••••••••••••••••••• 215
6.5.1 场景1:目标数据集
较小且与源数据集
相似•••••••••••••••••••••215
6.5.2 场景2:目标数据集
较大且与源数据集
相似•••••••••••••••••••••216
6.5.3 场景3:目标数据集
较小且与源数据集
不同•••••••••••••••••••••216
6.5.4 场景4:目标数据集
较大且与源数据集
不同•••••••••••••••••••••216
6.5.5 迁移学习场景总结•••216
6.6 开源数据集•••••••••••••••• 217
6.6.1 MNIST ••••••••••••••••••217
6.6.2 Fashion-MNIST •••••••218
6.6.3 CIFAR ••••••••••••••••••218
6.6.4 ImageNet •••••••••••••••219
6.6.5 MS COCO ••••••••••••••221
6.6.6 Google Open
Images•••••••••••••••••••222
6.6.7 Kaggle•••••••••••••••••••222
6.7 项目1:预训练网络作为
特征提取器•••••••••••••••• 222
6.8 项目2:微调•••••••••••••• 228
6.9 本章小结••••••••••••••••••• 235
第7 章 使用R-CNN、SSD 和YOLO
进行目标检测•••••••••••••••••• 237
7.1 目标检测的通用框架•••• 238
7.1.1 候选区域•••••••••••••••239
7.1.2 网络预测•••••••••••••••240
7.1.3 非极大值抑制
(NMS) •••••••••••••••••••241
7.1.4 目标检测器的评价
指标•••••••••••••••••••••241
7.2 R-CNN•••••••••••••••••••••• 244
7.2.1 R-CNN ••••••••••••••••••244
7.2.2 Fast R-CNN ••••••••••••248
7.2.3 Faster R-CNN ••••••••••250
7.2.4 R-CNN 家族总结•••••256
7.3 SSD(Single-shot
detector) •••••••••••••••••••• 259
7.3.1 SSD 架构总览•••••••••259
7.3.2 基础网络•••••••••••••••261
7.3.3 多尺度特征层•••••••••263
7.3.4 NMS•••••••••••••••••••••266
7.4 YOLO(you only look
once)(320) ••••••••••••••••• 267
7.4.1 YOLO v3 的工作
机制•••••••••••••••••••••268
7.4.2 YOLOv3 架构•••••••••270
7.5 项目:在自动驾驶中
应用SSD 网络•••••••••••• 272
7.5.1 步骤1:构建模型••••274
7.5.2 步骤2:模型配置••••275
7.5.3 步骤3:创建模型••••276
7.5.4 步骤3:加载数据••••276
7.5.5 步骤5:训练模型••••278
7.5.6 步骤6:可视化
损失•••••••••••••••••••••279
7.5.7 步骤7:预测••••••••••280
7.6 本章小结••••••••••••••••••• 281
第Ⅲ部分 生成模型与视觉嵌入
第8 章 生成对抗网络•••••••••••••••••••285
8.1 GAN 架构•••••••••••••••••• 286
8.1.1 Deep convolutional
GANs(DCGANs) ••••••288
8.1.2 鉴别器模型••••••••••••288
8.1.3 生成器模型••••••••••••290
8.1.4 训练GAN ••••••••••••••293
8.1.5 GAN 极小极大值
函数•••••••••••••••••••••296
8.2 评估GAN 模型••••••••••• 297
8.2.1 Inception score•••••••••298
8.2.2 Fréchet inception distance
(FID)•••••••••••••••••••••298
8.2.3 评估方案选择•••••••••299
8.3 GAN 的主流应用••••••••• 299
8.3.1 文本生成图像(Text-tophoto
synthesis)••••••••299
8.3.2 图像翻译(Pix2Pix
GAN) ••••••••••••••••••••300
8.3.3 图像超分辨率
GAN(SRGAN)•••••••••301
8.3.4 准备好动手了吗••••••302
8.4 练习项目:构建自己的
GAN •••••••••••••••••••••••• 302
8.5 本章小结••••••••••••••••••• 311
第9 章 DeepDream 和神经风格
迁移•••••••••••••••••••••••••••••••• 313
9.1 打开CNN 的黑盒•••••••• 314
9.1.1 CNN 工作原理
回顾•••••••••••••••••••••314
9.1.2 CNN 特征可视化•••••315
9.1.3 特征可视化工具的
实现•••••••••••••••••••••318
9.2 DeepDream •••••••••••••••• 321
9.2.1 DeepDream 算法的工作
原理•••••••••••••••••••••322
9.2.2 DeepDream 的Keras
实现•••••••••••••••••••••324
9.3 神经风格迁移••••••••••••• 327
9.3.1 内容损失•••••••••••••••329
9.3.2 风格损失(style
loss) ••••••••••••••••••••••330
9.3.3 总变分损失(total variance
loss)••••••••••••••••••••••332
9.3.4 网络训练•••••••••••••••332
9.4 本章小结••••••••••••••••••• 333
第10 章 视觉嵌入••••••••••••••••••••••••335
10.1 视觉嵌入的应用•••••••• 336
10.1.1 人脸识别••••••••••••337
10.1.2 图片推荐系统••••••337
10.1.3 目标重识别系统•••339
10.2 学习嵌入••••••••••••••••• 340
10.3 损失函数••••••••••••••••• 341
10.3.1 问题建立和
形式化•••••••••••••••342
10.3.2 交差熵损失•••••••••342
10.3.3 对比损失••••••••••••343
10.3.4 三元组损失•••••••••344
10.3.5 损失的简单实现和
运行分析••••••••••••345
10.4 挖掘信息数据••••••••••• 347
10.4.1 数据加载器•••••••••347
10.4.2 信息型数据挖掘:寻找
有用的三元组••••••349
10.4.3 Batch All(BA)•••••••350
10.4.4 Batch Hard(BH) ••••351
10.4.5 batch weighted
(BW)••••••••••••••••••353
10.4.6 Batch Sample
(BS)•••••••••••••••••••354
10.5 练习项目:训练嵌入
网络••••••••••••••••••••••••• 355
10.5.1 时尚圈:查找相似的
衣服••••••••••••••••••356
10.5.2 车辆重识别•••••••••356
10.5.3 实现••••••••••••••••••357
10.5.4 测试训练的模型•••358
10.6 突破准确度的限制••••• 362
10.7 本章小结••••••••••••••••• 363
参考文献•••••••••••••••••••••••••••••••••••••••• 365
附录A •••••••••••••••••••••••••••••••••••••••••••• 369
A.1 下载代码库••••••••••••••• 369
A.2 安装Anaconda ••••••••••• 369
A.3 设置DL 环境••••••••••••• 370
A.3.1 手动设置你的开发
环境•••••••••••••••••••••370
A.3.2 使用本书的repo 中的
conda 环境••••••••••••••371
A.3.3 保存和加载环境••••••372
A.4 设置AWS EC2 环境•••• 372
A.4.1 创建AWS 账号••••••372
A.4.2 远程连接到此
实例•••••••••••••••••••••373
A.4.3 运行Jupyter
Notebook••••••••••••••••374