学习目标检测YOLO系列1--机器学习基础知识储备

参考资料:https://blog.csdn.net/weixin_43694096/category_12037897.html

(目标检测蓝皮书专栏,适合新手了解一些专业术语知识,缺点就是图文博客可能有点枯燥。)

第一篇章-人工智能与机器学习了解


1 人工智能概述

有趣的网站 http://deepdreamgenerator.com/ 可以将两张图片结合起来

1.1 人工智能发展阶段

人工智能的起源

  • 图灵测试
  • 达特茅斯会议

人工智能的发展经历了3个阶段

  1. 1980年代是正式形成期,尚不具备影响力
  2. 1990-1010年代是蓬勃发展期,诞生了众多的理论和算法,走向实用
  3. 1011年以后,进入深度学习期

1.1 人工智能的主要分支

学习目标检测YOLO系列1--机器学习基础知识储备_第1张图片

  • 机器学习是人工智能的一个实现途径

  • 深度学习是机器学习的一个方法发展而来的

1.3 主要分支的介绍

  1. 计算机视觉CV–机器感知环境的能力

  2. 自然语言处理

    • 语音识别–面对值主要是声纹识别和鸡尾酒效应等一些特殊的难题
    • 语义识别
  3. 文本挖掘分类

    Facebook研究团队开发出了一个叫 fastText 的库,用于快速文本表征和分类(1016)

    文本的挖掘和分析

  4. 机器翻译

    大致分为三类:

    • 基于规则的机器翻译(RBMT)
    • 统计机器翻译(SMT)
    • 神经机器翻译(NMT)–1014年出现
  5. 机器人

    固定机器人–工业使用

    移动机器人

1.4 人工智能发展的必备三要素

  • 数据
  • 算法
  • 计算力

深度学习中经常会用到矩阵计算,需要较强的算力。

CPU:主打的是一个读写能力

​ IO密集型数据

GPU:主打的是一个计算能力,较大的数据的计算我们优先使用GPU

​ 计算密集型的程序和易于并行的程序都适合在GPU上面运行

2 机器学习介绍

参考博主

视频教程

2.1 什么是机器学习

从数据中自动分析获得模型,并利用模型对未知数据进行预测

数据、自动分析、模型、预测

总结:机器学习(Machine Learning) 是让计算机能够自动地从某些数据中总结出规律,并得出某种预测模型,进而利用该模型对未知数据进行预测的方法。它是一种实现人工智能的方式,是一门交叉学科,综合了统计学、概率论、逼近论、凸分析、计算复杂性理论等。

2.2 机器学习的工作流程

用户数据->数据处理(取消缺失值)->特征工程(数据转换,让数据能被机器识别)-> 机器学习(使用一个算法进行训练)->模型评估 是一个循环的过程

  1. 获取数据
  2. 数据基本处理:对数据进行缺失值、去除异常值的处理
  3. 特征工程:使用专业背景知识和技巧处理数据,使得数据特征能在机器学习算法上发挥更好的作用,将会直接影响机器学习的效果。
    • 特征提取:将任意数据转换为机器学习的数学特征
    • 特征预处理:通过一些转换函数将特征转换成更加适合算法模型的特征过程
    • 特征降维:在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程
  4. 模型训练(机器学习):选择合适的算法对模型进行训练
  5. 模型评估:对训练好的模型进行评估

2.3 机器学习分类

机器学习大致可以分为以下几类:

(1) 有监督学习(Supervised Learning) :当我们已经拥有–些数据及数据对应的类标时,就可以通过这些数据训练出一个模型,再利用这个模型去预测新数据的类标,这种情况称为有监督学习。有监督学习可分为回归问题和分类问题两大类。在回归问题中,我们预测的结果是连续值;而在分类问题中,我们预测的结果是离散值。常见的有监督学习算法包括线性回归、逻辑回归、K-近邻、朴素贝叶斯、决策树、随机森林、支持向量机等。

(1) 无监督学习(Unsupervised Learning):在无监督学习中是没有给定类标训练样本的,这就需要我们对给定的数据直接建模。常见的无监督学习算法包括K-means、EM算法等。

(3) 半监督学习(Semi-supervised Learn-ing):半监督学习介于有监督学习和无监督学习之间,给定的数据集既包括有类标的数据,也包括没有类标的数据,需要在工作量(例如数据的打标)和模型的准确率之间取一个平衡点。

(4)强化学习( Reinforcement Learning):从不懂到通过不断学习、总结规律,最终学会的过程便是强化学习。强化学习很依赖于学习的“周围环境”,强调如何基于“周围环境”而做出相应的动作。


第二篇章-深度学习知识基础储备


3 模型评估

对训练好的模型性能进行评估,发现表达数据的最佳模型和所选模型将来工作的性能如何。

3.1 训练误差与测试误差

在分类任务中,通常把错分的样本数占样本总数的比例称为错误率(error rate)。比如m个样本有a个预测错了,错误率就是 E = a/m;与错误率相对的 1 - a/m 称为精度(accuracy),或者说正确率,数值上 精度 = 1 - 错误率。

更一般地,我们通常会把学习器的实际预测输出与样本的真实输出之间的差异称为误差(error)。学习器在训练集上的误差称为训练误差(training error)或者经验误差(empirical error)。而在新样本上的误差则称为泛化误差(generalization error)或者测试误差(test error;)。显然,我们希望得到泛化误差小的学习器。所以我们希望模型的泛化误差尽可能小,但现实是,我们无法知道新样本是怎样的,所以只能尽可能地利用训练数据来最小化经验误差。

3.2 过拟合与欠拟合

模型泛化能力:

泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。 不论是过拟合还是欠拟合都是模型泛化能力差的表现。

