本书基于真实数据集,全面系统地阐述现代计算机视觉实用技术、方法和实践,涵盖50多个计算机视觉问题。全书分为四部分:一部分介绍神经网络和PyTorch的基础知识,以及如何使用PyTorch构建并训练神经网络,包括输入数据缩放、批归一化、超参数调整等;第二部分介绍如何使用卷积神经网络、迁移学习等技术解决更复杂的视觉相关问题,包括图像分类、目标检测和图像分割等;第三部分介绍各种图像处理技术,包括自编码器模型和各种类型的GAN模型;第四部分探讨将计算机视觉技术与NLP、强化学习和OpenCV等技术相结合来解决传统问题的新方法。本书内容丰富新颖,语言文字表述清晰,应用实例讲解详细,图例直观形象,适合PyTorch初中级读者及计算机视觉相关技术人员阅读。
编辑推荐
适读人群 :适合PyTorch初中级读者及计算机视觉相关技术人员阅读
深度学习是近年来计算机视觉应用在多个方面取得进步的驱动力。本书以实践为驱动,结合具体应用场景,基于真实数据集全面系统地介绍如何使用PyTorch解决50多个计算机视觉问题。
首先,你将学习使用NumPy和PyTorch从头开始构建神经网络(NN),并了解调整神经网络超参数的最佳实践。然后,你将学习如何使用卷积神经网络(CNN)和迁移学习完成图像分类任务,并且理解其中的工作原理。随后,你将学习二维和三维多目标检测、图像分割、人体姿态估计等多个实际任务,并使用R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO、U-Net、Mask R-CNN、Detectron2等框架实现这些任务。在自编码器和GAN部分,本书将指导你学习面部表情替换、面部图像生成和面部表情处理技术。之后,你将学习如何将计算机视觉与NLP技术(LSTM、transformer等)和强化学习技术(深度Q学习等)相结合,实现OCR、图像标题生成、目标检测和汽车自动驾驶智能体等应用。最后,你将学习如何将神经网络模型部署到AWS云等实际应用场景。
内容简介
本书基于真实数据集,全面系统地阐述现代计算机视觉实用技术、方法和实践,涵盖50多个计算机视觉问题。全书分为四部分:di一部分(第13章)介绍神经网络和PyTorch的基础知识,以及如何使用PyTorch构建并训练神经网络,包括输入数据缩放、批归一化、超参数调整等;第二部分(第410章)介绍如何使用卷积神经网络、迁移学习等技术解决更复杂的视觉相关问题,包括图像分类、目标检测和图像分割等;第三部分(第1113章)介绍各种图像处理技术,包括自编码器模型和各种类型的GAN模型;第四部分(第1418章)探讨将计算机视觉技术与NLP、强化学习和OpenCV等技术相结合来解决传统问题的新方法。本书内容丰富新颖,语言文字表述清晰,应用实例讲解详细,图例直观形象,适合PyTorch初中级读者及计算机视觉相关技术人员阅读。
前 言
人工智能(AI)已经成为一股强大的力量,正在推动一些日常使用的现代应用程序的发展,正在以一种曾经只存在于我们幻想中的方式重塑这个世界。人工智能曾经仅存在于少数实验室,隶属于计算机科学学科。然而,由于优秀理论的爆炸式发展、计算能力的提高和数据的可用性,该领域自2000年以来开始呈指数级增长,而且没有任何放缓的迹象。
人工智能已经一次又一次地证明,只要拥有正确的算法和足够的数据,它就可以在有限的人工干预下自学任务,并产生与人类判断相匹敌甚至有时超过人类判断的结果。无论你是新手还是运营大型组织的老手,都有充分的理由去了解人工智能的工作原理。神经网络是人工智能算法中最灵活的一类,已被广泛应用于各个领域,包括结构化数据、文本和视觉领域。
本书从神经网络的基础开始讲解,涵盖了50多个计算机视觉方面的应用。首先,你将使用NumPy和PyTorch从头开始构建神经网络(NN),然后学习调整神经网络超参数的最佳实践。随着学习的深入,你将学习CNN以及主要用于图像分类的迁移学习技术,还将了解在构建NN模型时需要注意的实际问题。
接下来,你将学习多目标检测、图像分割,并使用R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO、U-Net和Mask R-CNN架构等技术实现这些任务,还将学习使用Detectron2框架来简化构建神经网络的具体过程,这些神经网络主要用于目标检测和人体姿态估算。之后,你将实现三维目标检测。
随后,你将学习自编码器和GAN,重点是图像处理和生成。这里将使用VAE、DCGAN、cGAN、Pix2Pix、CycleGAN、StyleGAN2、SRGAN和风格迁移来实现用于各种任务的图像处理。
最后,学习将计算机视觉与其他技术相结合来解决传统问题,包括将NLP和计算机视觉进行结合,执行OCR、图像标题生成、用transformer进行目标检测;通过结合强化学习和计算机视觉技术来实现汽车自动驾驶智能体;如何使用OpenCV库将一个NN模型投入具体的生产过程,以及传统的计算机视觉技术。
目标读者
本书是为PyTorch初中级读者准备的,目标是使读者熟练掌握基于深度学习和PyTorch的计算机视觉技术。对于刚开始学习神经网络的读者而言,本书也很有用。阅读本书需要具备Python编程语言和机器学习的基础知识。
主要内容
第1章介绍神经网络的工作原理。首先,你将学习与神经网络相关的关键术语。然后,你将了解构建模块的工作细节,并在一个小数据集上从头开始构建神经网络。
第2章介绍如何使用PyTorch。在学习使用PyTorch构建神经网络模型的不同方法之前,你将了解创建和操作张量对象的方法。这里仍将使用一个小数据集,以便你了解使用PyTorch的细节。
第3章结合前面两章涉及的所有内容,帮助你理解各种神经网络超参数对模型准确度的影响。在学完本章后,你将掌握如何在实际数据集上使用神经网络。
第4章详细介绍使用普通神经网络面临的挑战,你将了解为何卷积神经网络能克服传统神经网络的各种限制。你将深入了解CNN的工作细节,并了解其中的各种组件。然后,你将学习处理图像的最佳实践。本章将使用真实世界的图像,并学习使用CNN实现复杂图像分类的工作原理。
第5章介绍如何解决现实世界中的图像分类问题。你将了解多种迁移学习架构,并了解它们是如何显著提高图像分类准确度的。然后,使用迁移学习实现人脸关键点检测和对年龄、性别进行估计。
第6章提供在实际构建和部署图像分类模型时需要注意的要点。实际上,你将看到在真实数据上进行数据增强和批归一化的优点。此外,还将了解类激活映射为何有助于对CNN模型的预测结果进行解释。学完本章后,你就可以解决大多数图像分类问题,并利用前面讨论的模型来处理定制的数据集。
第7章奠定目标检测的基础,你将学习用于构建目标检测模型的各种技术。然后,通过一个案例了解基于区域建议的目标检测技术,在这个案例中,你将实现一个用于定位图像中卡车和公交车的模型。
第8章首先展示区域建议架构的局限性,介绍解决区域建议架构问题的更多高级架构的工作细节。我们将在相同的数据集(卡车与公交车的目标检测)上实现所有的架构,这样就可以对比每个架构的工作原理。
第9章建立在前几章的基础上,帮助你构建模型,以确定各种类别目标和目标实例在图像中的位置和轮廓。我们将针对道路图像和普通家庭图像实现具体的应用。学完本章后,你将能够通过使用PyTorch构建模型的方式解决关于图像分类、目标检测/分割的问题。
第10章总结前几章的学习内容,用几行代码实现对目标的检测和分割,通过构建模型来实现人群计数和图像着色应用。最后,你还将了解如何在真实数据集上进行三维目标
检测。
第11章为图像修改奠定基础。首先学习用于压缩图像和生成新图像的自编码器。然后学习欺骗模型的对抗性攻击。之后实现图像风格迁移。最后实现一个自编码器来生成深度虚拟图像。
第12章首先介绍GAN的工作原理,然后学习虚拟人脸图像的生成技术以及如何使用GAN生成一些有趣的图像。
第13章将图像处理升级到一个新的水平。我们将实现一个GAN模型,用于将目标从一个类别转换到另外一个类别,由草图生成图像,并操作定制图像,以便生成特定风格的图像。学完本章后,你就可以组合应用自编码器和GAN进行图像处理了。
第14章为你学习结合使用计算机视觉技术与其他技术奠定基础。你将学习如何使用小样本和零训练样本完成图像分类。
第15章介绍各种自然语言处理技术的工作细节,如词嵌入、LSTM和transformer,你将使用transformer实现一些应用程序,如图像标题生成、OCR等。
第16章首先介绍强化学习术语和状态价值。在学习深度Q学习的过程中,你将了解强化学习和神经网络的结合使用方式。通过学习,你将实现一个玩Pong游戏的智能体和一个用于汽车自动驾驶的智能体。
第17章介绍将模型部署到生产环境的最佳实践。在将模型迁移到AWS公有云之前,你将了解如何在本地服务器上部署模型。
第18章详细介绍如何使用OpenCV实用程序创建5个有趣的应用程序。学完本章后,你将了解辅助深度学习的实用程序,以及在内存或推理速度有相当大限制的场景中可以替代深度学习的实用程序。
学习本书的软硬件要求
本书覆盖的软硬件 操作系统要求
存储空间最低128GB
内存最低8GB
Intel i5 或更高的处理器
NVIDIA 8 GB以上显卡——GTX1070或更好的显卡
网速最低50Mbit/s Windows、Linux和macOS
Python 3.6及更高版本 Windows、Linux和macOS
PyTorch 1.7 Windows、Linux和macOS
Google Colab(可在任何浏览器上运行) Windows、Linux和macOS
请注意,本书中几乎所有的代码都可以使用Google Colab运行,通过单击GitHub 各章notebook中的Open in Colab按钮即可实现。
目录
CONTENTS
目 录
译者序
前言
第一部分 面向计算机视觉的
深度学习基础知识
第1章 人工神经网络基础 2
1.1 比较人工智能与传统机器学习 3
1.2 人工神经网络的构建模块 4
1.3 实现前向传播 6
1.3.1 计算隐藏层的值 6
1.3.2 应用激活函数 7
1.3.3 计算输出层的值 9
1.3.4 计算损失值 9
1.3.5 前向传播的代码 11
1.4 实现反向传播 14
1.4.1 梯度下降的代码 15
1.4.2 使用链式法则实现
反向传播 17
1.5 整合前向传播与反向传播 20
1.6 理解学习率的影响 22
1.7 总结神经网络的训练过程 28
1.8 小结 29
1.9 课后习题 29
第2章 PyTorch基础 30
2.1 安装PyTorch 30
2.2 PyTorch张量 32
2.2.1 初始化张量 33
2.2.2 张量运算 34
2.2.3 张量对象的自动梯度 37
2.2.4 PyTorch的张量较
NumPy的ndarrays
的优势 38
2.3 使用PyTorch构建神经网络 39
2.3.1 数据集、数据加载器和
批大小 45
2.3.2 预测新的数据点 48
2.3.3 实现自定义损失函数 49
2.3.4 获取中间层的值 50
2.4 使用序贯方法构建神经网络 51
2.5 保存并加载PyTorch模型 54
2.5.1 state dict 54
2.5.2 保存 55
2.5.3 加载 55
2.6 小结 55
2.7 课后习题 56
第3章 使用PyTorch构建深度
神经网络 57
3.1 表示图像 57
3.2 为什么要使用神经网络进行
图像分析 62
3.3 为图像分类准备数据 64
3.4 训练神经网络 66
3.5 缩放数据集以提升模型准确度 71
3.6 理解不同批大小的影响 74
3.6.1 批大小为32 75
3.6.2 批大小为10 000 79
3.7 理解不同损失优化器的影响 80
3.8 理解不同学习率的影响 83
3.8.1 学习率对缩放数据集
的影响 83
3.8.2 不同学习率对非缩放
数据集的影响 88
3.9 理解不同学习率衰减的影响 90
3.10 构建更深的神经网络 93
3.11 理解不同批归一化的影响 94
3.11.1 没有批归一化的非常小
的输入值 96
3.11.2 经过批归一化的非常小
的输入值 98
3.12 过拟合的概念 100
3.12.1 添加dropout的影响 100
3.12.2 正则化的影响 102
3.13 小结 106
3.14 课后习题 106
第二部分 物体分类与目标检测
第4章 卷积神经网络 108
4.1 传统深度神经网络的问题 108
4.2 CNN的构建模块 111
4.2.1 卷积 112
4.2.2 滤波器 113
4.2.3 步长和填充 114
4.2.4 池化 115
4.2.5 整合各个构建模块 116
4.2.6 卷积和池化的图像平移
不变性原理 117
4.3 实现CNN 117
4.3.1 使用PyTorch构建基于
CNN的架构 118
4.3.2 基于Python的前向传播 121
4.4 使用深度CNN分类图像 123
4.5 实现数据增强 127
4.5.1 图像增强 127
4.5.2 对一批图像执行数据增强
及collate_fn的必要性 137
4.5.3 用于图像平移的数据
增强 140
4.6 特征学习结果的可视化 143
4.7 构建对真实图像进行分类
的CNN 153
4.8 小结 161
4.9 课后习题 162
第5章 面向图像分类的迁移学习 163
5.1 迁移学习简介 163
5.2 理解VGG16架构 164
5.3 理解ResNet架构 174
5.4 实现人脸关键点检测 178
5.5 多任务学习—实现年龄估计
和性别分类 186
5.6 torch_snippets库简介 195
5.7 小结 200
5.8 课后习题 200
第6章 图像分类的实战技术 201
6.1 生成CAM 201
6.2 数据增强和批归一化 207
6.3 模型实现的实践要点 212
6.3.1 处理不平衡数据 212
6.3.2 分类图像中目标的大小 213
6.3.3 训练数据和验证数据
之间的差异 213
6.3.4 扁平层中的节点数 214
6.3.5 图像的大小 214
6.3.6 使用OpenCV实用程序 214
6.4 小结 215
6.5 课后习题 215
第7章 目标检测基础 216
7.1 目标检测简介 216
7.2 为训练图像样本创建真值 217
7.3 理解区域建议 220
7.3.1 使用SelectiveSearch
生成区域建议 221
7.3.2 实现用于生成区域建议
的SelectiveSearch 222
7.4 理解IoU 224
7.5 非极大抑制 226
7.6 mAP 226
7.7 训练基于R-CNN的定制目标
检测器 227
7.7.1 R-CNN的工作细节 227
7.7.2 基于定制数据集实现
R-CNN目标检测模型 228
7.8 训练基于Fast R-CNN的定制
目标检测器 241
7.8.1 Fast R-CNN的工作细节 242
7.8.2 基于定制数据集实现Fast R-CNN目标检测模型 242
7.9 小结 249
7.10 课后习题 249
第8章 目标检测进阶 250
8.1 现代目标检测算法的组成 250
8.1.1 锚盒 250
8.1.2 区域建议网络 252
8.2 基于定制数据集训练Faster
R-CNN 254
8.3 YOLO的工作细节 260
8.4 基于定制数据集训练YOLO 265
8.4.1 安装Darknet 265
8.4.2 设置数据集格式 267
8.4.3 配置架构 268
8.4.4 训练和测试模型 269
8.5 SSD模型的工作细节 270
8.6 基于定制数据集训练SSD
模型 274
8.7 小结 278
8.8 课后习题 278
第9章 图像分割 279
9.1 探索U-Net架构 279
9.2 使用U-Net实现语义分割 283
9.3 探索Mask R-CNN架构 288
9.3.1 RoI对齐 290
9.3.2 掩码头部 291
9.4 使用Mask R-CNN实现实例
分割 292
9.5 小结 305
9.6 课后习题 306
第10章 目标检测与分割的应用 307
10.1 多目标实例分割 307
10.1.1 获取和准备数据 308
10.1.2 训练用于实例分割的
模型 312
10.1.3 对新图像进行推断 313
10.2 人体姿态检测 315
10.3 人群计数 316
10.4 图像着色 325
10.5 面向点云的三维目标检测 330
10.5.1 理论 330
10.5.2 训练YOLO模型实现
三维目标检测 334
10.6 小结 337
第三部分 图像处理
第11章 自编码器与图像处理 340
11.1 理解自编码器 340
11.2 理解卷积自编码器 346
11.3 理解变分自编码器 351
11.3.1 VAE的工作机制 352
11.3.2 KL散度 353
11.3.3 构建VAE模型 353
11.4 图像对抗性攻击 357
11.5 图像风格迁移 360
11.6 生成深度虚拟图像 366
11.7 小结 375
11.8 课后习题 375
第12章 基于GAN的图像生成 376
12.1 GAN模型简介 376
12.2 使用GAN生成手写数字 378
12.3 使用DCGAN生成人脸图像 383
12.4 实现条件GAN模型 391
12.5 小结 399
12.6 课后习题 400
第13章 高级GAN图像处理 401
13.1 使用Pix2Pix GAN模型 401
13.2 使用CycleGAN模型 410
13.3 在定制图像上使用StyleGAN
模型 418
13.4 超分辨率GAN 426
13.4.1 架构 427
13.4.2 编码SRGAN 428
13.5 小结 429
13.6 课后习题 430
第四部分 计算机视觉与其他技术
第14章 使用小样本进行模型训练 432
14.1 实现零样本学习 432
14.2 实现小样本学习 437
14.2.1 构建Siamese网络 438
14.2.2 原型网络的工作细节 444
14.2.3 关系网络的工作细节 445
14.3 小结 446
14.4 课后习题 446
第15章 计算机视觉与NLP 447
15.1 RNN模型简介 447
15.1.1 RNN架构的应用场景 448
15.1.2 探索RNN的结构 449
15.1.3 为什么需要存储记忆 449
15.2 LSTM架构简介 450
15.2.1 LSTM的工作细节 451
15.2.2 使用PyTorch实现
LSTM 453
15.3 生成图像标题 453
15.4 转录手写图像 465
15.4.1 CTC损失的工作细节 466
15.4.2 计算CTC损失值 467
15.4.3 手写转录的代码实现 468
15.5 使用DETR进行目标检测 476
15.5.1 transformer的工作细节 476
15.5.2 DETR的工作细节 479
15.5.3 目标检测的代码实现 482
15.6 小结 485
15.7 课后习题 485
第16章 计算机视觉与强化学习 486
16.1 强化学习基础知识 486
16.1.1 计算状态价值 487
16.1.2 计算状态–行为价值 488
16.2 实现Q学习 489
16.2.1 Q值 489
16.2.2 了解Gym环境 490
16.2.3 构建Q表 491
16.2.4 探索–利用机制 493
16.3 实现深度Q学习 495
16.4 目标固定的深度Q学习 501
16.5 实现自动驾驶智能体 508
16.5.1 安装CARLA环境 508
16.5.2 训练自动驾驶智能体 511
16.6 小结 518
16.7 课后习题 519
第17章 模型的实际应用部署 520
17.1 API基础知识 520
17.2 在本地服务器上创建API并
进行预测 521
17.2.1 安装API模块和依赖项 522
17.2.2 图像分类器的支持组件 522
17.3 将API部署到云端 525
17.3.1 Docker镜像与Docker
容器 526
17.3.2 创建Docker容器 526
17.3.3 在云端发布并运行
Docker容器 530
17.4 小结 535
第18章 使用OpenCV实用程序
进行图像分析 536
18.1 图像中的单词检测 536
18.2 图像中的车道线检测 542
18.3 基于颜色的目标检测 544
18.4 构建全景图像 546
18.5 图像中的车牌检测 550
18.6 小结 552
附录 课后习题答案 554