书籍详情
深入理解计算机视觉:关键算法解析与深度神经网络设计
作者:张晨然
出版社:电子工业出版社
出版时间:2023-04-01
ISBN:9787121452581
定价:¥139.00
购买这本书可以去
内容简介
本书对二维、三维目标检测技术涉及的骨干网络及入门必备的计算机视觉算法进行全面的介绍。本书由浅入深地介绍了MNIST、ImageNet、CIFAR、波士顿房产、ModelNet等经典二维、三维数据集和相关国际赛事,还介绍了TensorFlow中的二维卷积层、全连接层、激活层、池化层、批次归一化层、随机失活层的算法和梯度下降原理,AlexNet、VGG、ResNet、DarkNet、CSP-DarkNet等经典骨干网络的设计原理,以及PointNet、GCN等三维计算机视觉神经网络。此外,本书通过设计巧妙且具体的案例,让读者稳步建立扎实的编程能力,包括数据集的制作和解析、神经网络模型设计能力和开销估算、损失函数的设计、神经网络的动态模式和静态模式的训练方法和过程控制、神经网络的边缘计算模型量化、神经网络的云计算部署。完成本书的学习,读者可以继续阅读与本书紧密衔接的《深入理解计算机视觉:在边缘端构建高效的目标检测系统》,将所学的计算机视觉基础知识运用到目标检测的神经网络设计中,对边缘计算环境下的神经网络进行游刃有余的调整。
作者简介
作者本科毕业于天津大学通信工程专业,硕士研究生阶段就读于厦门大学,主攻嵌入式系统和数字信号底层算法,具备扎实的理论基础。作者先后就职于中国电信集团公司和福建省电子信息(集团)有限责任公司,目前担任福建省人工智能学会的理事和企业工作委员会的主任,同时也担任谷歌开发者社区、亚马逊开发者生态的福州区域负责人,长期从事机器视觉和自然语言基础技术的研究,积累了丰富的人工智能项目经验,致力于推动深度学习在交通、工业、民生、建筑等领域的应用落地。作者于2017年获得高级工程师职称,拥有多项发明专利。
目录
目录
第1篇 计算机视觉开发环境的搭建 1
第1章 Python编程环境 2
1.1 Python语言简介 2
1.2 Python脚本的运行方式 3
1.3 Anaconda虚拟环境管理器 3
1.4 使用Anaconda建立虚拟环境 5
第2章 搭建三层的图像分类神经网络 7
2.1 下载数据集 7
2.2 探索数据集 8
2.3 构建、编译和训练神经网络 9
2.4 使用神经网络进行批量预测 12
2.5 将预测结果可视化 13
第2篇 计算机视觉模型从实验室到生产环境的部署 15
第3章 图片数据集的处理 16
3.1 数据集的预处理 16
3.1.1 下载和查看数据集 16
3.1.2 准备花卉类别名称和类别序号的对应关系 17
3.1.3 准备花卉图片和类别名称的对应关系 18
3.2 数据集的制作 20
3.2.1 拟写入数据集的数据 20
3.2.2 TFRecord格式的数据集 21
3.2.3 单个样本的生成函数 24
3.2.4 批量生成样本并写入TFRecord文件 26
3.3 数据集的读取和验证 27
3.3.1 解析单个样本 27
3.3.2 制作函数批量解析样本 30
3.4 数据管道的优化处理 31
第4章 迁移学习和神经网络的设计 35
4.1 迁移学习的概念和花卉分类应用 35
4.2 下载MobileNet 36
4.3 设置MobileNet 38
4.4 测试MobileNet的特征提取输入和输出 39
第5章 损失函数的基础原理 42
5.1 回归场景下常用的损失函数 42
5.2 回归场景下的损失函数实战 44
5.3 分类场景下的损失函数 47
5.3.1 概率、几率、对数几率的概念 47
5.3.2 对数几率和概率的相互转换 49
5.3.3 多标签与单标签分类问题 51
5.3.4 单标签分类问题和交叉熵算法原理 52
5.3.5 交叉熵损失函数 54
5.4 自定义损失函数 56
第6章 神经网络的编译和训练 58
6.1 神经网络的编译 58
6.2 神经网络的训练 59
6.2.1 神经网络训练的基本概念 59
6.2.2 神经网络训练的常用回调机制 60
6.2.3 训练的返回和过拟合的观测 62
6.3 神经网络的保存 65
6.3.1 神经网络保存的格式和命令 65
6.3.2 神经网络的性能测试和推理 72
第7章 TensorFlow模型的部署方式 74
7.1 以Edge TPU为例进行边缘端模型部署 75
7.1.1 将模型转换为TFLite格式 75
7.1.2 针对边缘硬件编译模型 77
7.1.3 模拟边缘端推理 79
7.1.4 配置边缘计算开发板Edge TPU 81
7.1.5 编写边缘端推理代码 85
7.1.6 将推理代码下载到开发板并运行 87
7.2 在服务器端部署模型 89
7.2.1 TensorFlow Serving的安装和使用 89
7.2.2 网络推理请求和响应实战 92
第3篇 神经网络的数学原理和TensorFlow计算框架 95
第8章 神经网络训练的数学原理和优化器 96
8.1 损失函数和神经网络训练的本质 96
8.1.1 神经网络函数的数学抽象 96
8.1.2 计算损失函数极值的数学抽象 97
8.2 使用符号微分法获得损失值的全局最小值 98
8.3 使用局部梯度下降法不断靠近损失函数的最小值 105
8.3.1 局部梯度下降法的原理和TensorFlow的优化器 105
8.3.2 自动微分法的原理及自定义梯度 110
8.3.3 使用自动微分法和局部梯度下降法训练波士顿房产数据模型 115
第9章 神经网络的编程范式和静态图转化机制 122
9.1 计算图和编程范式 122
9.2 静态图转化机制AutoGraph和装饰器@tf.function 126
9.3 TensorFlow神经网络模型的类继承关系 131
9.3.1 TensorFlow的低阶API和Keras的高阶API 131
9.3.2 Keras的基础模型类和基础层类 132
9.4 使用Keras的高阶API构建模型并进行可视化 136
9.4.1 使用序列方式构建模型 138
9.4.2 使用函数方式构建模型 139
9.4.3 使用继承子类方式构建模型 140
9.4.4 提取模型对应的类名称 143
第4篇 神经网络层的算法原理和训练过程控制 144
第10章 神经网络层的原理和资源开销 145
10.1 全连接层的原理和资源开销 145
10.1.1 全连接层的原理 145
10.1.2 全连接层的资源开销 145
10.1.3 TensorFlow全连接层的API 147
10.2 激活函数的原理和代码实现 148
10.2.1 激活函数的原理 148
10.2.2 激活函数的代码实现 149
10.3 二维卷积的原理和资源开销 150
10.3.1 二维卷积的原理 150
10.3.2 二维卷积的资源开销 154
10.3.3 TensorFlow二维卷积层的API 155
10.3.4 二维卷积层的配置方式 157
10.4 池化层的原理和实战 158
10.5 二维卷积层和池化层的感受野 161
10.6 随机失活算法和默认推理状态 162
10.7 批次归一化算法 163
10.7.1 内部协变量漂移和输入数据重分布 164
10.7.2 训练阶段的BN算法 170
10.7.3 推理阶段的BN算法 173
10.7.4 在神经网络模型内使用BN层 175
10.8 制作神经网络的资源开销函数 177
10.8.1 整体框架 177
10.8.2 二维卷积层的资源开销算法 178
10.8.3 全连接层的资源开销算法 179
10.8.4 BN层的资源开销算法 180
10.8.5 其他成员函数 180
第11章 使用计算加速硬件加快神经网络的训练 183
11.1 人工智能的数据类型和运算能力 183
11.2 人工智能计算中的数据类型匹配 185
11.3 人工智能硬件的运算能力评估 187
11.4 安装GPU版本的TensorFlow计算框架 192
11.5 使用卷积层和全连接层构建经典神经网络LeNet 196
11.5.1 MNIST手写数字数据集 197
11.5.2 使用贯序方式建立极简神经网络LeNet 200
11.5.3 使用fit方法在MNIST手写数字数据集上训练LeNet5 205
11.5.4 使用eager方法在MNIST手写数字数据集上训练LeNet5 208
第12章 自定义fit方法和回调机制 214
12.1 fit方法的执行机制和自定义fit方法 214
12.2 fit方法的回调机制和自定义回调函数 217
12.3 TensorFlow的高阶回调函数 222
12.3.1 早期停止回调函数与过拟合 222
12.3.2 检查点保存回调函数 224
12.3.3 检查点管理器和快速自定义回调函数 225
12.3.4 其他高阶回调函数类 228
12.4 训练过程监控和回调函数 229
12.4.1 TensorBoard和日志文件的原理和接口 230
12.4.2 TensorBoard的可视化查看 232
12.4.3 eager方法下使用tf.summary存储日志 235
12.4.4 fit方法下的TensorBoard日志存储回调函数 238
第5篇 目标检测中的骨干网络 244
第13章 经典骨干网络AlexNet的原理解析 245
13.1 整体结构和数据增强 245
13.2 负责特征提取的第一、二层卷积层 246
13.3 负责特征提取的第三、四、五层卷积层 248
13.4 负责特征线性组合的第六、七、八层 251
13.5 使用继承子类方式建立的AlexNet神经网络 252
13.6 AlexNet的资源开销 256
第14章 经典小核卷积神经网络VGG的原理解析 259
14.1 VGG的宏观结构和微观特点 259
14.2 VGG16的第一、二个卷积块结构 261
14.3 VGG16的第三、四、五个卷积块结构 264
14.4 VGG五个卷积块的代码实现 267
14.5 VGG小核卷积技巧下的资源开销 269
14.6 VGG预训练模型的加载和下游网络 272
第15章 经典残差神经网络ResNet的原理解析 276
15.1 残差连接的原理和结构 277
15.2 瓶颈残差模块堆叠的输入和输出函数关系 279
15.3 瓶颈残差模块的输入和输出函数关系 283
15.4 堆叠函数关系和通用的ResNet网络结构 289
15.5 ResNet50 V2模型的案例解析 293
15.6 ResNet的资源开销评估 297
15.7 ResNet的迁移学习和权重参数加载 299
第16章 多尺度特征提取的神经网络DarkNet 302
16.1 DarkNet的基本处理单元 302
16.1.1 DarkNet的专用卷积块DarknetConv 303
16.1.2 DarkNet的残差模块DarknetResidual 305
16.2 YOLO V3的骨干网络DarkNet53 307
16.2.1 YOLO V3的残差模块堆叠 307
16.2.2 DarkNet53的整体结构和代码实现 313
16.2.3 DarkNet53的资源开销 315
16.3 YOLO V3简版模型的骨干网络DarkNet53-tiny 316
16.3.1 DarkNet53-tiny的整体结构和代码 316
16.3.2 DarkNet53-tiny的测试和资源开销 318
16.4 YOLO V4的骨干网络CSP-DarkNet 319
16.4.1 残差模块堆叠结构 319
16.4.2 五个残差模块堆叠结构的代码实现 321
16.4.3 空间金字塔池化结构 325
16.4.4 CSP-DarkNet的整体结构和代码实现 328
16.4.5 CSP-DarkNet的测试和资源开销 330
16.5 YOLO V4简版模型的骨干网络CSP-DarkNet-tiny 331
16.5.1 矩阵切片自定义层的算法和保存规范 331
16.5.2 简版残差模块和简版残差模块堆叠 332
16.5.3 CSP-DarkNet-tiny的整体结构和代码 336
16.5.4 CSP-DarkNet-tiny的测试和资源开销 337
第17章 骨干网络预训练和大型图像数据集ImageNet 339
17.1 ImageNet数据集和ILSVRC竞赛 339
17.1.1 单标签图像分类任务 340
17.1.2 单标签分类和定位任务 342
17.1.3 细颗粒度分类任务 345
17.1.4 目标检测任务 346
17.1.5 其他竞赛任务 346
17.2 CIFAR数据集 347
17.3 加载骨干网络预训练权重进行迁移学习 351
17.3.1 快速创建LeNet和AlexNet并进行开销分析 352
17.3.2 使用高阶API快速构建VGG、ResNet、MobileNet 354
17.4 加载骨干网络DarkNet的预训练权重 361
17.4.1 读取和解析YOLO的官方权重 361
17.4.2 设计DarkNet骨干网络并加载转换后的权重 366
17.5 使用图像分类任务测试骨干网络权重的性能 368
第6篇 三维计算机视觉入门和实战 371
第18章 三维计算机视觉的数据表达和主要任务 372
18.1 三1
第1篇 计算机视觉开发环境的搭建 1
第1章 Python编程环境 2
1.1 Python语言简介 2
1.2 Python脚本的运行方式 3
1.3 Anaconda虚拟环境管理器 3
1.4 使用Anaconda建立虚拟环境 5
第2章 搭建三层的图像分类神经网络 7
2.1 下载数据集 7
2.2 探索数据集 8
2.3 构建、编译和训练神经网络 9
2.4 使用神经网络进行批量预测 12
2.5 将预测结果可视化 13
第2篇 计算机视觉模型从实验室到生产环境的部署 15
第3章 图片数据集的处理 16
3.1 数据集的预处理 16
3.1.1 下载和查看数据集 16
3.1.2 准备花卉类别名称和类别序号的对应关系 17
3.1.3 准备花卉图片和类别名称的对应关系 18
3.2 数据集的制作 20
3.2.1 拟写入数据集的数据 20
3.2.2 TFRecord格式的数据集 21
3.2.3 单个样本的生成函数 24
3.2.4 批量生成样本并写入TFRecord文件 26
3.3 数据集的读取和验证 27
3.3.1 解析单个样本 27
3.3.2 制作函数批量解析样本 30
3.4 数据管道的优化处理 31
第4章 迁移学习和神经网络的设计 35
4.1 迁移学习的概念和花卉分类应用 35
4.2 下载MobileNet 36
4.3 设置MobileNet 38
4.4 测试MobileNet的特征提取输入和输出 39
第5章 损失函数的基础原理 42
5.1 回归场景下常用的损失函数 42
5.2 回归场景下的损失函数实战 44
5.3 分类场景下的损失函数 47
5.3.1 概率、几率、对数几率的概念 47
5.3.2 对数几率和概率的相互转换 49
5.3.3 多标签与单标签分类问题 51
5.3.4 单标签分类问题和交叉熵算法原理 52
5.3.5 交叉熵损失函数 54
5.4 自定义损失函数 56
第6章 神经网络的编译和训练 58
6.1 神经网络的编译 58
6.2 神经网络的训练 59
6.2.1 神经网络训练的基本概念 59
6.2.2 神经网络训练的常用回调机制 60
6.2.3 训练的返回和过拟合的观测 62
6.3 神经网络的保存 65
6.3.1 神经网络保存的格式和命令 65
6.3.2 神经网络的性能测试和推理 72
第7章 TensorFlow模型的部署方式 74
7.1 以Edge TPU为例进行边缘端模型部署 75
7.1.1 将模型转换为TFLite格式 75
7.1.2 针对边缘硬件编译模型 77
7.1.3 模拟边缘端推理 79
7.1.4 配置边缘计算开发板Edge TPU 81
7.1.5 编写边缘端推理代码 85
7.1.6 将推理代码下载到开发板并运行 87
7.2 在服务器端部署模型 89
7.2.1 TensorFlow Serving的安装和使用 89
7.2.2 网络推理请求和响应实战 92
第3篇 神经网络的数学原理和TensorFlow计算框架 95
第8章 神经网络训练的数学原理和优化器 96
8.1 损失函数和神经网络训练的本质 96
8.1.1 神经网络函数的数学抽象 96
8.1.2 计算损失函数极值的数学抽象 97
8.2 使用符号微分法获得损失值的全局最小值 98
8.3 使用局部梯度下降法不断靠近损失函数的最小值 105
8.3.1 局部梯度下降法的原理和TensorFlow的优化器 105
8.3.2 自动微分法的原理及自定义梯度 110
8.3.3 使用自动微分法和局部梯度下降法训练波士顿房产数据模型 115
第9章 神经网络的编程范式和静态图转化机制 122
9.1 计算图和编程范式 122
9.2 静态图转化机制AutoGraph和装饰器@tf.function 126
9.3 TensorFlow神经网络模型的类继承关系 131
9.3.1 TensorFlow的低阶API和Keras的高阶API 131
9.3.2 Keras的基础模型类和基础层类 132
9.4 使用Keras的高阶API构建模型并进行可视化 136
9.4.1 使用序列方式构建模型 138
9.4.2 使用函数方式构建模型 139
9.4.3 使用继承子类方式构建模型 140
9.4.4 提取模型对应的类名称 143
第4篇 神经网络层的算法原理和训练过程控制 144
第10章 神经网络层的原理和资源开销 145
10.1 全连接层的原理和资源开销 145
10.1.1 全连接层的原理 145
10.1.2 全连接层的资源开销 145
10.1.3 TensorFlow全连接层的API 147
10.2 激活函数的原理和代码实现 148
10.2.1 激活函数的原理 148
10.2.2 激活函数的代码实现 149
10.3 二维卷积的原理和资源开销 150
10.3.1 二维卷积的原理 150
10.3.2 二维卷积的资源开销 154
10.3.3 TensorFlow二维卷积层的API 155
10.3.4 二维卷积层的配置方式 157
10.4 池化层的原理和实战 158
10.5 二维卷积层和池化层的感受野 161
10.6 随机失活算法和默认推理状态 162
10.7 批次归一化算法 163
10.7.1 内部协变量漂移和输入数据重分布 164
10.7.2 训练阶段的BN算法 170
10.7.3 推理阶段的BN算法 173
10.7.4 在神经网络模型内使用BN层 175
10.8 制作神经网络的资源开销函数 177
10.8.1 整体框架 177
10.8.2 二维卷积层的资源开销算法 178
10.8.3 全连接层的资源开销算法 179
10.8.4 BN层的资源开销算法 180
10.8.5 其他成员函数 180
第11章 使用计算加速硬件加快神经网络的训练 183
11.1 人工智能的数据类型和运算能力 183
11.2 人工智能计算中的数据类型匹配 185
11.3 人工智能硬件的运算能力评估 187
11.4 安装GPU版本的TensorFlow计算框架 192
11.5 使用卷积层和全连接层构建经典神经网络LeNet 196
11.5.1 MNIST手写数字数据集 197
11.5.2 使用贯序方式建立极简神经网络LeNet 200
11.5.3 使用fit方法在MNIST手写数字数据集上训练LeNet5 205
11.5.4 使用eager方法在MNIST手写数字数据集上训练LeNet5 208
第12章 自定义fit方法和回调机制 214
12.1 fit方法的执行机制和自定义fit方法 214
12.2 fit方法的回调机制和自定义回调函数 217
12.3 TensorFlow的高阶回调函数 222
12.3.1 早期停止回调函数与过拟合 222
12.3.2 检查点保存回调函数 224
12.3.3 检查点管理器和快速自定义回调函数 225
12.3.4 其他高阶回调函数类 228
12.4 训练过程监控和回调函数 229
12.4.1 TensorBoard和日志文件的原理和接口 230
12.4.2 TensorBoard的可视化查看 232
12.4.3 eager方法下使用tf.summary存储日志 235
12.4.4 fit方法下的TensorBoard日志存储回调函数 238
第5篇 目标检测中的骨干网络 244
第13章 经典骨干网络AlexNet的原理解析 245
13.1 整体结构和数据增强 245
13.2 负责特征提取的第一、二层卷积层 246
13.3 负责特征提取的第三、四、五层卷积层 248
13.4 负责特征线性组合的第六、七、八层 251
13.5 使用继承子类方式建立的AlexNet神经网络 252
13.6 AlexNet的资源开销 256
第14章 经典小核卷积神经网络VGG的原理解析 259
14.1 VGG的宏观结构和微观特点 259
14.2 VGG16的第一、二个卷积块结构 261
14.3 VGG16的第三、四、五个卷积块结构 264
14.4 VGG五个卷积块的代码实现 267
14.5 VGG小核卷积技巧下的资源开销 269
14.6 VGG预训练模型的加载和下游网络 272
第15章 经典残差神经网络ResNet的原理解析 276
15.1 残差连接的原理和结构 277
15.2 瓶颈残差模块堆叠的输入和输出函数关系 279
15.3 瓶颈残差模块的输入和输出函数关系 283
15.4 堆叠函数关系和通用的ResNet网络结构 289
15.5 ResNet50 V2模型的案例解析 293
15.6 ResNet的资源开销评估 297
15.7 ResNet的迁移学习和权重参数加载 299
第16章 多尺度特征提取的神经网络DarkNet 302
16.1 DarkNet的基本处理单元 302
16.1.1 DarkNet的专用卷积块DarknetConv 303
16.1.2 DarkNet的残差模块DarknetResidual 305
16.2 YOLO V3的骨干网络DarkNet53 307
16.2.1 YOLO V3的残差模块堆叠 307
16.2.2 DarkNet53的整体结构和代码实现 313
16.2.3 DarkNet53的资源开销 315
16.3 YOLO V3简版模型的骨干网络DarkNet53-tiny 316
16.3.1 DarkNet53-tiny的整体结构和代码 316
16.3.2 DarkNet53-tiny的测试和资源开销 318
16.4 YOLO V4的骨干网络CSP-DarkNet 319
16.4.1 残差模块堆叠结构 319
16.4.2 五个残差模块堆叠结构的代码实现 321
16.4.3 空间金字塔池化结构 325
16.4.4 CSP-DarkNet的整体结构和代码实现 328
16.4.5 CSP-DarkNet的测试和资源开销 330
16.5 YOLO V4简版模型的骨干网络CSP-DarkNet-tiny 331
16.5.1 矩阵切片自定义层的算法和保存规范 331
16.5.2 简版残差模块和简版残差模块堆叠 332
16.5.3 CSP-DarkNet-tiny的整体结构和代码 336
16.5.4 CSP-DarkNet-tiny的测试和资源开销 337
第17章 骨干网络预训练和大型图像数据集ImageNet 339
17.1 ImageNet数据集和ILSVRC竞赛 339
17.1.1 单标签图像分类任务 340
17.1.2 单标签分类和定位任务 342
17.1.3 细颗粒度分类任务 345
17.1.4 目标检测任务 346
17.1.5 其他竞赛任务 346
17.2 CIFAR数据集 347
17.3 加载骨干网络预训练权重进行迁移学习 351
17.3.1 快速创建LeNet和AlexNet并进行开销分析 352
17.3.2 使用高阶API快速构建VGG、ResNet、MobileNet 354
17.4 加载骨干网络DarkNet的预训练权重 361
17.4.1 读取和解析YOLO的官方权重 361
17.4.2 设计DarkNet骨干网络并加载转换后的权重 366
17.5 使用图像分类任务测试骨干网络权重的性能 368
第6篇 三维计算机视觉入门和实战 371
第18章 三维计算机视觉的数据表达和主要任务 372
18.1 三1
猜您喜欢