计算机视觉

计算机视觉

视觉相关概念

深度学习

深度学习相当于函数逼近问题,即函数或曲面的拟合 ,所不同的是,这里用作基函数的是非线性的神经网络函数,而原来数学中的用的则是多项式、三角不等式等。

贡献度分配问题(Credit Assignment Problem,CAP)

深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标 之间的数据流经过多个线性或非线性的组件(component)。因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当我们最后得到输出结果时,我们并不清楚其中每个组件的贡献是多少。这个问题叫作贡献度分配问题。

目前,一种可以比较好解决贡献度分配问题的模型是人工神经网络。神经网络和深度学习并不等价,深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型)。

深度学习

深度学习是将原始的数据特征通过多步的特征转换得到一种特征表示,并进一步输入到预测函数得到最终结果。深度学习需要解决的关键问题是贡献度分配问题。

深度学习采用的模型主要是神经网络模型,其主要原因是神经网络模型可以使用误差反向传播算法,从而可以比较好地解决贡献度分配问题。将超过一层的神经网络都看作深度学习模型。度的不断增加,其特征表示的能力也越来越强,从而使后续的预测更加容易。

ROI Pooling

特点是输入特征图尺寸不固定,但是输出特征图尺寸固定。

NMS非极大值抑制

bounding box

为什么要使用深层网络

  • 深度神经网络的学习是特征递进的,浅层的神经元只能学习一些低层次的简单特征(如边缘、纹理),而深层神经网络可以学到更高级特征。
  • 深层网络的隐藏单元数目较少,隐藏层数目较多。 若浅层网络想达到同样的计算结果须指数级增长单元数量。
  • 在神经元数量相同的情况下,深层网络具有更大容量,能构造更复杂的映射关系。

激活函数

激活函数的作用

  • 可以引入非线性因素,方便学习复杂数据。
  • 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。

常见的激活函数

  • sigmoid激活函:仅仅输出层为2分类问题时使用。
  • tanh激活函数:非常优秀的,几乎适合所有场合。
  • Relu激活函数:如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数。
  • Leak Relu激活函数:如果遇到了一些死的神经元,我们可以使用 Leaky Relu 函数。
  • Softmax激活函数:Softmax用于多分类问题,其将多个神经元的输出映射到(0,1)区间内,并且他们的和为1,因而我们可以将每个Softmax值理解为概率。选取概率最大的值作为分类的类别。

激活函数的性质

  • 非线性
  • 可导性:梯度计算
  • 单调性:当激活函数是单调的时候,单层网络能够保证是凸函数
  • :训练更高效

Batch Size

将一个epoch分批次进行训练,每批次训练样本的大小。

可以分批次进行训练,避免一次性读取所有数据而引发的内存不足问题。

归一化

  • 同一量纲,统一数据的评价标准。
  • 保证数据小的值不被吞食。
  • 加快收敛速度。
  • 避免神经元饱和。(神经元的激活在0或1时会饱和)。

归一化类型

  • 线性归一化
  • 标准差归一化
  • 非线性归一化
  • 局部响应归一化(LRN)

批归一化(Batch Normalization,BN)

  • 归一化的必要性
    • 神经网络学习的本质就是学习数据的分布规律,如果训练数据分布与测试数据分布不同,网络的泛化能力就会大大降低。同时如果每批的数据分布各不相同,那么网络每次迭代都要适应不同的分布,这样会大大降低网络训练速度。
  • 批归一化的原因
    • 由于本层的输入由上一层的参数和输入得到,而上一层的参数在训练过程中会一直跟新,因此必然导致其后面每一层的数据分布。
  • 定义
    • 以前在神经网络训练中,只对输入层的数据进行归一化处理,但是经过多层的神经网络运算后,数据分布变化会很大。因而考虑在中间层进行归一化处理。BatchNorm就是在每一层的输入时均选择一小批进行归一化处理。(BN)

批归一化算法

组归一化(Group Normalization,GN)

预训练和微调

权重随机初始化方法

高斯初始化

Xavier初始化

学习率

学习率决定了梯度下降的步长,在前期,学习率较大,梯度下降的步长会较长,这时能以较快的速度下降。而后期减小学习率,减小步长,能使算法易于收敛得到最优解。

学习率衰减的方法

  • 分段常数衰减
  • 指数衰减
  • 自然对数衰减
  • 多项式衰减
  • 余弦衰减

正则化

深度学习可能存在过拟合问题(低偏差——预测值偏离真实值小,高方差——-预测值较集中),通常可以使用增加训练数据量和正则化解决。

正则化的定义:通过修改学习算法减少泛化误差。

  • L1正则化
  • L2正则化
  • dropout正则化

样本增强

在训练样本较少时,通过样本增强增加样本数量,减少过拟合。

常用样本增强的方法(Augmentor包)

  • 对颜色增强:亮度、对比度、饱和度。
  • 裁剪、缩放
  • 水平、垂直翻转
  • 平移、旋转
  • 高斯噪声、模糊处理

池化层

池化层作用:保留显著特征。 减小特征图像大小。 增大感受野。

  • 全局平均池化(GAP)

训练过程中模型不收敛,是否说明该模型无效? 导致模型不收敛的原因

不能说明,可能存在以下原因:

  1. 学习率过大。
  2. 数据集标签不准确。
  3. 数据未做归一化。
  4. 样本信息量太大,模型不足以承受整个样本空间。
  5. 网络太浅。

优化方法

  • 随机梯度下降法(SGD)
  • Momentum动量优化器
  • AdaGrad自适应学习率优化器
  • AdaDelta自适应学习率优化器
  • RMSprop自适应学习率优化器
  • Adam自适应学习率优化器

提升网络泛化能力的方法

数据方面:增加数据量,对已有数据样本增强,数据归一化(BN)。

参数方面:学习率、batch_size

模型方面: 合适的初始化方法、添加正则化(dropout)、激活函数、优化器。

欠拟合与过拟合

欠拟合现象

  • 模型不能很好的拟合数据,通常表现在训练集上准确率不高。
  • 判断方法:每次只训练相同的数据,若一段时间后准确率很高,则说明网络的拟合能力不足,即当前网络无法拟合全部数据。

欠拟合解决方法

  • 增加网络的深度。
  • 减小正则化参数。

过拟合现象

模型学的太彻底,把一些噪声特征也学到了。通常表现在训练集上表现很好,但在测试集上准确率不高。

过拟合解决方法

  • 增加训练数据量,并对已有数据进行样本增强。
  • 采用正则化(dropout、L1、L2正则),
  • BN层。

神经网络为啥用交叉熵

卷积核size为奇数

  • 锚点在中间
  • Padding时图像两侧仍对称

评论