计算机视觉与人工智能

学习日记

Posted by BY Bigboss on June 21, 2021

计算机视觉与人工智能

       --北京邮电大学 鲁鹏

p1 前言

图像处理与计算机视觉区别:

图像处理的输入和输出都是图像,输入和输出之间的最大的区别是改善了图像之间人们需要改善的一部分,例如图像增亮,去噪,去模糊等。

计算机视觉的输入是图像,输出不仅限与图像,比如输入的图像可以输出语义标签,或者是图像三维场景的结构信息,强调的输出更多的是内容的输出,不仅限于感官的输出。

计算机视觉的目标

跨越“语义鸿沟”建立像素到语义的映射

图像中包含何种信息

1.三维场景的结构信息

2.语义信息

深度学习三要素

算法,算力,数据

p2 线性分类器

分类模型

基于规则的方法是否可行

通过硬编码的方式识别猫或其他类

通过硬编码的方法识别猫或者其他类,是一件很困难的事。

数据驱动的图像分类方法

1.数据集构建

2.分类器设计与学习

3.分类器决策

分类器的设计与学习

RiEDxA.jpg

图像表示

1.像素表示

2.全局特征表示(如GIST):在图像上面抽出一些频率特征,适合全局特征,适合风景类,城市建筑等分类,不适合小事物的分类。

3.局部特征表示(如SIFT特征+词袋模型):可以更好的处理有遮挡的情况,将图片分成区块,然后进行分类。

分类模型

近邻分类器

贝叶斯分类器

线性分类器(主要讲)

支持向量机分类器

神经网络分类器(主要讲)

随机森林

Adaboost

损失函数

0-1损失

多类支持向量机损失

交叉熵损失

L1损失

L2损失

优化算法

1.一阶方法(主要讲)

​ 梯度下降

​ 随机梯度下降

​ 小批量随机梯度下降

2.二阶方法

​ 牛顿法(主要讲)

​ BFGS

​ L-BFGS

训练过程

数据集划分

数据预处理

数据增强

欠拟合和过拟合

​ 减小算法复杂度

​ 使用权重正则项

​ 使用droput正则化

超参数调整

模型集成

图像分类任务的评价指标

正确率=分对的样本数/全部样本数

错误率=1-正确率

TOP1指标与TOP5指标

TOP1指标:假设对一个图像有5个预测标签,其中在分析对错的时候只看第一个预测的标签,第一个预测的标签的正确与否就决定了整个算法是否正确。

TOP5指标:同样,TOP5的意思就是指标为前5个预测标签,只要这5个预测标签里面有对的就算整个算法的预测是正确的。

图像类型

1.二进制图像

计算机将图像读取为矩阵。矩阵内部的值为0或1。

2.灰度图像

同样将图像读取为矩阵,矩阵内部的值的范围为0到255,即256个值。其中0代表黑色,255代表白色,中间的值的颜色在黑色和白色之间。

3.彩色图像

彩色图像可以分为3个通道,即RGB,其中三个字母分别代表红色,绿色,蓝色。

大多数的分类算法都要求输入向量。

图像表示

将图像转换成向量的方法很多,这里介绍一种简单的方法,直接将图像矩阵转换成向量,表示为

这里面,rgb就是每个像素点对应的rgb值。

线性分类器的定义

线性分类器是一种线性映射,将输入的图像特征映射为类别分数。

线性分类器的决策:

其中,图片左侧的表达式叫做线性分类器的矩阵表示,通过将权值矩阵W,图像向量X值,和偏置b,带入计算可以得到最终的表达式的值,分类目标中表达式的最终的值最大的数所对应的物体就代表最终的预测。

例题

问题:CIFAR10数据集分类任务的分类器,W,x,b的维度是多少?

回答:CIFAR10有10个类别且图像大小为32*32*3,因此:

x是图像向量,其维度为3072维;

W是权值矩阵,其维度为10*3072维;

b是偏置矩阵,其维度为10*1的向量;

f是得分向量,其维度为10*1的向量;

线性分类器的权值向量

直观的理解权值矩阵,权值可以看成是一种模板,输入图像与评估模板的匹配程度越高,分类器的输出的分数就越高。

线性分类器的决策边界

分数等于0的线就是决策面,即线性分类器的矩阵表达式的值为0。

损失函数

损失函数的定义

损失函数搭建了模型性能与模型参数之间的桥梁,指导模型参数优化。

