《深度学习与图像识别:原理与实践》读书笔记

《深度学习与图像识别:原理与实践》

书名:深度学习与图像识别:原理与实践
作者:魏溪含,涂铭,张修鹏
出版社:机械工业出版社
出版时间:2019-06
ISBN:9787111630036

介绍

第 1 章 介绍图像识别的一些应用场景,让读者对图像识别有个初步的认识。
第 2 章 主要对图像识别的工程背景做简单介绍,同时介绍了本书后续章 节实战案例中会用到的环境,因此该章 是实战的基础。
第 3~6 章 是图像识别的技术基础,包括机器学习、神经网络等。该部分的代码主要使用Python实现。没有机器学习基础的同学需要理解这几章 之后再往下看,有机器学习基础的同学可以有选择地学习。
第 7 章 是一个过渡章 节,虽然
第 6 章 中手动用Python实现了神经网络,但由于本书后面的图像识别部分主要使用PyTorch实现,因此使用该章 作为过渡,介绍如何使用PyTorch来搭建神经网络。
第 8~12章 为图像识别的核心。
第 8 章 首先介绍了图像中的卷积神经网络与普通神经网络的异同,并给出了常见的卷积神经网络结构。接下来的
第 9 ~12章 分别介绍了图像识别中的检测、分割、产生式模型以及可视化的问题,并在每章 后面给出相应的实战案例。
第 13 章 简单介绍了图像识别的工业部署模式,以帮助读者构建一个更完整的知识体系。

第1章 机器视觉在行业中的应用

人工智能相关领域关系图
人工智能的第三个“春天”

机器视觉的主要应用场景

人脸识别(Face Recognition)

处理过程

人脸图像采集及检测
人脸图像预处理
人脸图像特征提取
匹配与识别

人脸识别的主要应用场景
人脸识别应用场景

视频监控分析

视频监控分析的应用场景
交通异常事件监测

工业瑕疵检测

工业瑕疵诊断应用场景

图片识别分析

图片识别应用效果

自动驾驶/驾驶辅助

自动驾驶汽车应用场景

技术链

  • 感知阶段
    1. 使用机器视觉获取场景中的深度信息,以帮助进行后续的图像语义理解,在自动驾驶中帮助探索可行驶区域和目标障碍物。
    2. 通过视频预估每一个像素的运动方向和运动速度。
    3. 对物体进行检测与追踪。在无人驾驶中,检测与追踪的目标主要是各种车辆、行人、非机动车。
    4. 对于整个场景的理解。最重要的有两点,第一是道路线检测,其次是在道路线检测下更进一步,即将场景中的每一个像素都打成标签,这也称为场景分割或场景解析。
    5. 同步地图构建和定位技术。
  • 规划阶段
  • 控制阶段

三维图像视觉

医疗影像诊断

医疗影像诊断的应用场景
肝脏及结节分割技术

文字识别(OCR)

计算机文字识别,俗称光学字符识别(Optical Character Recognition),是利用光学扫描技术将票据、报刊、书籍、文稿及其他印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。

文字识别技术的应用场景
文字识别技术的应用场景

图像/视频的生成及设计

第2章 图像识别前置技术

深度学习框架

  • Theano
  • Tensorflow
  • MXNet
  • Keras
  • PyTorch
  • Caffe

搭建图像识别开发环境

Anaconda

Anaconda的下载
打开Anaconda进入Jupyter
Jupyter notebook界面
Anaconda环境测试界面

通过conda搜索beautifulsoup
1
2
3
4
5
6
7
8
9
# 创建第2~7章代码运行的环境:
conda create -n basic_env python=3.7 # 创建一个名为basic_env的环境
source activate basic_env # 激活这个环境—Linux和macOS代码
activate basic_env # 激活这个环境—Windows代码
# 创建第8~12章代码运行的环境:
conda create -n imgrecognition_env python=3.7
# 创建一个名为imgrecognition _env的环境
source activate imgrecognition _env # 激活这个环境—Linux和macOS代码
activate imgrecognition_env # 激活这个环境—Windows代码

Pytorch 的下载与安装

PyTorch安装界面

Numpy

创建数组
创建数组
在Notebook中引入Numpy
Numpy预置函数及说明
KNN例子

第3章 图像分类之KNN算法

KNN的理论基础与实现

KNN例子的散点图
电脑看到的图片均为0~255的数字

图像分类识别预备知识

归一化图示
数字5

