深度学习技术图像处理入门
出版时间:2018
内容简介
本书从机器学习、图像处理的基本概念入手,逐步阐述深度学习图像处理技术的基本原理以及简单的实现。继而以几个实战案例来介绍如何使用深度学习方法,在数据分析竞赛中取得较高的排名。最后,通过一个实战案例,介绍如何将模型放入iOS程序,制作相应的人工智能手机App。
本书适用于对深度学习有兴趣、希望入门这一领域的理工科大学生、研究生,以及希望了解该领域基本原理的软件开发人员。此外,本书所有案例均提供了云环境上的代码,便于读者复现结果,并进行深入学习。
目录
第1章 搭建指定的开发环境1
1.1 为什么要使用指定的开发环境1
1.2 硬件准备2
1.2.1 在亚马逊租用云GPU服务器2
1.2.2 在腾讯云租用GPU服务器4
1.2.3 在云服务器中开启搭载开发环境的Docker服务8
1.3 软件准备9
1.3.1 在Ubuntu 16.04下配置环境9
1.3.2 在CentOS 7下配置环境12
1.4 参考文献及网页链接12
第2章 温故知新——机器学习基础知识13
2.1 人工智能、机器学习与深度学习13
2.2 训练一个传统的机器学习模型15
2.2.1 第一步,观察数据16
2.2.2 第二步,预览数据17
2.3 数据挖掘与训练模型29
2.3.1 第一步,准备数据29
2.3.2 第二步,挖掘数据特征31
2.3.3 第三步,使用模型37
2.3.4 第四步,代码实战44
2.4 参考文献及网页链接49
第3章 数形结合——图像处理基础知识50
3.1 读取图像文件进行基本操作51
3.1.1 使用python-opencv读取图片51
3.1.2 借助python-opencv进行不同编码格式的转换52
3.1.3 借助python-opencv改变图片尺寸53
3.2 用简单的矩阵操作处理图像53
3.2.1 对图像进行复制与粘贴53
3.2.2 把图像当成矩阵进行处理——二维码转换成矩阵54
3.3 使用OpenCV“抠图”——基于颜色通道以及形态特征59
3.4 基于传统特征的传统图像分类方法64
3.4.1 将图片简化为少数区域并计算每个区域轮廓特征的方向66
3.4.2 将HOG变换运用在所有正负样本中68
3.4.3 训练模型70
3.4.4 将训练好的分类器运用在新的图片中71
3.5 参考文献及网页链接73
第4章 继往开来——使用深度神经网络框架74
4.1 从逻辑回归说起74
4.2 深度学习框架76
4.3 基于反向传播算法的自动求导77
4.4 简单的深度神经网络框架实现80
4.4.1 数据结构部分81
4.4.2 计算图部分83
4.4.3 使用方法85
4.4.4 训练模型86
4.5 参考文献及网页链接89
第5章 排列组合——深度神经网络框架的模型元件90
5.1 常用层92
5.1.1 Dense92
5.1.2 Activation92
5.1.3 Dropout93
5.1.4 Flatten94
5.2 卷积层94
5.2.1 Conv2D94
5.2.2 Cropping2D101
5.2.3 ZeroPadding2D101
5.3 池化层102
5.3.1 MaxPooling2D102
5.3.2 AveragePooling2D102
5.3.3 GlobalAveragePooling2D103
5.4 正则化层与过拟合104
5.5 反卷积层105
5.6 循环层109
5.6.1 SimpleRNN109
5.6.2 LSTM109
5.6.3 GRU110
5.7 参考文献及网页链接110
第6章 少量多次——深度神经网络框架的输入处理112
6.1 批量生成训练数据113
6.2 数据增强115
6.3 参考文献及网页链接117
第7章 愚公移山——深度神经网络框架的模型训练118
7.1 随机梯度下降119
7.2 动量法120
7.3 自适应学习率算法121
7.4 实验案例124
7.5 参考文献及网页链接128
第8章 小试牛刀——使用深度神经网络进行CIFAR-10数据分类129
8.1 上游部分——基于生成器的批量生成输入模块131
8.2 核心部分——用各种零件搭建深度神经网络131
8.3 下游部分——使用凸优化模块训练模型132
8.4 参考文献及网页链接133
第9章 见多识广——使用迁移学习提升准确率134
9.1 猫狗大战1.0——使用卷积神经网络直接进行训练135
9.1.1 导入数据135
9.1.2 可视化137
9.1.3 分割训练集和验证集138
9.1.4 搭建模型140
9.1.5 模型训练141
9.1.6 总结142
9.2 猫狗大战2.0——使用ImageNet数据集预训练模型142
9.2.1 迁移学习142
9.2.2 数据预处理143
9.2.3 搭建模型143
9.2.4 模型可视化144
9.2.5 训练模型145
9.2.6 提交到kaggle评估146
9.3 猫狗大战3.0——使用多种预训练模型组合提升表现146
9.3.1 载入数据集147
9.3.2 使用正确的预处理函数147
9.3.3 搭建特征提取模型并导出特征147
9.3.4 搭建并训练全连接分类器模型148
9.3.5 在测试集上预测149
9.4 融合模型150
9.4.1 获取特征150
9.4.2 数据持久化151
9.4.3 构建模型151
9.4.4 在测试集上预测152
9.5 总结153
9.6 参考文献及网页链接154
第10章 看图识字——使用深度神经网络进行文字识别155
10.1 使用卷积神经网络进行端到端学习155
10.1.1 编写数据生成器157
10.1.2 使用生成器157
10.1.3 构建深度卷积神经网络158
10.1.4 模型可视化158
10.1.5 训练模型160
10.1.6 计算模型总体准确率161
10.1.7 测试模型161
10.1.8 模型总结162
10.2 使用循环神经网络改进模型162
10.2.1 CTC Loss163
10.2.2 模型结构164
10.2.3 模型可视化165
10.2.4 数据生成器167
10.2.5 评估模型168
10.2.6 评估回调169
10.2.7 训练模型169
10.2.8 测试模型171
10.2.9 再次评估模型171
10.2.10 总结173
10.3 识别四则混合运算验证码(初赛)173
10.3.1 问题描述174
10.3.2 数据集探索174
10.3.3 模型结构176
10.3.4 结果可视化181
10.3.5 总结182
10.4 识别四则混合运算验证码(决赛)183
10.4.1 问题描述183
10.4.2 数据集探索184
10.4.3 数据预处理186
10.4.4 模型结构192
10.4.5 生成器195
10.4.6 模型的训练197
10.4.7 预测结果198
10.4.8 模型结果融合199
10.4.9 其他尝试200
10.4.10 小结202
10.5 参考文献及网页链接203
第11章 见习医生——使用全卷积神经网络分割病理切片中的癌组织205
11.1 任务描述205
11.1.1 赛题设置205
11.1.2 数据描述206
11.1.3 数据标注206
11.2 总体思路206
11.3 构造模型207
11.3.1 准备数据208
11.3.2 构建模型214
11.3.3 模型优化217
11.4 程序执行225
11.5 模型结果可视化226
11.5.1 加载函数226
11.5.2 选择验证集并编写预测函数226
11.5.3 根据tensorborad可视化结果选择最好的模型228
11.5.4 尝试逐步降低学习率230
11.6 观察模型在验证集上的预测表现231
11.7 参考文献及网页链接234
第12章 知行合一——如何写一个深度学习App235
12.1 CAM可视化235
12.2 导出分类模型和CAM可视化模型236
12.2.1 载入数据集236
12.2.2 提取特征237
12.2.3 搭建和训练分类器237
12.2.4 搭建分类模型和CAM模型238
12.2.5 可视化测试239
12.2.6 保存模型241
12.2.7 导出mlmodel模型文件241
12.3 开始编写App242
12.3.1 创建工程242
12.3.2 配置工程244
12.3.3 测试工程249
12.3.4 运行程序249
12.4 使用深度学习模型250
12.4.1 将模型导入到工程中250
12.4.2 数据类型转换函数250
12.4.3 实施CAM可视化252
12.4.4 模型效果254
12.5 参考文献及网页链接255