损失函数是一个函数,用于度量给定分类器的预测值与真实值的不一致程度,其输出通常是一个非负实数。

其输出的非负实数值可以作为反馈信号来对分类器参数进行调整,以降低当前实例所对应的损失值,提升分类器的分类效果。

多类支持向量机损失

例子:

正则项与超参数

接下来对正则项损失和超参数进行介绍:

正则项损失:

超参数:

L2正则项:

L2正则项中将分类器输出的值进行平方取平均值,L2正则损失对大数据权值进行惩罚,喜欢分散权值,鼓励分类器将所有维度的特征都用起来,而不是强烈的依赖其中少数几维特征。

L1正则项是将分类器的输出值取绝对值然后相加取平均值,然后弹性网络正则项类似于将两者混合,其中一部分的分类器输出取绝对值,一部分的分类器输出取平方。

正则项让权值有了偏好。正则损失的目的是防止模型在训练集上面学习得太好,即过拟合。

优化算法

什么是优化

参数优化是机器学习的核心步骤之一,它利用损失函数的输出值作为反馈信号来调整分类器参数,以提升分类器对训练样本的预测性能。

损失函数L是一个与参数W有关的函数,优化的目标就是找到使损失函数L达到最优的那组参数W,最直接的方法就是让L对W进行求导,令其导数等于0,就可以找到最优的那组参数W。

通常,L形式比较复杂,很难从这个等式直接求解出W!

梯度下降算法,随机梯度下降算法及小批量梯度下降算法

梯度下降方法是一种简单而高效的迭代优化方法。

可以理解为向负梯度方向走,学习率是算法中很重要的一部分。

下面是梯度下降算法的整体思路结构:

梯度计算的方法:

1.数值法

即一维变量,函数求导,也就是数学中的求导计算,整个计算过程计算量大,不精确。

2.解析法

即求数学中的梯度,特点是精确,速度快,导数函数推导易错、

数值梯度有什么作用?

答:求梯度的时候一般使用解析梯度,而数值梯度主要用于解析梯度的正确性校验。

接下来介绍随机梯度下降算法和小批量梯度下降算法:

训练过程

数据集划分

将数据集划分为训练集和数据集,训练数据用于寻找最优分类器,评估模型用于评测泛化能力。

需要处理的是超参数的问题,所以就需要将数据集分为训练集,验证集,测试集。

训练集用于给定的超参数时分类器参数的学习。

验证集用于选择超参数。

测试集评估泛化能力。

K折交叉验证:

如果数据很少的话,验证集包含的样本就会过少,就无法在统计上代表数据。或者由于随机性使得模型性能差别很大。几折就是将数据分成几份的意思。下面是K折验证的主要方法,打乱数据要比不打乱数据的随机性更好一些。

数据预处理

数据预处理包括去均值,归一化,去相关,白化等操作。

计算机视觉与深度学习

全连接神经网络

首先下面的流程图是整个全连接神经网络所要学习的内容。

图像表示

像素表示与之前所说的相同,将不同像素点的rgb值转化为一个列向量,直接利用原始像素作为特征,例如cifar10中每个图像可表示为特征。

分类模型

多层感知器:

下面是多层全连接网络的表达式:

RVKxzt.jpg

全连接神经网络之所以特征提取能力更强就是如图所示,其中W1可以按照个人的需求自己设定,调整W1行数等于增加模板个数,W2需要匹配多个模板的结果来实现最终打分。这样分类器就可以学到更多我们想让其学到的东西。

线性分类器可以分类线性关系的数据,而神经网络可以分类处于非线性关系的数据。

全连接神经网络的命名:一般的神经网络包括输入层,隐藏层,输出层,然后神经网络的层数不包括输入层,剩下的层数就是这个神经网络的层数。如果说N隐层神经网络就和上面不一样,这里指隐层的数目为N。例如:

N层全连接神经网络:除输入层之外其他层的数量为N的网络。

N个隐层的全连接神经网络:网络隐层的数量为N的网络。

激活函数

首先为什么需要激活函数,就如下图所示,假如没有激活函数的话,全连接神经网络就会变成一个线性分类器。

RVl3x1.jpg

接着是常见的激活函数

RVlvW9.jpg

其中Sigmoid的激活函数使得输出的值保持在0到1之间。ReLU激活函数是最常用的激活函数,其作用就是将小于0的值归0。tanh激活函数的作用是使得输出的值保持在-1到+1之间,保持其对称性,也会保留原本的正负,最后Leaky ReLU激活函数的正半轴与ReLU相同,负半轴将其缩小为原来的十分之一。

