深度学习与计算机视觉基础
一、计算机视觉和人工智能深度学习的定义和关系
1、人工智能与深度学习
- 什么是人工智能?
- 人工智能就其本质而言是对人思维和解决问题过程的模拟。
- 什么是深度学习?
- 是一种模拟人脑结构,以人工神经网络为架构,提取数据表像后面更高维度与更深逻辑关系从而达到更准确效果的算法。
- 人工智能:专家系统、物理模型等
- 机器学习:kNN、sVM等
- 深度学习:全连接神经网络、卷积神经网络、循环神经网络等
- 机器学习:kNN、sVM等
2、计算机视觉(Computer Vision)
- 计算机视觉是一门研究如何使机器“看”的科学,更进一步说,就是指用计算机和视觉系统代替人眼对目标进行识别、跟踪和测量等,并进一步做图像处理和分析。
- 视觉是人脑最主要的信息来源,也是进入人工智能殿堂的大门。
- 计算机视觉的常用领域:
- 控制过程:指引机器臂、工业机器人
- 导航:自动驾驶或移动机器人
- 检测:视频监控和人脸识别
- 组织信息:基于图像和图像序列的智能搜索
- 造型对象或环境:医学图像分析系统或地形模型
- 智能交互:情感识别,人机交互
- 计算机视觉四大主流任务:
- 图像分类、识别
- 语义分割
- 目标检测
- 实例分割
- 其他任务(图片增强、目标追踪、视觉创意)
二、深度学习在计算机视觉的前沿应用
- 人脸识别
- OCR(Optical Character Recognition,光学字符识别)——车牌、银行卡号识别
- 图像搜索引擎
- 自动驾驶
- 智能监控
- 视觉创意
- 机械臂指引
三、经典计算机视觉——数字图像处理
1、计算机视觉与数字图像处理
- 计算机视觉(Computer Vision)是模仿人眼和大脑“看图”和“理解”的过程,关键词是“真实”和“理解”;输入是图片,输出是模型、识别结果等从图像中提取的信息,如:背景分割、运动检测、物体识别、人脸识别。
- 数字图像处理(Digital Image Processing)是在看图前对图像进行的各种预处理工作,包括已有的图像进行变换、分析、重构、像素级的处理;输入是图像,输出也是图像,如:图片的增强、去噪、滤镜等。
- 计算机图形学(Computer Graphics)类似于人“画图”,是利用计算机进行图形的生成;输入是模型,输出是图像(像素),创造新的视觉感知,如:指纹生成、3D特效、游戏电影制作等。
2、图像处理
- 色彩模式:
- RGB颜色模式:是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,取值范围均为[0, 255]。
- 灰度图:范围取[0, 255],0表示黑色,255表示白色。
- HSV:类似于人类感觉颜色的方式,具有较强的感知度。
- 色相(H):是色彩的基本属性,就是平常所说的颜色名称,如红色绿色等,取值范围[0°, 360°]。
- 饱和度(S):是指色彩的纯度,越高颜色越纯,低则颜色变灰,取值范围[0%, 100%]。
- 明度(V):又称为亮度(L),取值范围[0%, 100%]。
- 颜色空间的转化:
- RGB转灰度图:(R+G+B)/3
- RGB转HSV:
- HSV转RGB:
3、图像滤波(平滑滤波和边缘检测)
- 深度学习神经网络卷积层的数学原理。
- 是图像预处理的一种
- 作用:
- 平滑滤波:消除图像中混入的噪声,降噪
- 边缘检测:为图像识别抽取图像特征
- 平滑滤波方法:
- 简单平均法
- 高斯滤波法
- 边缘检测方法:
- Roberts算子:
- Prewitt算子:
- Sobel算子:
- Canny算子:
- a. 用高斯滤波平滑图像
- b. 用Sobel等梯度算子计算梯度幅值和方向
- c. 对梯度幅值进行非极大值抑制
- 比较A、B、C中B是否为最大值,B若为最大值,则B保留,否则B被抑制,置为0。
- 梯度方向垂直于潜在边界方向
- d. 对双阈值算法检测和连接边缘
- 大于T-max部分保留,小于T-min部分抑制,介于T-max和T-min之间部分,连接上曲线部分保留,连接下曲线部分丢弃。
- 不同算子的效果对比:
- Roberts算子:
4、图像阈值分割
- 计算机视觉分割任务的经典运用。
- 基于Otsu算法(大津算法)的阈值分割方法:
- 把图像转成灰度图
- 计算全部平均灰度w
- 选定一个阈值T把所有像素分成N0、N1两个部分
- 计算N0的灰度w0,和N1的灰度w1
- 计算类间方差
g=N0*(w0-w)²+N1*(w1-w)²=N0N1(w0-w1)²
- 采用遍历法找到Tmax使得g最大
5、基本形态学滤波:膨胀(Dilation)、腐蚀(Erosion)、开(opening)关(closing)运算
- 图像是降噪与数据清洗。
- 膨胀:通过将像素添加到该图像中的对象的感知边界,扩张放大图像中的明亮白色区域。常用于扩充边缘或填充小的孔洞。
- 腐蚀:通过将像素添加到该图像中的对象的感知边界,沿着物体边界移除像素并缩小物体的大小。常用于提取图像的骨干信息、消除孤立的像素点和噪点。
- 开运算:先腐蚀再膨胀。
- 闭运算:先膨胀再腐蚀。
四、经典计算机视觉算法
1、霍夫变换
- 主要用来识别规则的形状。
- 高阶特征的识别和提取。
- 理论:
- 在自动化分析数位图片的问题里,其中一个常有的子问题是侦测某些简单的直线、圆形、椭圆形。在多数情况下,边缘侦测器(edge detector)会先用来做图片前处理,将原本的图片变成只含有边缘的图片。因为图片的不完美或是边缘侦测的不完美,导致有些点(point)或像素(pixel)缺漏,或是有噪声使得边缘侦测器所得的边界偏离了实际的边界。所以无法直观的将检测出的边缘分成直线、圆形、椭圆形的集合,而霍夫变换解决上述问题,借由霍夫变换算法中的投票步骤,在复杂的参数空间中找到图形的参数,电脑可以由参数得知该边缘(edge)是哪种形状。
- 步骤:
- a. 选定要识别的形状的种类
- b. 将直角坐标系的参数空间投影到特殊的参数空间
- c. 寻找交点确定识别到的形状(通过在参数空间中累加的局部最大值)来决定
2、模板匹配
- 计算机视觉识别任务的经典应用。
- 模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。
- 模板就是一副已知的小图像,而模板匹配就是在一副大图像中搜寻目标,已知该图中有要找的目标,且该目标同模板有相同的尺寸、方向和图像元素,通过一定的算法可以在图中找到目标,确定其坐标位置。
3、经典计算机视觉算法缺陷
- 在实际应用中,经典计算机视觉算法在抗干扰、抗噪音上表现较差。
- 如:旋转、大小、形变、遮挡、亮度等其他泛化问题。
- 改进:
- SIFT算法:
- 即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。
- SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。
- Cascade算法(级联分类器)
- SIFT算法:
- 解决:卷积神经网络
五、卷积神经网络
1、神经网络的基础介绍
- ANN是指由大量的处理单元(神经元)互相连接而形成的复杂网络结构,是对人脑组织结构和运行机制的某种抽象、简化和模拟。人工神经网络(Artificial Neural Network,简称ANN),以数学模型模拟神经元活动,是基于模仿大脑神经网络结构和功能而建立的一种信息处理系统。
- 人工神经网络有多层和单层之分,每一层包含若干神经元,各神经元之间用带可变权重的有向弧连接,网络通过对已知信息的反复学习训练,通过逐步调整改变神经元连接权重的方法,达到处理信息、模拟输入输出之间关系的目的。它不需要知道输入输出之间的确切关系,不需大量参数,只需要知道引起输出变化的非恒定因素,即非常量性参数。因此与传统的数据处理方法相比,神经网络技术在处理模糊数据、随机性数据、非线性数据方面具有明显优势,对规模大、结构复杂、信息不明确的系统尤为适用。
- 由Minsley和Papert提出的多层前向神经元网络(也称多层感知器)是目前最为常用的网络结构。
2、神经网络的基本构成
- 神经元:
- 神经网络:
- 由多个神经元构成。
- 全连接神经网络:
- 卷积神经网络(CNN):
- 主要用于计算机视觉。
- 循环神经网络(RNN):
- 主要用于自然语言处理。
3、常用的激活函数
- Sigmoid函数:
- 公式:
- 是使用范围最广的一类激活函数,具有指数函数形状,在物理上最接近神经元。它的输出范围在(0,1)之间,可以被表示成概率,或者用于数据的归一化。
- 缺点:
- a. 软饱和性——导数 f'(x)=f(x)(1-f(x)),当x趋于无穷时,f(x)的两侧导数逐渐趋于0。在后向传递时,sigmoid向下传递的梯度包含了一个f'(x)因子,因此,一旦落入饱和区f'(x)就变得接近于0,导致了向后传递的梯度也非常小。此时,网络参数很难得到有效训练,这种现象被称为梯度消失。一般在5层以内就会产生梯度消失的现象。
- b. sigmoid函数的输出均大于0,这就使得输出不是0均值,这称为偏置现象。这将会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
- 公式:
- Tanh函数:
- 公式:
- tanh函数与sigmoid函数相比,输出均值为0,这就使得其收敛速度要比sigmoid快,从而可以减少迭代次数。
- 缺点:
- 同样具有软饱和性,会造成梯度消失。
- 公式:
- ReLu函数:
- 公式:
- ReLU全称为Rectified Linear Units,译为线性整流单元或者修正线性单元。
- 它在x>0时不存在饱和问题,从而使保持梯度不衰减,从而解决了梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新,这种现象称为“神经元死亡”
- 与sigmoid类似,ReLU的输出均值也大于0,所以偏移现象和神经元死亡共同影响网络的收敛性。
- 公式:
- 图像:
4、神经网络的训练
- 损失函数:
- 损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
- 损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。
- 梯度下降:
- 梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
- 反向传播算法:
- 反向传播算法(BP算法)适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。
5、卷积神经网络介绍
- 处理流程:
- 图像输入 -> 卷积层 -> 池化层 -> 全连接层 -> 结果输出
- 卷积层:
- 利用卷积算子来进行卷积运算。
- 卷积后尺寸大小:
6、经典卷积神经网络结构
- AlexNet
- ResNet
- 即残差网络,残差网络的特点是容易优化,并且能够通过增加相当的深度来提高准确率。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。
- Inception
-
构建卷积层时,要决定过滤器的大小究竟是 1×1、3×3、5×5,或者要不要添加池化层。而Inception网络的作用就是代替你来决定,虽然网络架构因此变得更加复杂,但网络表现却非常好。
六、卷积神经网络的优化
-
1、衡量模型的表现
- 以分类任务的预测情况为例:
- TP = True Positive(真阳性),该列的实际标签在测试数据集中为"是",模型也预测为"是"。
- FP = False Positive(假阳性),该列的实际标签在测试数据集中为"否",模型预测为"是"。
- TN = True Negative(真阴性),该列的实际标签为"否",模型也预测为"否"。
- FN = False Negative(假阴性),该列的实际标签为"是",模型预测为"否"。
- 准确度:
- Accuracy指整体无论正负预测都包含的正确率。
- accuracy = (TP + TN)/(TP + FP + TN + FN)
- 弊端:在实际需求中,不适用于不平衡的数据集。
- 精确度:
- Precision指正向预测的正确率。
- precision = TP/(TP + FP)
- 精确度通常用于最重要的情况,避免大量误报。
- 召回率/敏感度:
- Recall/Sensitivity指在所有真实结果为正的数据中,我们预测出来正值的比例。
- recall = sensitivity = TP/(TP + FN)
- 召回率通常用于真相检测最为重要的用例中。
2、过拟合问题的优化
- 过拟合问题:
- 过拟合是指为了得到一致假设而使假设变得过度严格,可能把一些噪声数据考虑进去,造成对未来数据预测错误。
- a. 训练验证集划分:
- 把目前已有的数据集划分为训练集、验证集、测试集(通常比例为60%、20%、20%),用训练集包含的数据来训练模型,利用模型在验证集上表现的好坏来优化训练集,最后用测试集来检验模型。
- b. 交叉验证:
- 把数据分成等比例的若干份,交替充当训练集和验证集,观察每组误差的平均值和方差来判断。
- c. 数据增强:
- 数据增强可以通过对初始图片进行旋转、形变、镜像、亮度变换、变色、增加白噪音来生成新的数据图片。
- d. 正则化(Regularization):
- 保留所有的特征变量,但是会减小特征变量的数量级。
- e. 随机失活(Dropout):
- 每次仅对网络中处于同一层次的部分节点进行训练。
- 可以有效避免权重分部不均造成的结果偏差情况。
- 弊端:训练时间较长,通常时长为不进行随机失活神经网络的2-3倍。
3、梯度消失/爆炸问题的优化
- 本质上梯度消失和爆炸产生的原因是因为网络层数太深从而引发的梯度反向传播中的连乘效应。
- a. 非饱和的激活函数:
- ReLu:让激活函数的导数为1,适用于第一象限。
- LeakyReLu:包含了ReLu的几乎所有有点,同时解决了ReLu中第二象限梯度消失带来的影响。
- b. 梯度截断(Gradient Clipping):
- 当梯度超过设定的阈值时候人为予以调整。
- c. 网络参数的初始化:
- Xavier初始化:
- 在一固定范围内均匀分布的初始化。
- 因为Xavier的推导过程是基于几个假设的,其中一个是激活函数是线性的。这并不适用于ReLU激活函数。另一个是激活值关于0对称,这个不适用于sigmoid函数。
- He初始化:
- 弥补了Xavier初始化的弊端。
- Pre-train初始化(迁移学习):
- 利用已经预设好权重的网络,在此基础上进行微调。
- Xavier初始化:
- d. 批量规范化(Batch Normalization):
- 机器学习领域有个很重要的假设:独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BN就是深度神经网络训练过程中使得每层网络的输入保持相同分布。
- 作用:
- 防止梯度爆炸
- 解决Internal Covariate Shift(内部协变量偏移),提高学习效率
- 减少了对于好的权重初始化的依赖
- 有助于解决overfitting(过拟合)
4、模型训练的优化
- a. 批训练
- 把训练集分成若干份,逐个训练。
- 优点:
- 提高训练速度
- 对训练过程引入随机性,帮助寻找全局最优解
- 缺点:
- 训练时间太长
- b. 动量梯度下降法(gradient descent with momentum)优化器
- c. RMSProp优化器
- d. 自适应矩阵Adam优化器
- 综合了动量梯度下降法优化器和RMSProp优化器。
5、其他优化策略
- 贝叶斯极限
- 指收集到的已有数据可以识别的理论极限。
- 准确度:贝叶斯极限 > 人类识别 > 训练准确度 > 验证准确度&测试准确度 > 长时间真实应用环境
- a. 降低训练误差:
- 更复杂的模型
- 更长时间的训练和优化
- 更优的超参数
- b. 降低验证&测试误差(过拟合问题):
- 更对更全面的数据
- 解决过拟合的策略
- 简化的模型结构&参数组合
- c. 满足指标和优化指标:
- 在符合满足指标的前提下选择优化指标的最佳项。
- 通常有一个优化指标,其余为满足指标。
- d. 输出层的考量:
- Linear:回归预测
- Sigmoid:二分类
- Softmax:多分类
- e. 非对称数据训练和优化:
- 数据增强扩大比例较低的样本的数量
- 修改损失函数赋予比例较低样本更高的权重