过拟合:

如果模型相比训练数据来说过于复杂,那就很有可能把训练样本自身的一些特点当作整个样本空间的特点,这样就会导致泛化性能下降,从而使得在训练数据上有很小的经验误差,但一旦面对新样本就会有很大误差,这种情况叫做过拟合(overfitting),亦称过配。相对的是欠拟合(underfitting),亦称欠配

有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。

随着模型复杂程度的增加:

  • 训练误差逐渐减小,甚至为0;
  • 测试误差先减小,达到最小值后,又增大。
  • 当模型过于复杂时,将产生过拟合。

欠拟合比较容易克服,只要适当地增加模型复杂度(比方说增加神经网络的层数或者训练轮数,扩展决策树学习中的分支)就好。过拟合是无法彻底避免的,我们所能做的只是缓解,或者说减小其风险(比如减少模型复杂度/增加训练数据),这也是机器学习发展中的一个关键阻碍。

这样,在学习时就要防止过拟合,进行最优的模型选择,即选择复杂度相当的模型,以达到使测试误差最小的学习目的。

3.3 分类模型评估

参考:博客

  • **准确度:**准确率是最常用的分类性能指标。Accuracy = (TP+TN)/(TP+FN+FP+TN),预测正确的数占样本总数的比例,即正确预测的正反例数 /总数。

  • **精确率:**精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。Precision = TP/(TP+FP),即正确预测的正例数 /预测正例总数。

  • **召回率:**召回率表现出在实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。正确预测为正占全部正校本的比例,Recall = TP/(TP+FN),即正确预测的正例数 /实际正例总数。

  • **F1-score(模型的稳健性):**F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。2/F1 = 1/Precision + 1/Recall

  • **AUC指标:**被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好。

3.4 目标检测性能指标

检测精度

  • Precision,Recall, F1 Score(召回率是评估找的全不全,又叫查全率)
  • IoU:预测框的准确率用IOU来反映。交并比是目标检测问题中的一项重要指标,它在训练阶段反映的是标注框与预测框的重合程度,用于衡量预测框的正确程度。
  • **P-R curve:**PR曲线的横坐标是精确率P,纵坐标是召回率R。评价标准和ROC一样,先看平滑不平滑。
  • **AP:**顾名思义AP就是平均精准度,简单来说就是对PR曲线上的Precision值求均值。对于pr曲线来说,我们使用积分来进行计算。在实际应用中,我们并不直接对该PR曲线进行计算,而是对PR曲线进行平滑处理。即对PR曲线上的每个点,Precision的值取该点右侧最大的Precision的值。
  • **mAP:**对所有类别的AP值求平均值。AP可以反映每个类别预测的准确率,mAP就是对所有类的AP求平均值,用于反映整个模型的准确率。mAP越大,PR曲线与坐标轴围城的面积越大。平时我们说的,某一目标检测算法的准确率达到了多少,这个准确率就泛指mAP。

检测速度

  • 前传耗时
  • 每秒帧数 FPS–视频检测速度指标
  • 浮点运算量 FLOATS–计算量

4 前向传播与反向传播

神经网络的计算主要有两种:前向传播与反向传播

4.1 前向传播

前向传播是指在神经网络中从输入层到输出层的信号传递过程,也称为“正向传递”。在前向传播过程中,输入数据首先经过输入层的处理,然后通过一系列的隐藏层,最终得到输出层的输出结果。前向传播过程中,每个神经元都会执行加权和运算和激活函数运算,从而产生输出。

学习目标检测YOLO系列1--机器学习基础知识储备_第2张图片

4.2 反向传播

反向传播是指根据网络输出结果与真实结果的差距,从输出层到输入层进行误差反向传播的过程。在反向传播过程中,我们将输出结果和真实结果之间的误差向后传递到每个神经元,并根据误差调整每个神经元的权重和偏置。这个过程是通过计算损失函数的梯度来实现的,通常使用链式法则计算每个神经元的误差贡献和权重更新量。通过反向传播算法,网络可以根据误差不断调整权重和偏置,从而提高网络的性能。
学习目标检测YOLO系列1--机器学习基础知识储备_第3张图片

前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法

5 超参数

5.1 什么是超参数

例如:神经网络的层数、节点数量、学习率、正则化参数。

因为超参数对于模型的性能和收敛速度有重要的影响,因此通常需要进行调整和优化。超参数的调整可以通过手动调整和试错来完成,也可以使用自动化的超参数优化工具来帮助找到最佳超参数组合。超参数调整的目标是找到一个最优的超参数组合,以达到最好的模型性能。

机器学习模型中有两类参数:

  • 从数据中学习和估计得到,称为**模型参数(Parameter)—即模型本身的参数。**比如,卷积核和BN层的参数。训练过程中需要学习的参数,这些参数用于控制模型的输出,以使其与训练数据的真实标签(或目标)尽可能接近。模型参数是在训练过程中通过反向传播算法自动学习的,以最小化损失函数。
  • 机器学习算法中的**调优参数(tuning parameters),**需要人为设定,称为超参数(Hyperparameter)。比如学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数。

5.2 超参数如何影响模型性能

学习率:学习率是一种超参数,它控制着模型参数在每次迭代中的更新速度。过高,模型可能无法收敛,导致训练不稳定。过低,则模型需要更多的时间来收敛。

正则化参数:正则化是一种超参数,用于防止模型过度拟合。正则化参数控制着正则化的程度。过高,模型可能会欠拟合,导致性能不佳。过低,模型可能会过度拟合,导致性能下降。

神经网络的层数和节点数量:神经网络的层数和节点数量是超参数,它们控制着网络的复杂性。过多,则可能会导致过度拟合,因为模型将过度适应训练数据。过少,则可能会导致欠拟合,因为模型无法捕捉足够的特征信息。

