《深度学习之图像识别:核心技术与案例实战》读书笔记

《深度学习之图像识别:核心技术与案例实战》

书名:深度学习之图像识别:核心技术与案例实战
作者:言有三
出版社:机械工业出版社
出版时间:2019-04
ISBN:9787111624721

本书读者对象

  • 图像处理技术人员
  • 深度学习技术人员
  • 深度学习技术爱好者
  • 深度学习技术研究人员
  • 相关院校的学生和老师
  • 相关培训机构的学生和老师

介绍

配书资源:http://www.hzcourse.com/web/refbook/detail/8278/226

机器学习、深度学习、人工智能,这些关键词在最近几年“声名鹊起”。以深度学习为代表的无监督机器学习技术在图像处理、语音识别和自然语言处理等领域里频频取得新的突破。但深度学习其实并不是一门全新的学科,其历史可以追溯到20世纪40年代。

深度学习背后的核心技术包括神经网络的结构设计和最优化方法等,其理论体系虽然有一定进展但是尚不完备。可以说,当前的主流深度学习技术是一门应用性极强的工程技术,这种尚不完备的理论加上具有较高门槛的应用工程特点,对于初学者来说具有一定的困难。如何系统性地了解理论知识,又能够紧随理论进行全面的实践,成为一名合格的图像处理领域的深度学习算法工程师,这是本书所要解决的问题。

本书内容由浅入深,讲解图文并茂,紧随工业界和学术界的最新发展,理论和实践紧密结合,给出了大量的图表与案例分析。本书抛开了过多的数学理论,完整地剖析了深度学习在图像处理领域中各个维度的重要技术,而不是只停留于理论的阐述和简单的结果展示,更是从夯实理论到完成实战一气呵成。相信读者跟随着本书进行学习,将会对深度学习领域的图像处理技术和其在实际开发中的应用有更深的理解。

本书特色

  1. 内容全面,紧跟最新技术
    发展本书内容涵盖了深度学习的理论知识、数据获取与增强,以及深度学习在图像分类、分割和检测这三大基础研究领域中的发展、数据与模型的可视化、优化目标、模型压缩与部署等相关知识,基本上囊括了深度学习在图像开发中所必须要掌握的大部分基础知识。
  2. 深度与广度兼具
    本书在讲解每个知识点时力求详尽,而且紧密结合了学术界与工业界相关技术的最新发展。这样的安排既注重知识的广度,也兼具知识的深度,可以为图像处理领域中的从业者提供系统性的学习指导。
  3. 理论与实践案例紧密结合
    本书不仅对理论知识进行了阐述,而且还给出了大量的实践内容,以帮助读者提高实际的动手能力。除了第 1、2章 主要介绍了深度学习的基础理论外,后续章节则大多采用了先系统介绍该章涉及知识的发展现状,然后有针对性地设计了一到两个实践案例带领读者学习,有较好的学习效果。
  4. 参考了不同层次学习者的意见
    本书若干内容的简化版本已在笔者运营的公众号平台上接受了不同层次读者的反馈,力求知识的完备性和准确性;另外,本书有多位编写者参与,他们或理论见长,或善于动手,让本书从不同层面得到了广泛的意见,可以满足不同人群的学习需求。

本书内容

第1章 神经网络基础

首先介绍了神经网络的生物基础与数学模型,然后介绍了卷积神经网络的基础知识,这也是当前深度学习模型的基础。

第2章 深度学习优化基础

首先介绍了深度学习主流开源框架,如Caffe、TensorFlow、Pytorch和Theano等,并对其特点与性能做了对比;然后介绍了网络优化参数,包括激活函数、正则化方法和归一化方法等。本章旨在让大家对深度卷积神经网络有一个较为全面的认识,给后续章节的学习打好基础。

第3章 深度学习中的数据

首先介绍了深度学习发展过程中的几个数据集,给读者展示了数据集对深度学习的重要性;然后介绍了几大重要发展方向中的数据集;接着讲述了数据增强的方法;最后讲述了数据的收集、整理及标注等相关问题。

第4章 图像分类

首先介绍了图像分类的基础、基于深度学习的图像分类研究方法及发展现状,以及图像分类任务中的挑战;然后以一个移动端的基准模型为例,展示了图像分类任务的实践流程;最后介绍了一个细粒度级别的图像分类任务,以一个较高的基准模型,展示了较难的图像分类任务训练参数的调试技巧。

第5章 图像分割

首先介绍了从阈值法到活动轮廓模型的传统图像分割方法;然后介绍了基于深度学习的图像分割方法的基本原理与核心技术;接着讲述了一个移动端的实时图像分割任务,该任务以MobileNet为基准模型,展示了图像硬分割任务实践的完整流程;最后介绍了一个更加复杂的肖像换背景的任务,展示了图像软分割任务的基本流程和应用场景。

第6章 目标检测

首先介绍了目标检测的基础和基本流程,并讲述了一个经典的V-J目标检测框架;然后介绍了基于深度学习的目标检测任务的研究方法与发展现状,并分析了目标检测中的核心技术;最后给出了一个目标检测任务实例,通过分析faster rcnn的源代码,使用该框架自带的VGG CNN 1024网络完成训练和测试,并总结目标检测中的难点。

第7章 数据与模型可视化

首先对包括低维与高维数据的可视化做了简单介绍;然后对深度学习中的模型可视化做了详细介绍,包括模型的结构和权重可视化;最后介绍了一个基于Tensorflow和Tensorboard的完整案例。