KNN实战

两张图片曼哈顿距离的计算方法
数字7

Cifar10数据集示例
青蛙图片
整个数据集

模型参数调优

整个数据集拆分成训练集和测试集
训练集、验证集和测试集
交叉验证的数据拆分方法
图像中具体某个像素值的无意义性

第4章 机器学习基础

线性回归模型

线性回归拟合直线

逻辑回归模型

逻辑回归分类示意图
Sigmoid函数
Sigmoid函数图像
损失函数示意图
一元二次损失函数梯度下降过程示意图
学习率η=0.01时,一元二次损失函数梯度下降过程示意图
学习率η=0.8时,一元二次损失函数梯度下降过程示意图
学习率η=1.1时,一元二次损失函数不收敛
损失函数if y=1
损失函数if y=0

第5章 神经网络基础

神经网络

神经网络全连接结构
多隐藏层结构
神经元结构图
简单神经元
训练网络
神经元个数较少
神经元个数较多
神经元个数更多
线性分类图1
线性分类图2

线性不可分
激活函数表达能力
Sigmoid函数
Tanh函数
ReLU函数
前向传播 1
节点1节点2
前向传播 2
增加bias

输出层

Softmax
猫狗小鸡分类
输出层的神经元个数

批处理

单个处理
批处理

广播原则

广播原则1
广播原则2

损失函数

均方误差
交叉熵误差
带入Loss函数
Mini-batch

最优化

一维函数求导

第6章 误差反向传播

激活函数层的实现

x+y计算图
(x+y)*z的计算图
ReLU反向传播实现
导数
Sigmoid反向传播实现
Sigmoid计算图

Affine层的实现

152
153
154
155
162
163

Softmaxwithloss层的实现

164
165
166

正则化惩罚

167
169
正则化项在神经网络中的重要作用

第7章 PyTorch实现神经网络图像分类

PyTorch的使用

Variable

Variable

激活函数

激活函数可视化

PyTorch实战

第8章 卷积神经网络

卷积神经网络(Convolutional Neural Network,CNN)是一种深度前馈神经网络,目前在图片分类、图片检索、目标检测、目标分割、目标跟踪、视频分类、姿态估计等图像视频相关领域中已有很多较为成功的应用。

卷积神经网络基础

全连接层(Fully Connected Layer)

全连接示意图

卷积层(Convolution Layer)

一维卷积kernel=1*3,stride=1计算过程示意图
一维卷积kernel=1*3,stride=2计算过程示意图
二维卷积,kernel=3*3,stride=1计算过程示意图
二维卷积,kernel=3*3,stride=2计算过程示意图
三维卷积kernel=553,stride=1,计算过程示意图
卷积神经网络示意图
kernel=3*3,pad=1示意图

池化层

池化filter=2*2,stride=2的最大池化(max pooling)操作

常见卷积神经网络结构

AlexNet

AlexNet
ReLUs与tanh作为激活函数在4层卷积神经网络中的收敛速度对比
ILSVRC图像识别分类比赛优胜情况

VGGNet

AlexNet和VGGNet网络结构对比
一维卷积中3组33与1组77kernel效果相同的原理解说图
VGG16Net网络结构

GoogLeNet

矩阵转换方式
简单的inception结构
简单inception结构对应计算量
降维的inception结构及计算量推导
GoogLeNet网络结构图

ResNet

一个20层和56层卷积神经网络中训练和预测过程中的误差情况
普通卷积层与残差卷积层
ResNet网络结构缩略图
不同网络结构性能对比

ResNeXT

加宽的残差网络模块
ResNeXT网络模块

DenseNet

DenseNet核心网络结构

VGG16实现Cifar10分类

VGG16训练Cifar10过程输出

第9章 目标检测

定位+分类

检测问题定义
分类问题vs定位问题
分类+定位网络结构设计

目标检测

使用定位+分类解决目标检测存在的问题
使用滑窗方法做目标检测存在的问题:滑窗的尺寸、大小、位置不同将产生非常大的计算量

R-CNN

R-CNN训练过程
不同压缩方法图示
IOU图示
R-CNN中的ROI结果微调
Fast R-CNN训练和预测过程示意图
Fast R-CNN中的ROI Pooling
R-CNN和Fast R-CNN训练和测试时间对比

Faster R-CNN训练流程
RPN原理
RCNN、Fast R-CNN、Faster R-CNN模型耗时对比
RCNN、Fast R-CNN、Faster R-CNN模型对比