网络结构设计

对于网络结构设计,应该考虑两个问题。

1.用不用隐层,用一个还是用几个隐层?(深度设计)

2.每隐层设置多少个神经元比较合适?(宽度设计)

依据分类任务的难易程度来调整神经网络模型的复杂程度。分类任务越难,我们设计的神经网络结构就应该越深,越宽。但是,需要注意的是对训练集分类精度最高的全连接神经网络模型,在真实场景下识别性能未必是最好的(过拟合)。

小结:

1.全连接神经网络的组成:一个输入层,一个输出层以及多个隐层;

2.输入层与输出层的神经元个数由任务决定,而隐层数量以及每个隐层的神经元个数需要人为指定;

3.激活函数是全连接神经网络中的一个重要部分,缺少了激活函数,全连接神经网路将退化为线性分类器。

输入值用预处理来实现零均值等操作,激活函数作用于全连接神经网络,作用于神经元,线性变换以后的输出上面的。

### 损失函数

SOFTMAX与交叉熵:首先介绍SOFTMAX,其中对于隐层输出的值取e的次方是和logistic回归有关,是推到出来的表达式。接着是交叉熵,我们也可以推导出交叉熵等于熵与相对熵的和。

RVOfr8.jpg

RZcfcn.jpg

对比多类支持向量机损失:

接下来,将交叉熵损失与支持向量机损失相对比可以得到:

RZ5fm9.jpg

RZ5blD.jpg

从上面可以看到,在同样可以预测正确的情况下,不同的损失函数所计算出来的结果是不一样的,交叉熵损失对比支持向量机损失能看出更多的数据。

优化算法

计算图与反向传播

计算图是一种有向图,它用来表达输入输出以及中间变量之间的计算关系,每一个节点对应着一个数学运算。

计算图总结:

1.任意复杂的函数,都可以用计算图的形式总结。

2.在整个计算图中,每个门单元都会得到一些输入,然后,进行下面两个计算:

a)这个门的输入值。

b)其输出值关于输入值的局部梯度

3.利用链式法则,门单元应该将回传的梯度乘以它对其的输入的局部梯度,从而得到整个网络的输出对该门单元的每个输出值的梯度。

计算图的颗粒度:可以将表达式直接求导,这样颗粒度比较大,计算效率快。也可以按照公式逐步求导,这样计算下来颗粒度比较小,但是计算效率不高。

常见门单元如下:

RJvdyt.jpg

再谈激活函数

梯度消失:梯度消失是神经网络训练中非常致命的一个问题,其本质是由于链式法则的乘法特性导致的。

梯度爆炸:断崖处梯度乘以学习率后会是一个非常大的值,从而“飞”出了合理区域,最终导致算法不收敛。解决办法包括把沿梯度方向前进的步长限制在某个值内就可以避免“飞”出了,这个方法也称为梯度裁剪。

sigmoid函数使用频率不高的原因:其梯度情况不好,最高的梯度是0.25,如果神经网络的层数比较多的话就会出现梯度消失现象。双曲正切函数tanh(x)与sigmoid类似,局部梯度特性不利于网络梯度流的反向传播。

Relu函数:当输入大于0时,局部梯度永远不会为0,比较有利于梯度流的传递。

Leakly Relu函数:基本没有死区,也就是梯度永远不会为0。之所以说基本,是因为函数在0处没有导数。

激活函数结论:尽量选择Relu函数或者Leakly ReLU函数,相对于Sigmoid或者是tanh,ReLU函数或者Leakly ReLU函数会让梯度流更加顺畅,训练过程收敛更快。

动量法与自适应梯度:

梯度下降法存在的问题1)损失函数特性:一个方向上变化迅速而在另一个方向上变化缓慢。

​ 2)优化目标:从起点处走到底端笑脸处。

​ 3)梯度下降算法存在的问题:山壁间震荡,往谷低方向的行进较慢。

动量法介绍:

RscRN4.jpg

自适应梯度法:

自适应梯度法通过减小震荡方向步长,增大平坦方向步长来减小震荡,加速通往谷低方向。自适应梯度法通过减小震荡方向步长,增大平坦方向步长来减小震荡,加速通往谷低方向。关于震荡方向和谷低方向的划分,梯度幅度的平方较大的方向是震荡方向,梯度幅度较小的方向是平坦方向。