第8章 模型压缩

首先详细介绍了模型压缩的方法,然后以一个典型的模型压缩实战案例来阐述项目中的模型压缩上线。

第9章 损失函数

首先介绍了分类任务的损失函数;然后介绍了回归任务的损失函数;最后介绍了这些损失函数在几大经典图像任务中的使用。

第10章 模型部署与上线

依托微信小程序平台从3个方面介绍了模型部署的问题。首先介绍了微信小程序的前端开发,然后介绍了微信小程序的服务端开发,最后介绍了Caffe的环境配置。

第1章 神经网络基础

神经元

神经元人工神经网络(Artificial Neural Network)简称神经网络(Neural Network,NN),是人类模拟生物神经网络的结构和功能提出的数学模型,广泛应用于计算机视觉等领域。

感知机

感知机(Perceptron)

假设我们有一个 \(n\) 维输入的单层感知机,\(x_{1}\)\(x_{n}\)\(n\) 维输入向量的各个分量,\(w_{1}\)\(w_{n}\) 为各个输入分量连接到感知机的权量(或称权值), \(θ\) 为阈值,\(f\) 为激活函数(又称为激励函数或传递函数),\(y\) 为标量输出。理想的激活函数 \(f(·)\) 通常为阶跃函数或者 \(sigmoid\) 函数。感知机的输出是输入向量 \(X\) 与权重向量 \(W\) 求得内积后,经激活函数 \(f\) 所得到的标量:

\[ y=f\left(\sum_{i=1}^{n} w_{i} x_{i}-\theta\right) \]

公式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# coding:utf8
import numpy as np
import matplotlib.pyplot as plt
n = 0 # 迭代次数
lr = 0.10 # 学习速率
# 输入数据
X = np.array([[1, 1, 2, 3],
[1, 1, 4, 5],
[1, 1, 1, 1],
[1, 1, 5, 3],
[1, 1, 0, 1]])
# 标签
Y = np.array([1, 1, -1, 1, -1])
# 权重初始化,取值范围-1到1
W = (np.random.random(X.shape[1])-0.5)*2


def get_show():
# 正样本
all_x = X[:, 2]
all_y = X[:, 3]

# 负样本
all_negative_x = [1, 0]
all_negative_y = [1, 1]

# 计算分界线斜率与截距
k = -W[2] / W[3]
b = -(W[0] + W[1]) / W[3]
# 生成x刻度
xdata = np.linspace(0, 5)
plt.figure()
plt.plot(xdata, xdata*k+b, 'r')
plt.plot(all_x, all_y, 'bo')
plt.plot(all_negative_x, all_negative_y, 'yo')
plt.show()

# 更新权值函数


def get_update():
# 定义所有全局变量
global X, Y, W, lr, n
n += 1
# 计算符号函数输出
new_output = np.sign(np.dot(X, W.T))
# 更新权重
new_W = W + lr*((Y-new_output.T).dot(X))/int(X.shape[0])
W = new_W


def main():
for _ in range(100):
get_update()
new_output = np.sign(np.dot(X, W.T))
if (new_output == Y.T).all():
print("迭代次数:", n)
break
get_show()


if __name__ == "__main__":
main()
感知机模型分割结果示意图
单隐层前馈网络示意图
多层前馈网络示意图
BP算法公式

BP算法公式
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

感知机模型解决NOR问题结果示意图
不同风格的手写字符示意图
31
32
33
二维卷积的实例
感受野示例图
最大池化操作示意图

第2章 深度学习优化基础

深度学习主流框架参数对比
Sigmoid
tanh
tanh函数示意图
ReLU
ReLU函数示意图
Leaky ReLU
Leaky ReLU函数示意图
指数线性单元ELU
SELU
Softmax
48
49

50
51
基于动量项的SGD示意图

Nesterov加速梯度下降法(Nesterov Accelerated Gradient, NAG)
NAG
Adagrad
Adagrad
57
58

Adam
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

第3章 深度学习中的数据

人脸检测结果
人脸检测提取出的脸部和关键点信息

原图
数据增强示意图
水平翻转和垂直翻转图
随机旋转图
随机裁剪图
竖直方向与水平方向缩放变形图
原图与添加随机高斯噪声图
Coarse Dropout添加噪声图
随机擦除法添加噪声图
不同程度的高斯模糊图
颜色扰动图
SMOTE方法

mixup方法
生成对抗网络GAN
DCGAN生成的嘟嘴嘴唇样本图

第4章 图像分类

LeNet5网络结构
单标签分类
100
101
多标签分类 平均分类准确度
汉明距离

原图(左), laplacian of gaussian边缘检测结果(右)
不同表情的图片
百度AI小程序识别结果

表情样本

MobileNet基本组成单元Depthwise Separable Convolutions
训练损失
训练精度
双线性网络结构
共享部分权重和共享全部权重
双线性部分网络示意图

Signed_sqrt_layer是进行带符号的归一化操作

准确率曲线
损失曲线
损失曲线
准确率曲线
损失曲线
精度曲线
测试不同batch size的对精度的影响
测试不同分辨率的影响
测试不同正则化因子的影响
损失曲线

第5章 图像分割

125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171

第6章 目标检测

172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197

第7章 数据与模型可视化

198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216

第8章 模型压缩

217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242

第9章 损失函数

243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294

第10章 模型部署与上线

295
296
297
298
299
300
301
302
303
304