批次大小:批次大小是指在每个训练迭代中使用的样本数量。如果批次大小设置过大,则可能会导致模型过度拟合。过小,则可能会导致训练时间过长。

权重衰减系数:权重衰减系数越大,正则化项就越大,模型就越趋向于简单化,会导致模型的欠拟合,因为模型无法捕捉足够的复杂关系。相反,权重衰减系数越小,模型就越倾向于复杂化,可能会导致模型的过拟合。实践中,可以通过交叉验证等技术来确定最佳的权重衰减系数。如果模型出现欠拟合,可以尝试减小权重衰减系数;如果模型出现过拟合,则可以尝试增加权重衰减系数。

优化器动量:动量是优化器中的一种技术,用于加速模型训练并避免梯度下降算法陷入局部最优解。

卷积核尺寸:卷积核尺寸对于模型的性能有重要影响。较小的卷积核可以提取更为局部的特征,而较大的卷积核可以提取更为全局的特征。较小的卷积核可以提高模型的感受野,从而可以检测输入图像中更小的特征。而较大的卷积核可以提高模型的抽象层次,从而可以检测输入图像中更为全局的特征。
然而,使用较小的卷积核可能需要更多的层数,才能达到相同的感受野和抽象层次,从而增加了模型的计算负担和复杂度。而使用较大的卷积核可能会导致模型过于复杂,容易产生过拟合问题。

5.4 如何寻找超参数的最优值

网格搜索(Grid Search):指定超参数的值域,穷举所有可能的超参数组合,通过交叉验证评估每个超参数组合的性能,并选择具有最佳性能的超参数组合。网格搜索简单易懂,但是当超参数的数量较多时,计算代价会非常大。

随机搜索(Random Search):在超参数的值域内随机采样一组超参数,通过交叉验证评估其性能,并重复这个过程多次,最终选择具有最佳性能的超参数组合。相比于网格搜索,随机搜索的计算代价更小,且可以发现更优的超参数组合,但是也存在一定的随机性。

贝叶斯优化(Bayesian Optimization):贝叶斯优化通过对模型的先验知识进行建模,结合样本数据来不断更新模型的后验概率分布,从而预测最优的超参数组合。相比于网格搜索和随机搜索,贝叶斯优化的计算代价更高,但是可以在较少的迭代次数内找到更优的超参数组合。

遗传算法(Genetic Algorithm):遗传算法是一种基于生物进化过程的优化算法,通过模拟遗传过程中的选择、交叉和变异等操作,来生成新的超参数组合,并通过交叉验证评估其性能。遗传算法可以发现更优的超参数组合,但是计算代价也比较高。

6 激活函数

其主要作用是为网络引入非线性特性。如果网络中没有激活函数,那么神经网络就会变成一个线性模型,无法学习复杂的非线性函数关系。引入激活函数可以使神经网络具备非线性映射能力、提高模型表达能力和泛化能力,同时避免梯度消失和梯度爆炸等问题的发生。

激活函数是非线性函数,主要是因为线性函数的组合依然是一个线性函数,而神经网络需要引入非线性映射才能学习复杂的函数关系。

6.1 常见的激活函数

Sigmoid函数

Sigmoid函数的取值范围是( 0 , 1 ),输入越大,输出越接近于1;输入越小,输出越接近于0 。这意味着,Sigmoid函数可以将任意实数值映射到一个( 0 , 1 ) 的区间内,可以看做是一个概率分布,表示样本属于某一类的概率。

学习目标检测YOLO系列1--机器学习基础知识储备_第4张图片

m = nn.Sigmoid()
input = torch.randn(2)
output = m(input)

Sigmoid函数具有以下优点:

  • 具有平滑性,对输入的变化相对平滑,对神经网络的优化过程有帮助;
  • 易于求导,方便在反向传播时计算梯度,用于优化神经网络参数;
  • 输出范围为( 0 , 1 ) (0,1)(0,1),可以表示概率值。

但Sigmoid函数也存在以下缺点:

  • 在输入较大或较小的情况下,Sigmoid函数的梯度接近于0 00,导致梯度消失的问题;
  • Sigmoid函数的输出不是以0 00为中心的,这会导致神经元的输出偏向于某个方向,可能会影响神经网络的收敛速度。

由于Sigmoid函数存在上述缺点,现在较少在深度神经网络中使用。通常情况下,ReLU和其变种是更好的选择。

Tanh 函数

Tanh函数,也称为双曲正切函数(Hyperbolic Tangent),是一种常用的激活函数。它在数学上是Sigmoid函数的变换版本,与Sigmoid函数类似,主要用于二分类问题。

学习目标检测YOLO系列1--机器学习基础知识储备_第5张图片

m = nn.Tanh()
input = torch.randn(2)
output = m(input)

Tanh函数的取值范围是( − 1 , 1 ) ,输入越大,输出越接近于1 ;输入越小,输出越接近于− 1 。因此,Tanh函数可以将任意实数值映射到一个( − 1 , 1 )的区间内。

Tanh函数具有以下优点:

  • 具有平滑性,对输入的变化相对平滑,对神经网络的优化过程有帮助;
  • 易于求导,方便在反向传播时计算梯度,用于优化神经网络参数;
  • 输出范围为( − 1 , 1 ),可以表示正负激活。

与Sigmoid函数相比,Tanh函数的主要优势是它的输出是以0 为中心的,因此可以避免偏置问题。然而,它也存在梯度消失的问题,对于输入较大或较小的情况,梯度也会接近于0 。

由于Tanh函数也存在梯度消失的问题,现在通常使用ReLU及其变种作为深度神经网络的激活函数。

