计算机视觉读书系列(1)——基本知识与深度学习基础
研三即将毕业,后续的工作可能会偏AI方向的计算机视觉方面,因此准备了两条线来巩固计算机视觉基础。
一个是本系列,阅读经典《Deep Learning for Vision System》,做一些总结跑一些例子,也对应本系列文章
二是OpenCV实践系列,根据官方自学OpenCV使用方法,对应"OpenCV-Python自学系列"。
后续准备在实际项目中引入一些目前的大模型的东西,视觉语言模型在传统CV任务上的理解和实践等。
本期主要包括基础知识和深度学习介绍。本篇主要以概念为主
一、计算机视觉通识
1.1 计算机器视觉
视觉系统:传感设备 + 解释设备
1.2 计算机视觉的应用
略
1.3 计算集视觉处理流程
计算机视觉处理流程:输入数据——预处理——特征提取——机器学习模型。
以图像分类算法为例,其流程为:从视觉设备输入一张图像、对图像进行预处理(标准化、重采样、模糊、旋转、颜色变换等等)、特性提取(输出为特征向量)、将特征喂到分类模型中、输出概率(该概率代表输入相片是该类别的概率)
1.4 图像输入
图像坐标系:原点为最左上角,横着为x,向右为正;竖着为y,向下为正。(注意,在代码张对图像数据,也即矩阵,进行索引时,仍然按照直观上的行列进行索引)。
图像映射:图像时多层矩阵的组合,每个矩阵中的元素值可看作该点坐标的映射,也即z=f(x,y),z表示坐标为(x,y)的像素值。
通道:通常情况下,灰度图像为单通道,取值范围0-255,0为黑色,255为白色。彩色图像由三通道组成,R(红色)G(绿色) B(蓝色)。
1.5 图像预处理
预处理一:将图像由彩色转化为灰度降低计算复杂性。对于那些颜色不是很重要的特征而言,可使用该方法。
预处理二:重采样固定模型输入尺寸。
预处理三:数据增强。
等等。。。
理论:没有一个方法或一个策略能适合于所有的任务。
1.6 特征提取
特征定义:
在机器学习过程中,我们希望将原始数据转换为特征向量(一维向量,能简单表示整个类别),再将特征向量展示于我们的学习算法。
如何选择一个好的特征(如何提取出好的特征)?
传统特征提取和DL的区别:
二、深度学习基础
2.1 理解感知机
感知机的构成主要包括以下几个方面:输入向量、权重向量、神经函数、输出。如图
感知机如何进行学习:感知机通过测试和误差从他的错误中进行学习。
2.2 多层感知机
单层的感知机能力有限(线性问题),无法解决复杂情况的问题。因此使用多层神经元的感知机,也即多层感知机。关于多层感知机的概念需要清楚的是:
隐含层的数量:输入层于输出层之间的网络被称为隐含层,隐含层越多其模型拟合能力越强,但容易过拟合。
激活函数:在某个神经元进行加权求和后进行映射操作,是神经网络具备非线性拟合能力的关键。
误差函数:用于衡量模型的预测结果和真实结果之间差距的函数。
优化器:基于模型现有误差对模型进行调整的优化算法。
Batch-Size:采用MiniBatch方式进行训练的情况下,每个批次的包含样本的多少。
训练轮数:整个训练进行的轮次数。
学习率:(优化过程中)学习速度的控制。
2.3 激活函数
激活函数的目的:往神经网络中引入非线性。
线性激活函数:
步型函数:
Sigmoid函数:将无限连续的变量转移到简单的0-1之间的概率。广泛用于分类中。
softmax函数:对Sigmoid函数的泛化,Sigmoid只能处理单类问题,而sigmoid能处理多类型分类中的概率计算问题。
tanh函数:这个函数在隐含层中表现往往比sigmoid函数更好,因为使用tanh会使得数据的均值更接近于0而不是sigmoid的0.5,使得后续的训练更加简单。
ReLU函数:ReLU函数被认为是目前最优秀的(state-of-the-art)的激活函数。
Leaky ReLU函数:虽然用得不多,但通常略优于ReLU,主要是在小于0是提供了小幅度的导数。
2.4 前馈过程
神经网络的前馈过程,加权求和(矩阵乘法)——激活函数——加权求和——激活函数...
其计算过程可表示为:
表示矩阵乘法可为:
2.5 误差函数
常用的误差函数主要由两大类,MSE(Mean Square Error)和Cross Entropy Error。
MSE主要用于回归问题,用于衡量两个向量在空间中的欧式距离的大小。
交叉熵函数(Cross Entropy Error):量化预测概率和目标概率之间的差距。
参数描述如下:
2.6 优化算法
Batch Gradient Descent:逐步的根据梯度信息对误差进行优化。
梯度:其方向代表了误差下降最快的方向,梯度仅仅提供误差下降的方向信息。
学习率:决定了迭代速度。
Batch GD:将所有数据放在一个Batch中,进行训练,每一个参数更新都是计算了所有训练数据集后的结果。
Stochastic Gradient Descent(SGD):在每次参数更新时只随机选择一组样本数据计算误差。
在实际应用中SGD表现要由于Batch GD。
Mini-Batch Gradient Descent(MBGD):将数据集按一定的尺寸分割为不同批次,每计算一个批次就进行一次参数更新。
其余优化算法:Adam、Adagrad、RMSprop等...
2.7 反向传播
根据链式求导法制对每个参数求偏导,获得梯度,进而计算其参数的改正值。
对网络中某个参数的求解可如下:
相当较为基础,笔记较为简略,欢迎批评交流。
下一期:卷积
共勉。