Adam是上面两种算法的合并。将两种算法的优点合并在一起。

权值初始化小结

1.好的初始化方法可以防止前向传播过程中的信息消失,也可以解决反向传播过程中的梯度消失。

2.激活函数选择双曲正切或Sigmoid时,建议使用Xaizer初始化方法。

3.激活函数选择ReLU或Leakly ReLU时,推荐使用He初始化方法。

批归一化:

直接对神经元的输出进行批归一化。调整权值分布使得输出与输入具有相同的分布。如果每一层的每个神经元进行归一化,就能解决前向传递过程中的信号消失问题。

上面图中第一问答案:根据对分类的贡献自行决定数据分布的均值和方差。

第二问答案:来自与训练中,累加训练时每个批次的均值和方差,最后进行平均,用平均后的结果作为预测时的均值和方差。

过拟合与欠拟合:

过拟合–是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特性。

欠拟合–模型描述能力太弱,以至于不能很好地学习到数据中的规律。产生欠拟合的原因通常是模型过于简单。

机器学习的根本问题是优化和泛化的问题,优化–是指调节模型以在训练数据上得到最佳性能。泛化–是指训练好的模型在前所未见的数据上的性能好坏。

训练初期:优化和泛化是相关的,训练集上的误差越小,模型的泛化能力逐渐增强。

训练后期:模型在验证集上的错误率不再降低,转而开始变高。模型出现过拟合,开始学习仅和训练数据有关的模式。

关于过拟合的解决方法:最优方案:获取更多的训练数据。最优方案:调节模型允许存储的信息量或者对模型允许存储的信息加以约束,该类方法也称为正则化。

实际方案:1)调节模型大小

​ 2)约束模型权重,即权重正则化(常用的有L1,L2正则化)

​ 3)随机失活(Dropout)

随机失活为什么能够防止过拟合?

答:有三种解释。1)随机失活使得每次更新梯度时参与计算的网络参数减少了,降低了模型容量,所以能防止过拟合。2)随机失活激励权重分散,从这个角度来看随机失活也能起到正则化的作用,从而防止过拟合。3)Dropout可以看作模型集成。

神经网络中的超参数:

网络结构:隐层神经元个数,网络层数,非线性单元选择等

优化相关:学习率,Dropout比率,正则项强度等

学习率作为一种超参数,学习率过大,训练过程无法收敛。学习率偏大,在最小值附近震荡,达不到最优。学习率太小,收敛时间较长。学习率适中,收敛快,结果好。

超参数优化方法:

1)网络搜索法:1.每个超参数分别取几几个值,组合这些超参数值,形成多组超参数。2.在验证集上评估每组超参数的模型性能。3.选择性能最优的模型所采用的那组值作为最终的超参数的值。

2)随机搜索法:1.参数空间内随机取点,每个点对应一组超参数。2.在验证集上评估每组超参数的模型性能。3.选择性能最优的模型所采用的那组值作为最终的超参数的值。

随机搜索法是实验效果更好。

超参数搜索策略:1)粗搜索:利用随机法在较大范围里采样超参数,训练一个周期,依据验证集正确率缩小超参数范围。2)精搜索:利用随机法在前述缩小的范围内采样超参数,运行模型五到十个周期,选择验证集上精度最高的那组超参数。

建议:对于学习率,正则项强度这类超参数,在对数空间上进行随机采样更合适。

卷积与图像去噪

图像去噪与卷积

卷积核:用于存放权重的一个矩阵

卷积性质:1)叠加性 2)平移不变性 3)交换律,结合律,分配律,标量

边界填充:对原图周围进行填充,避免周边像素没有外界像素的问题。有拉伸,镜像等操作。

卷积操作后的图像要小于输入时图像,通过边界填充,我们可以实现卷积前后图像的尺寸不变。

一种最常用的边界填充就是零填充。

平均卷积核存在的问题:振铃。就是画面里面会出现横条和竖条。解决方法:根据邻域像素与中心的远近程度分配权重。

高斯卷积核

高斯卷积核:中心点矩阵数值大,离中心越远矩阵数值越小。

高斯卷积核的生成步骤:1)确定卷积核的尺寸,3*3,5*5,7*7等

​ 2)设置高斯函数的标准差,比如令其为1

​ 3)计算卷积核各个位置权重值