ReLU函数

ReLU(Rectified Linear Unit)是一种常用的非线性激活函数,它被广泛应用于深度神经网络中。ReLU函数在输入为正数时,直接输出该值;在输入为负数时,输出为0 。

优点:

  • 计算速度快:ReLU函数只需要简单的数值比较和取最大值运算,因此计算速度非常快;
  • 梯度计算简单:ReLU函数在x > 0时的导数为1,在x < 0 时的导数为0 ,因此计算简单,有助于避免梯度消失的问题;
  • 收敛速度快:ReLU函数能够有效地避免梯度消失的问题,因此可以使神经网络更快地收敛。

缺点:

  • Dead ReLU问题:当输入的x 小于等于0时,ReLU函数的导数为0 ,因此梯度更新为0 ,这种现象称为Dead ReLU问题。当大量神经元出现Dead ReLU问题时,神经网络的表现会受到严重影响。
  • 输出不是以0 为中心:ReLU函数的输出在x > 0时为x ,因此输出的分布不是以0 为中心,可能会导致优化困难。

针对Dead ReLU问题,现有的一些改进方法包括LeakyReLU、PReLU和ELU等。针对输出不是以0 为中心的问题,可以使用Batch Normalization等方法进行处理。

学习目标检测YOLO系列1--机器学习基础知识储备_第6张图片

m = nn.ReLU()
input = torch.randn(2)
output = m(input)

An implementation of CReLU - https://arxiv.org/abs/1603.05201
m = nn.ReLU()
input = torch.randn(2).unsqueeze(0)
output = torch.cat((m(input),m(-input)))

LeakyReLU函数

LeakyReLU(Leaky Rectified Linear Unit)是对ReLU激活函数的改进,用于解决ReLU函数出现的Dead ReLU问题。

学习目标检测YOLO系列1--机器学习基础知识储备_第7张图片

m = nn.LeakyReLU(0.1)
input = torch.randn(2)
output = m(input)

LeakyReLU函数在输入为负数时,不再输出0 ,而是输出一个较小的值,这个小值称为Leakage系数,通常取一个接近于0 的小正数。

LeakyReLU函数相对于ReLU函数的优点如下:

  • 避免Dead ReLU问题:当输入的x 小于等于0 时,LeakyReLU函数的导数为0.01 ,因此梯度不会消失,避免了Dead ReLU问题的出现;
  • 降低输出的偏置:由于LeakyReLU函数在输入小于等于0 时输出一个较小的值,因此输出的分布更加均匀,有助于降低偏置。

需要注意的是,LeakyReLU函数可能会使得神经网络的训练时间增加,因为它增加了一个超参数Leakage系数,需要进行调参。此外,对于某些问题,LeakyReLU函数并不一定比ReLU函数表现更好,具体需要根据实际情况进行选择。

Softmax函数

m = nn.Softmax(dim=1)
input = torch.randn(2, 3)
output = m(input)

Softmax激活函数常用于多分类问题中,它可以将一个向量中的每个元素转换为一个介于0和1之间的实数,并且这些实数的和为1,从而方便进行概率预测。

Softmax函数的输出结果满足以下两个性质:

  • 输出结果介于0和1之间:由于Softmax函数的分子和分母都是正数,因此σ ( z ) j 始终介于0和1之间;
  • 输出结果之和为1:由于分母中包含所有元素的指数和,因此Softmax函数的所有输出结果之和为1,可以视为一个概率分布,可以方便地进行分类预测。

Softmax函数的输出结果彼此之间是相互关联的,因为它们之和为1。如果Softmax函数的某个输出结果很大,那么其他输出结果的值就会相应地变小。因此,当进行多分类问题时,Softmax函数可以对多个可能的结果进行排除,使得模型预测结果更加准确。

同时,Softmax函数的导数形式简单,可以方便地用于反向传播算法计算梯度,从而进行模型训练。

SiLU函数

与ReLU函数相比,SiLU函数的导数更加平滑,没有ReLU函数的导数不连续问题。这种平滑性有助于防止在训练过程中出现梯度消失或梯度爆炸的问题,从而提高了模型的稳定性和收敛速度。

与Sigmoid函数相比,SiLU函数的导数在输入值较大时更接近于ReLU函数,可以避免Sigmoid函数的饱和性问题。同时,SiLU函数的值域也与ReLU函数相同,在输入值较大时,其输出值接近于输入值,可以避免神经元输出饱和的问题。SiLU激活函数在一些深度学习任务中表现良好,特别是在自然语言处理(NLP)领域中,SiLU激活函数有时能够比ReLU和tanh函数获得更好的性能。

学习目标检测YOLO系列1--机器学习基础知识储备_第8张图片

m = nn.SiLU()
input = torch.randn(2)
output = m(input)

ReLU6函数

ReLU6激活函数是在ReLU激活函数的基础上进行的改进,它可以使激活函数的输出范围限制在0到6之间。

ReLU6激活函数的主要优势在于它可以帮助模型避免输出值过大的问题,从而提高模型的稳定性。此外,由于ReLU6激活函数与ReLU激活函数非常相似,因此它的计算成本也非常低,可以在深度神经网络中快速进行计算。

ReLU6激活函数通常用于卷积神经网络(CNN)中,特别是在图像分类和目标检测等任务中,可以有效地避**免梯度消失和梯度爆炸等问题**,提高模型的性能和稳定性。

学习目标检测YOLO系列1--机器学习基础知识储备_第9张图片

m = nn.ReLU6()
input = torch.randn(2)
output = m(input)

Mish函数

Mish激活函数是一种具有自适应性、平滑性和性能优势的激活函数,可以在深度学习中发挥重要作用。