YOLO

基于PASCAL VOC2012目标检测数据集的YOLO示意图

SSD

SSD特征层与anchor示意图
SSD结构图

SSD实现VOC目标检测

原始图片
语义分割的真实label图片
实例分割的真实label图片
ResNet50训练PASCAL VOC过程部分打印结果展示

SSD效果示意图(未完全迭代的结果)
SSD作者在VOC2007数据集上达到的效果

第10章 分割

分割问题定义

FCN

最简单直观的语义分割方法
改良后的CNN语义分割网络结构
Unpooling的几种方法
卷积和反卷积图例
kernel为3、stride为2的1维反卷积计算过程

U-Net结构
CrackForest训练数据展示
U-Net预测CrackForest结果
SegNet的网络结构

PSPNet

语义分割容易出现的问题
PSPNet的网络结构

实例分割

检测、分割任务对比
多任务学习中“head”的设定方法

层叠式

层叠式实例分割网络结构

扁平式

Mask R-CNN的网络结构
Mask-RCNN的网络head的设计细节

第11章 产生式模型

机器学习

  1. 有监督学习
  2. 无监督学习
  3. 强化学习

数据集

  1. 数据x
  2. 标签y

自编码器(Autoencoder)

对抗生成网络

Autoencoder学习过程
GAN的训练结构
GAN最终使用的产生器
产生器生成的一些假图的例子

DCGAN及实战

DCGAN(Deep Convolutional Generative Adversarial Network)由Radford等人提出,结合了深度卷积神经网络和GAN,并对上述GAN进行了扩展。DCGAN将GAN中的产生器G和判别器D都换成了卷积神经网络,并对其中的卷积做了一些改动以提高收敛速度,具体如下。

  1. 用不同步长的卷积层替换所有Pooling层。
  2. 在D和G中均使用BatchNorm层。
  3. 在G网络中,除最后一层使用tanh以外,其余层均使用ReLU作为激活函数。
  4. D网络均使用LeakyRelu作为激活函数。

DCGAN结构
CelebFaces一些数据的展示
产生网络和判别网络的Loss变化情况
真假数据对比图
DCGAN在LSUN上生成的卧室图片
GAN和DCGAN在MNIST上的生成效果
生成向量包含的数学信息

LSGAN

不同Loss差异图示

WGAN

PG-GAN

PG-GAN思想
PG-GAN中从1616到3232的转换过程
PG-GAN产生的高清图片

各种GAN方法效果对比
一些扩展的GAN可以实现风格转换效果

第12章 神经网络可视化

卷积核

ConvNetJS在Cifar10上训练得到的参数
几种常见网络结构的第一层卷积
特征层表征
卷积神经网络特征层可视化工具
不同图片在conv5151上的激活情况,每个特征层都是13*13个像素

通过重构观测

“逆”卷积神经网络结构
反向池化
Layer3左上角第一张图的重构
完全训练的AlexNet在1~5个卷积层中选取被激活最强的9个通道复原后的图片
对图12-4a进行重构
5个特征层经过不同迭代次数的重构效果
末端CNN特征层的激活情况
遮挡不同区域对图片分类的影响

特征层的作用

利用CNN做特征提取可实现图像搜索功能

图片风格化

图片风格化效果
CNN在不同层上风格和内容重构的表现
示例中的风格图片和内容图片
输入的内容图片
风格化后的图片
风格和内容权重的比例对生成图片效果的影响
通过大量图片训练得到“风格网络”,从而对输入图片进行快速预测的方法

图像识别算法的部署模式

图像算法部署模式介绍

基于公共云云计算的计算机集群

阿里巴巴云计算公司提供的人脸识别服务
百度云计算公司提供的图像审核服务
腾讯云计算公司提供的图像文字识别OCR服务
AWS云计算公司提供的图像识别服务

基于私有云云计算的计算机集群

图像识别算法基于云计算架构的系统架构
图像识别算法基于私有云容器的架构

X86架构单机+备份模式

算法文件封装
图像识别算法基于普通X86服务器的部署架构

实际应用场景和部署模式的匹配

百度云、阿里云、腾讯云人脸属性识别公有云服务测试响应速度表
百度云计算公司在其公有云上提供的图像相关服务
阿里云计算公司在其公有云上提供的图像相关服务
腾讯云计算公司在其公有云上提供的图像相关服务