​ 4)对权重值进行归一化(平滑模板)

方差越大,平滑效果明显。模板尺寸越大,平滑效果越强。

卷积核参数:

高斯滤波器的作用:1)去除图像中的高频成分(低通滤波器)

2)两个高斯核卷积后得到的还是高斯卷积核,使用多次小方差卷积核连续卷积,可以得到与大方差卷积核相同的结果。使用标准差为x的高斯核进行两次卷积与使用标准差√2x的高斯核进行一次卷积相同。

3)可分离

可分解为两个一维高斯的乘积

例题:

高斯卷积核能够有效的抑制噪声,实现图像平滑,与此同时,高斯卷积核的堆叠以及分解都可以用于减少卷积计算的复杂度。

图像噪声与中值滤波器

噪声

椒盐噪声:黑色像素和白色像素随机出现

脉冲噪声:白色像素随机出现

高斯噪声:噪声强度变化服从高斯变化(正态分布)

中值滤波器

将所要进行卷积的矩阵中的所有值进行排序,将其中中间的数值作为矩阵卷积的结果。

建议椒盐噪声和脉冲噪声用中值滤波器的方法,高斯噪声可以用高斯卷积核来进行去噪。

高斯滤波器是线性滤波器。中值滤波器不是线性滤波器。

卷积与边缘提取

边缘:图像中亮度明显而急剧变化的点。

边缘的种类:1)表面法向量不连续 2)深度不连续 3)表面颜色不连续 4)光照不连续

图像梯度:梯度指向灰度变换最快的方向。

梯度模值常用来反应图像的边缘情况。

在提取图像的边缘的时候可以先进行平滑操作,就是将噪声信号先和高斯核进行卷积,得到去噪后的信号,最后将去噪后的信号进行求导,这样导数数值大的地方就是边缘所在的地方。

将高斯核函数进行求导得到高斯一阶偏导,这样可以直接将其对图像信号进行卷积就可以直接进行去噪求导操作。综合看来节省了一次图像卷积操作。

高斯一阶偏导卷积核的方差对于求出来的边缘会有影响。方差越小,得出来的边缘越细腻,方差越大,边缘越粗矿。

高斯核与高斯一阶导数的对比:

如果高斯一阶导数卷积核中的权值总和不是0的话,会导致对于像素恒定区域也会在卷积后产生变化,即与原来不同,也就是得到的结果不是0.

纹理表示

思路:利用卷积核组提取图像中的纹理基;利用基元的统计信息来表示图像中的纹理。

基于卷积核组的图像表示方法: 1)设计卷积核组 2)利用卷积核组对图像进行卷积操作获得对应的特征响应图组 3)利用特征响应图的某种统计信息来表示图像中的纹理。

纹理分类任务: 1)忽略基元位置 2)关注出现了哪种基元对应的纹理以及基元出现的频率 设计重点:卷积核类型(边缘,条形以及点状)

​ 卷积核尺度(3-6个尺度)

​ 卷积核方向(6个角度)

卷积神经网络

全连接网络的瓶颈:

卷积神经网络结构示例:

基于卷积核组的图像表示:

1)设计卷积核组;

2)利用卷积核组对图像进行卷积操作获得对应的特征响应图组;

3)利用特征响应图的某种统计信息来表示图像中的纹理;

卷积网络中的卷积核:

卷积核:1)不仅具有宽和高,还具有深度,常写成如下形式:宽度*高度*深度。

​ 2)卷积核参数不仅包括核中存储的权值,还包括一个偏置值。

卷积网络中的卷积操作:

计算过程:

1)将卷积核展成一个5*5*3的向量,同时将其覆盖的图像区域按相同的展开方式展成5*5*3的向量

2)计算两者的点乘

3)在点乘的结果上加上偏移量

特征响应图中每个位置上的值反映了图像上对应位置是否存在卷积核所记录的基元结构信息。

总结几点卷积层中的知识:

1)特征响应图组深度等于卷积核的个数。

2)不同的特征响应图反映了输入图像对不同卷积核的响应结果。

3)同一特征响应图上不同位置的值表示输入图像上不同位置对同一卷积核的响应结果。

注意:

卷积层输入不局限于图像,可以是任意三维数据矩阵;该层的卷积核深度要求与输入的三维矩阵的深度一致。

卷积步长

卷积神经网络中,卷积核可以按照特定的间隔进行卷积操作,这个间隔就是卷积步长。