与其他常用的激活函数相比,Mish激活函数具有以下特点:

  • 具有自适应性:在输入值较小时,Mish函数类似于线性函数,这有助于模型在学习初期更快地收敛;在输入值较大时,Mish函数类似于ReLU函数,这有助于提高模型的表达能力。
  • 具有平滑性:Mish函数的导数具有连续性和平滑性,这可以避免由于梯度突变导致的不稳定性问题。
  • 具有性能优势:与其他常用的激活函数相比,Mish函数在多个深度学习任务中表现出了更好的性能,如图像分类、目标检测、语音识别等任务。

学习目标检测YOLO系列1--机器学习基础知识储备_第10张图片

m = nn.Mish()
input = torch.randn(2)
output = m(input)

6.2 如何选择激活函数

  • 如果输出是0 、 1 值(二分类问题),则输出层选择Sigmoid函数,然后其它的所有单元都选择 Relu 函数。
  • 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用Relu 激活函数。有时,也会使用 T a n h激活函数,但~R e l u~的一个优点是:当是负值的时候,导数等于0。
  • S i g m o i d 激活函数:除了输出层是一个二分类问题基本不会用它。
  • T a n h 激活函数:T a n h 是非常优秀的,几乎适合所有场合。
  • R e L u激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用R e L u或者ReLuLeaky ,再去尝试其他的激活函数。
  • 如果遇到了一些死的神经元,我们可以使用L e a k y R e L U 函数。

7 训练参数

batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;

iteration:1 11个iteration等于使用batchsize个样本训练一次;

epoch:1 11个epoch等于使用训练集中的全部样本训练一次;

举个例子,训练集有1000 个样本,batchsize=10 1010,那么:训练完整个样本集需要:100次iteration,1 次epoch

7.1 batchsize的选择

BatchSize的影响:

不同的BatchSize大小可能会导致模型收敛速度、泛化能力等方面的差异。

  • 训练速度:BatchSize越大,每次更新的数据量就越大,训练速度就会越快。但如果BatchSize过大,会占用更多的显存,甚至可能导致内存不足。
  • 模型性能:BatchSize越小,每个训练批次(batch)中包含的样本数越少,每次更新的数据也越少,更新的方向也更容易受到噪声的干扰。这可能导致模型更容易过拟合,尤其是在训练数据量较小时。相反,当BatchSize较大时,训练数据的均值和方差估计更准确,模型更新的方向也更加稳定,有助于提高模型的泛化能力。
  • 收敛速度:BatchSize的选择也会影响模型的收敛速度。一般来说,BatchSize较大的模型更容易收敛,因为它可以更快地更新模型参数,从而更快地找到最优解。但是,当BatchSize过大时,也可能会降低模型的收敛速度,甚至使模型无法收敛。

Batch的选择决定的事下降方向,越准确的数据量,决定的梯度下降的方向就越准确,对于小的数据集来说,BatchSize可以选择全部数据集大小,但是对于大的数据集来说,如果BatchSize选择的过大,将导致运行内存不足,无法训练下去等问题。BatchSize不宜选的太小,太小了容易修正方向导致不收敛,或者需要经过很大的Epoch才能收敛,太大的话会导致显存爆掉。

总结:

  • 当BatchSize较小时,模型更新的频率较高,每个样本对模型参数的更新有较大的影响,可以提高模型的泛化能力,但训练速度较慢,需要更多的训练迭代次数。
  • 当BatchSize较大时,模型更新的频率较低,每个样本对模型参数的更新影响较小,训练速度较快,但可能会导致模型过拟合,尤其是当训练数据量较少时。

因此,在选择BatchSize大小时需要综合考虑模型的复杂度、训练数据量、硬件设备等因素,一般建议尝试不同的BatchSize大小,选择在一定时间内能够让模型达到较好性能的大小。同时,也可以使用一些加速训练的技巧,如分布式训练、混合精度训练等,以进一步提高训练效率。

8 归一化

就是涉及到所谓的BN(Batch Normalization 批归一化)

优点:

  • 减少了人为选择参数。在某些情况下可以取消DropoutDropoutL2正则项参数,或者采取更小的 L 2 正则项约束参数;
  • 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
  • 可以不再使用局部响应归一化。BN本身就是归一化网络(局部响应归一化在AlexNet网络中存在) ;
  • 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高1%的精度);
  • 减少梯度消失,加快收敛速度,提高训练精度。

9 正则化

正则化是为了防止过拟合而引入的一种技术。模型可能会过度适应训练数据,从而导致在新数据上的性能下降。这种现象被称为过拟合。正则化通过限制模型的复杂度,减少模型对训练数据的过度拟合,从而提高模型的泛化能力,即在新数据上的性能。

第三篇章-卷积神经网络基础


1 基本结构

卷积神经网络是一个层次模型,主要包括输入层卷积层池化层激活层全连接层以及输出层。卷积神经网络专门针对图像而设计,主要特点在于卷积层的特征是由前一层的局部特征通过卷积共享的权重得到。在卷积神经网络中,输入图像通过多个卷积层和池化层进行特征提取,逐步由低层特征变为高层特征; 高层特征再经过全连接层和输出层进行特征分类,产生一维向量,表示当前输入图像的类别。因此,根据每层的功能,卷积神经网络可以划分为两个部分: 由输入层、卷积层、激活层和池化层构成特征提取器,以及由全连接层和输出层构成分类器

说明:下面的讲解全部联系目标检测方向即图像相关

1.1 输入层

Input Laye

输入图像,包含三个值(W,H,RGB通道)组成3维像素矩阵H x W x 3,将数据传递到卷积层等一些列的后续步骤。

1.2 卷积层CL

Convolution Layer

卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取,卷积层越多,特征的表达能力越强。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。

涉及到一些基本的属性:

参数名 作用 常见设置
卷积核大小 (Kernel Size) 卷积核的大小定义了卷积的感受野 卷积核的大小是一个重要参数,它决定了每次卷积操作时要处理的输入数据的大小。卷积核大小通常是一个正方形或长方形矩阵,例如 3 × 3 3\times33×3 或 5 × 5 5\times55×5。
步长 (Stride) 定义了卷积核在卷积过程中的步长 步长是卷积操作时卷积核每次移动的步长。步长越大,输出特征图的尺寸就越小,计算量也就越少,但可能会丢失一些细节信息。
填充 (Padding) 在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略 填充是在输入数据的边缘上填充一些额外的像素值,以保持输出特征图的大小与输入数据的大小相同。填充可以避免边缘像素被卷积核过度压缩而丢失信息。
卷积核个数(Channel) 指定卷积操作时卷积核的宽度 每个卷积层包含多个卷积核,每个卷积核可以提取不同的特征。卷积核的个数可以看做是输出通道数,即一个卷积层的输出可以是多个特征图,每个特征图对应一个卷积核。
  • 卷积核:Kernel控制卷积操作的感受野
  • 步长:卷积核遍历图像时移动多少个像素
  • 填充:处理特征图边界的一种方式,保证输出特征的尺寸与输入特征图的尺寸一致
  • 通道:就等于卷积层的层数

基本的处理流程:

  • 滑动窗口移动
  • 点积操作:对于活动窗口的数据与卷积核进项点积操作,等到一个标量值作为卷积层的输出。
  • 加权求和:针对的是每一层卷积,将所有的滑动窗口输出进行加权求和,得到一个输出通道的特征图。
  • 激活函数:将输出通道的特征图通过激活函数进行激活,使其具有非线性化特征。

1.3 激活层

  • 引入非线性:由于线性模型只能学习到线性函数,因此引入非线性可以帮助神经网络学习到更加复杂的函数映射。
  • 增强模型表达能力:通过非线性变换,激活函数可以将多个神经元的输出转化为不同的激活值,从而增强模型的表达能力,提高网络的分类精度。
  • 去除数据的线性相关性:在神经网络训练时,激活函数的引入可以消除输入数据的线性相关性,防止神经元输出的线性组合。
  • 增加网络深度:随着神经网络不断加深,激活函数可以避免梯度消失问题,使神经网络能够更好地学习复杂的特征。

1.4 池化层

池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。

缺点:

  • 它们通常需要大量的参数,特别是在输入维度很高的情况下。这可能会导致过拟合和计算负担。
  • 其次,全连接层忽略了输入数据的空间结构信息,因此可能无法很好地处理具有空间结构的数据。

池化操作通常也叫做子采样(Subsampling)或降采样(Downsampling),在构建卷积神经网络时,往往会用在卷积层之后,对感受野内的特征进行选择,提取区域内最具代表性的特征,能够有效地减少输出特征数 量,进而减少模型参数量。按操作类型通常分为最大值池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受野内最大值、平均与总和的特征值作为输出,最常用的是最大值池化和平均池化 。

池化层主要有以下四点作用:

  • 增大网络感受野;
  • 抑制噪声,降低信息冗余;
  • 降低模型计算量,降低网络优化难度,防止网络过拟合;
  • 使模型对输入图像中的特征位置变化更加鲁棒。

1.5 全连接层

将前一层的所有神经元与当前层的所有神经元都连接起来。这意味着当前层的每个神经元都会接收前一层所有神经元的输出,并产生自己的输出。在输出层,全连接层可以将神经网络的输出映射到特定的类别或连续值。在隐藏层,全连接层可以充当特征提取器,将输入数据转换为更高级别的特征表示。

1.6 输出层

神经网络的输出层负责将模型的最终预测输出。输出层的结构和激活函数的选择取决于模型的任务类型

下面列举一些常见的输出层类型和激活函数:

  • 二分类问题:使用一个神经元的输出层,激活函数一般选择sigmoid函数,将输出值映射到[0,1]之间,表示为正例的概率。
  • 多分类问题:使用多个神经元的输出层,激活函数一般选择softmax函数,将输出值归一化为概率分布,表示每个类别的概率。
  • 回归问题:使用一个神经元的输出层,激活函数一般不使用或选择线性激活函数,输出预测值。
  • 目标检测问题:使用多个神经元的输出层,每个神经元对应一个目标类别和一个框回归值,激活函数一般不使用或选择线性激活函数和sigmoid激活函数。
  • 语言模型问题:使用多个神经元的输出层,激活函数一般选择softmax函数,表示每个单词的概率分布。

除了选择合适的输出层和激活函数外,还需要根据不同任务的需求,对输出进行后续处理,比如对分类问题中输出的概率进行阈值判定,对目标检测问题中的框进行后处理等。

2 不同层次的卷积

不同层次的卷积提取到的特征是不同的,具体如下:

  • 浅层卷积:边缘特征(颜色、纹理、边缘、棱角等)
  • 中层卷积:局部特征(形状)
  • 深层卷积:全局特征(某个物体)