关于卷积步长以及卷积核尺寸等存在的公式如下:

边界填充

卷积神经网络中最常用的填充方式就是零值填充。

当出现边界填充时,上图中的计算公式就发生了变化:

关于特征响应组尺寸的计算:

Rxytht.jpg

池化操作

池化的作用:对每一个特征响应图独立进行,降低特征响应图组中每个特征响应图的宽度和高度,减小后续卷积层的参数的数量,降低计算资源耗费,进而控制过拟合。

池化操作:对特征响应图某个区域进行池化就是在该区域上指定一个值来代表整个区域。

常见的池化操作:最大池化–使用区域内的最大值来代表这个区域。

​ 平均池化–采用区域内所有值的均值作为代表。

池化层的超参数:池化窗口和池化步长。

Rx6C4I.jpg

这里面的实例采用的是最大池化,如果是平均池化的话同样是丢掉75%的响应信息,同样不改变特征响应图的个数,不同的地方就是在选择留下的信息的时候要求平均数。

图像增强

存在的问题:过拟合的原因是学习样本太少,导致无法训练出能够泛化到新数据的模型。

数据增强:是从现在的训练样本中生成更多的训练数据,其方法是利用多种能够生成可信图像的随机变换来增加样本。

数据增强的目标:模型在训练时不会两次查看完全相同的图像。这让模型能够观察到数据的更多内容,从而具有更好的泛化能力。

样本增强的方法包括:翻转,随机缩放,抠图,色彩抖动,其他方案(平移,旋转,拉伸,径向畸变,裁剪等)。

经典网络解析

AlexNet

AlexNet–2012年ImageNet大规模视觉识别挑战赛冠军,精度提升超过10个百分点。关于ImageNet大规模视觉识别挑战赛有如下介绍:

W91L2d.jpg

W93Jqx.jpg

AlexNet主要贡献:

1.提出了一种卷积层加全连接层的卷积神经网络结构。

2.首次使用ReLU函数做为神经网络的激活函数。

3.首次提出Dropout正则化来控制过拟合。

4.使用加入动量的小批量梯度下降算法加速了训练过程的收敛。

5.使用数据增强策略极大地抑制了训练过程的过拟合。

6.利用了GPU的并行计算能力,加速了网络的训练与推断。

W98amq.jpg

接下来是我整理的AlexNet结构的卷积核尺寸及相关问题:

我们可以通过之前讲的计算方法得到卷积层输出的特征响应图组的大小,MAX POOL3的输出的特征响应图组的大小为6*6*256,将其整理为9216*1的向量作为全连接层的输入。

重要说明:

1.用于提取图像特征的卷积层以及用于分类的全连接层是同时学习的。

2.卷积层与全连接层在学习过程中会相互影响,相互促进。

重要技巧:

1.Dropout策略防止过拟合。

2.使用加入动量的随机梯度下降算法,加速收敛。

3.验证集损失不下降时,手动降低10倍的学习率。

4.采用样本增强策略增加训练样本数量,防止过拟合。

5.集成多个模型,进一步提高精度。

一些说明:

1.AlexNet分布于两个GPU,每个GPU各有一半神经元。因为在ALexNet提出的时候显卡的显存过小,导致必须要将其分布在两个GPU进行同时计算,我们现在在使用的时候可以将其直接放在一个GPU中进行计算。

2.CONV1,CONV2,CONV4,CONV5仅适用在同一GPU的前层网络输出的特征图作为输入。

3.CONV3,FC6,FC7,FC8拼接前一层所有的特征图,实现了神经网络的跨GPU计算。

关于具体卷积层在做什么,我们可以通过下面的例子进行理解:

ZFNet

45.jpg

VGG

VGG网络结构:

46.jpg

VGG网络贡献:

1.使用尺寸更小的3*3卷积核串联来获得更大的感受野。

2.放弃使用11*11和5*5这样的大尺寸卷积核。

3.深度更深,非线性更强,网络的参数也更少。

4.去掉了AlexNet中的局部响应归一化层。

VGG16与VGG19对比:19层VGG更深,精度略微,但需要内存更多。VGG16更常用。

VGG16:

1.13个卷积层与3个全连接。

2.分为5段conv1,…,conv5,每一段中卷积层的卷积核个数均相同。

3.卷积层均采用3*3的卷积核及ReLU激活函数。

4.池化层均采用最大池化,其窗口大小为2*2,步长为2。