3 卷积的变种

  • 分组卷积:将卷积操作的计算步骤分为多个子操作,降低计算量,提高计算效率。

    **基本思想:**将输入的特征图按照通道分为几个子组,然后对每个子组分别进行卷积计算。

    缺点:

    1. 对于输入和输出通道数不能被组数整除的情况,需要进行通道填充或者截断,这可能会导致信息丢失或计算量增加。
    2. 分组卷积只能在通道数较大的卷积层中使用,如果通道数较少,分组的效果不明显,可能会增加计算量。
    3. 分组卷积需要对卷积核进行分组,这会导致卷积核的特征表达能力下降,可能会影响网络的性能。
    4. 分组卷积只能进行局部感受野内的计算,对于全局特征的提取能力有限。
    5. 分组卷积不能处理跨通道的相关性,例如空间特征与通道特征之间的相关性,因此在一些任务中可能不适用。
  • 转置卷积:转置卷积(Transpose Convolution),也称为反卷积(Deconvolution)或上采样卷积(Upsampling Convolution),是卷积神经网络中的一种常见操作,用于将低分辨率的特征图放大到高分辨率,或者将稀疏的特征图转换为密集的特征图。

    **基本思想:**基本思想是通过卷积操作对输入张量进行填充(padding)和步长(stride)的扩展,从而将其放大到指定的尺寸

  • 空洞卷积:(膨胀卷积或者扩张卷积)可以在不增加参数和计算量的情况下增大卷积核的感受野,从而提升网络的性能。空洞卷积比起普通的卷积就是多了一个空洞大小D,并且在计算的时候跳过了一些输入特征图中的像素。

  • 深度可分离卷积:将传统的卷积操作分为两部分:深度卷积核逐点卷积。

    深度卷积中,每个输入通道都会有一个卷积核进行卷积操作,这样可以捕捉到每个通道的特征信息。

    **逐点卷积中,**通过逐点卷积将所有通道的特征融合起来,生成最终的输出特征图。

    最后,可以显著减少卷积操作的计算量和参数数量,从而加速网络训练和推理过程,降低过拟合风险。

  • Ghost卷积:Ghost卷积则引入了幽灵通道的概念,将输入通道分成两个部分:主通道和幽灵通道。主通道和幽灵通道的比例由超参数 α \alphaα 控制,通常取值为1/2 或者 1/4。

4 池化

相关文章:https://mp.weixin.qq.com/s/FRLgTggdee_G4BcZu1f3XQ

4.1 一些新的池化方法

Mix Pooling(混合池化)

论文地址: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.678.7068&rep=rep1&type=pdf

为了提高训练较大CNN模型的正则化性能,受Dropout(将一半激活函数随机设置为0)的启发,Dingjun Yu等人提出了一种随机池化Mix Pooling[2] 的方法,随机池化用随机过程代替了常规的确定性池化操作,在模型训练期间随机采用了最大池化和平均池化方法,并在一定程度上有助于防止网络过拟合现象。其定义如下:

其中,λ 是 0或1的随机值,表示选择使用最大池化或平均池化,换句话说,混合池化以随机方式改变了池调节的规则,这将在一定程度上解决最大池和平均池所遇到的问题。

优点:混合池化优于传统的最大池化和平均池化方法,并可以解决过拟合问题来提高分类精度。此外该方法所需要的计算开销可忽略不计,而无需任何超参数进行调整,可被广泛运用于CNN。

Stochastic Pooling(随机池化)

  • 论文地址: https://arxiv.org/pdf/1301.3557
  • 代码链接: https://github.com/szagoruyko/imagine-nn

计算过程如下:

  • 先将方格中的元素同时除以它们的和sum,得到概率矩阵。
  • 按照概率随机选中方格。
  • pooling得到的值就是方格位置的值。

随机池化只需对特征图中的元素按照其概率值大小随机选择,即元素值大的被选中的概率也大,而不像max-pooling那样,永远只取那个最大值元素,这使得随机池化具有更强的泛化能力。

Soft Pooling(软池化)

  • 论文地址: https://arxiv.org/pdf/2101.00440
  • 代码链接: https://github.com/alexandrosstergiou/SoftPool

提出背景:

现有的一些池化方法大都基于最大池化和平均池化的不同组合,而软池化Soft Pooling是基于softmax加权的方法来保留输入的基本属性,同时放大更大强度的特征激活。与maxpooling不同,softpool是可微的,所以网络在反向传播过程中为每个输入获得一个梯度,这有利于提高训练效果。

定义:

  • SoftPool的计算流程如下:
    a. 特征图透过滑动视窗来框选局部数值
    b. 框选的局部数值会先经过指数计算,计算出的值为对应的特征数值的权重
    c. 将各自的特征数值与其相对应的权重相乘
    d. 最后进行加总

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNNswqCf-1681367816830)(null)]

这样的方式让整体的局部数值都有所贡献,重要的特征占有较高的权重。比Max pooling(直接选择最大值)、Average pooling (求平均,降低整个局部的特征强度) 能够保留更多讯息。

作为一种新颖地池化方法,SoftPool可以在保持池化层功能的同时尽可能减少池化过程中带来的信息损失,更好地保留信息特征并因此改善CNN中的分类性能。大量的实验结果表明该算法的性能优于原始的Avg池化与Max池化。随着神经网络的设计变得越来越困难,而通过NAS等方法也几乎不能大幅度提升算法的性能,为了打破这个瓶颈,从基础的网络层优化入手,不失为一种可靠有效的精度提升手段。

Power Average Pooling(幂平均池化)

论文地址

幂平均池化(Power Mean Pooling)是一种基于参数化的池化方式,它可以根据不同的超参数取值,在平均池化和最大池化之间进行平滑的过渡,提供了一种更灵活的池化方式。

幂平均池化的优点包括:

  • 提供了更灵活的池化方式:幂平均池化可以根据不同的超参数取值,在平均池化和最大池化之间进行平滑的过渡,提供了一种更灵活的池化方式。
  • 增强了特征的代表性:与传统的最大池化和平均池化相比,幂平均池化可以更好地保留输入特征图中的重要信息,从而增强了特征的代表性。
  • 提高了模型的泛化能力:幂平均池化可以在平均池化和最大池化之间实现平滑的过渡,从而提高模型的泛化能力和对数据的适应性。