5.经过一次池化操作,气候卷积层的卷积核个数就增加一倍,直至到达512。

6.经过一次池化操作,其后卷积层的卷积核个数就增加一倍,直至到达512。

7.全连接层中也使用了Dropout策略。

思考:

小卷积核有哪些优势?

多个小尺寸卷积核串联可以得到大尺寸卷积核相同的感受野。使用小卷积核串联构建的网络深度更深,非线性更强,参数也更少。

为什么VGG网络前四段里,每经过一次池化操作,卷积核个数就增加一倍?

1.池化操作可以减少特征图尺寸,降低显存占用。

2.增加卷积核个数有助于学习更多的结构特征,但会增加网络参数数量以及内存消耗。

3.一减一增的设计平衡了识别精度与存储,计算开销。

最终提升了网络性能。

为什么卷积核个数增加到512后就不再增加了?

1.第一个全连接层含102M参数,占总参数个数的74%。

2.这一层的参数个数是特征图的尺寸与个数的乘积。

3.参数过多容易过拟合,且不易被训练。

GoogleNet

47.jpg

串联结构存在的问题:

后面的卷积层只能处理前层输出的特征图,前层丢失重要信息,后层无法找回。

解决方法:每一层尽量多的保留输入信号中的信息。

48.jpg

ResNet

持续向一个“基础”的卷积神经网络上面叠加更深的层数会发生什么?

会发现在训练集和测试集上面56层的错误率都会大于20层的错误率。对于这种现象,我们的猜测是加深网络层数引起过拟合,导致错误率上升。实际原因则是训练过程中网络的正反信息流动不顺畅,网络没有被充分训练。

ResNet网络的贡献:

1.提出了一种残差模块,通过堆叠残差模块可以构建任意深度的神经网络,而不会出现“退化”现象。

2.提出了批归一化来对抗梯度消失,该方法降低了网络训练过程对于权重初始化的依赖。

3.提出了一种针对ReLU激活函数的初始化方法。

关于残差网络,下面是具体的介绍:

WnQpeU.jpg

关于残差结构:

1.残差结构能够避免普通的卷积层堆叠存在信息丢失问题,保证前向信息流的顺畅。

2.残差结构能够应对梯度反传过程中的梯度消失问题,保证反向梯度流的通顺。

关键点:

1.提出了批归一化策略,降低了网络训练过程对于权重初始化的依赖。

2.提出了针对ReLU非线性单元的初始化方法。

WuSeBV.md.jpg

小结:

1.介绍了5种经典的卷积神经网络AlexNet、ZFNet、VGG、GoogLeNet和ResNet。

2.残差网络和Inception V4是公认的推广性能最好的两个分类模型。

3.特殊应用环境下的模型:面向有限存储资源的SqueezeNet以及面向有限计算资源的MobileNet和ShuffleNet。

视觉识别

语义分割

视觉识别任务:分类(不考虑空间位置),语义分割(像素的类别),目标检测,实例分割(多目标)

语义分割:给每个像素分配类别标签,不区分实例,只考虑像素类别

语义分割思路:滑动窗口(存在问题:效率太低,重叠区域的特点反复被计算)

​ 全卷积(解决方案:让整个网络只包含卷积层,一次性输出所有像素的类别预测。

​ 存在问题:处理过程中一直保持原始分辨率,对于显存的需求会非常庞大。

​ 相应解决方案:让整个网络只包含卷积层,一次性输出所有像素的类别预测,让整个网络只包含卷积层,并在网络中嵌入下采样与上采样过程)

反池化操作:Unpooling,Max Unpooling

fhToA1.jpg

fhTLcD.jpg

可学习的上采样:转置卷积(不做介绍)

目标检测

对于单目标:

fhHNLQ.jpg

对于多目标:

困境:每张图像期望输出的维度都不一样

利用CNN对图像中的区域进行多分类,以确定当前区域是背景还是哪个类别的目标。

困境:CNN需要对图像中所有可能的区域(不同位置,尺寸,长宽比)进行分类,计算量巨大。

fhbvB4.jpg

fhbxHJ.jpg

fhq941.jpg

fhqFgK.jpg

区域裁剪方法:

fhqHVH.jpg

fhqXGt.jpg

区域建议:

fhLkin.jpg

fhLQo9.jpg

fhLGz6.jpg

实例分割

fhOK6f.jpg

fhO10g.jpg

fhOYhn.jpg