幂平均池化是一种比较有用的池化方式,可以根据不同的超参数取值,在平均池化和最大池化之间进行平滑的过渡,从而提供了一种更灵活、更有代表性、更具泛化能力的池化方式。


Detail-Preserving Pooling(DPP池化)

论文地址

DPP(Determinantal Point Processes)池化是一种基于行列式理论的池化方式,它可以通过计算特征矩阵的行列式值,来评估不同特征之间的相关性,从而实现更加有效的特征选取和池化。

DPP池化的优点包括:

  • 提供了更加有效的特征选取和池化方式:DPP池化可以通过计算特征矩阵的行列式值,来评估不同特征之间的相关性,从而实现更加有效的特征选取和池化。
  • 可以有效地避免信息重复和冗余:DPP池化可以根据输入特征图的相关性,自动选择相关性较低的特征进行池化,从而避免信息重复和冗余,提高了特征的代表性和泛化能力。
  • 适用于多种不同的任务和场景:DPP池化可以适用于多种不同的任务和场景,包括图像分类、目标检测、人脸识别等。

DPP池化是一种基于行列式理论的池化方式,可以通过计算特征矩阵的行列式值,来评估不同特征之间的相关性,从而实现更加有效的特征选取和池化,具有很高的实用价值。


Local Importance Pooling(局部重要性池化)

论文地址

局部重要性池化(Local Importance Pooling)是一种基于注意力机制的池化方式,可以有效地提取输入特征图中的关键信息,从而实现更加精确和有效的特征池化。

局部重要性池化的具体实现方式如下:

  • 给定一个输入特征图 X XX,以及一个超参数 k kk,其中 k kk 表示池化后的输出特征图的尺寸。
  • 针对输入特征图 X XX,使用一个二维卷积操作来计算出对应的注意力分数矩阵 A AA,其中 A i , j A_{i,j}A**i,j 表示第 i ii 行第 j jj
    列的注意力分数。
  • 基于注意力分数矩阵 A AA,选择前 k kk 个注意力分数最大的位置,作为输出特征图中的位置索引。
  • 根据输出特征图中的位置索引,从输入特征图 X XX 中提取相应的区域,并计算这些区域的平均值作为输出特征图的对应位置。

局部重要性池化的优点包括:

  • 能够提取关键信息:局部重要性池化可以根据输入特征图中每个位置的注意力分数,自适应地选择与当前任务相关的关键信息,从而提高特征池化的效率和准确性。
  • 能够适应不同的输入尺寸和输出尺寸:局部重要性池化可以根据不同的输入尺寸和输出尺寸,自动调整注意力分数矩阵和池化位置索引,从而适应不同的任务和场景。
  • 能够与其他池化方式结合使用:局部重要性池化可以与其他池化方式(如最大值池化、平均池化等)结合使用,从而进一步提高特征池化的效率和准确性。

局部重要性池化是一种基于注意力机制的池化方式,可以自适应地选择与当前任务相关的关键信息,提高特征池化的效率和准确性,具有很高的实用价值。


提问:卷积层和池化层有什么区别?

它们的相同之处就是在结构上有一定的相似,都是对感受野内特征进行提取,根据步长设置获取不同维度的输出,不同的地方在于其内部操作,以及最后的作用。

  • 卷积层主要目的是不同通道获取图像特征
  • 池化的主要目的是将提取好的特征进一步进项一些列操作,将特征图的感受野扩大,进而减少数据计算量,提升模型效率。
卷积层 池化层
结构 零填充时输出维度不变,而通道数改变 通常特征维度会降低,通道数不变
稳定性 输入特征发生细微改变时,输出结果会改变 感受域内的细微变化不影响输出结果
作用 感受域内提取局部关联特征 感受域内提取泛化特征,降低维度
参数量 与卷积核尺寸、卷积核个数相关 不引入额外参数

5 卷积网络的结构

5.1 瓶颈结构

ResNet、MobileNet等很多网络也采用并发展了这个结构,瓶颈结构的初衷是为了降低大卷积层的计算量。
学习目标检测YOLO系列1--机器学习基础知识储备_第11张图片
可以以最小的计算代价达到与之前相似甚至更好的效果,因为瓶颈结构会增加网络层数,所以特征提取能力可能也会有相应提升,瓶颈结构基本上可以用于所有的卷积神经网络中场景,包括物体检测和分割、生成对抗网络等大方向。

5.2 沙漏结构

神经网络的沙漏结构(hourglass structure)是一种常用于图像处理和计算机视觉任务中的网络结构,也称为“Hourglass Network”。它主要是通过多个重复的编码器-解码器模块来逐步提取并重建图像特征,从而实现对图像中物体的检测和定位。

沙漏结构由一系列的编码器和解码器模块组成,其中编码器用于对输入图像进行特征提取和降维,解码器则用于对提取的特征进行上采样和重建。每个编码器-解码器模块都由下采样、上采样和跳跃连接(skip connection)三个部分组成。

下采样部分通常使用卷积和池化等操作来逐步减小特征图的尺寸和通道数,以提取更高级别的特征。而上采样部分则使用转置卷积等操作来逐步恢复特征图的尺寸和通道数,从而实现对特征的重建和细化。跳跃连接则用于跨层传递信息,将低层次和高层次的特征进行融合,以便更好地利用不同层次的信息。

沙漏结构的优点在于它能够有效地处理图像中的多尺度信息,并能够进行端到端的训练和预测。它在许多计算机视觉任务中得到广泛应用,如人体姿态估计、目标检测和图像分割等。


(未完 持续更新…)

你可能感兴趣的:(笔记,学习,目标检测,YOLO)