1: 目标检测模型
YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,其主要特点是能够实现实时目标检测。
YOLO的核心思想是将目标检测任务转化为一个回归问题,通过一个神经网络同时预测目标的类别、位置和边界框。相比传统方法需要滑动窗口或候选区域生成等复杂操作,YOLO将目标检测过程简化为单次前向传播。
YOLO将输入图像划分为一个固定大小的网格(如7x7或13x13),每个格子负责预测网格中存在的目标。对于每个格子,YOLO会预测多个边界框(bounding box),每个边界框包含一个目标的位置和形状信息,并且估计该边界框中存在目标的置信度。
在训练阶段,YOLO使用真实边界框与预测边界框之间的IoU(Intersection over Union)作为目标检测的损失函数,并利用反向传播算法进行网络参数的优化。
YOLO的设计使得它在速度上具有优势,可以实现实时的目标检测和跟踪。此外,由于YOLO是端到端的训练方式,能够同时优化目标分类和定位任务,因此在整体准确性上也取得了较好的表现。
YOLO算法的版本包括YOLOv1、YOLOv2(又称YOLO9000)、YOLOv3和YOLOv4等,目前到yolo v8 ,它们通过改进网络结构、调整损失函数、引入更多的技术手段等不断提升了目标检测的性能。
过拟合(Overfitting)指的是机器学习模型在训练数据上表现很好,但在测试数据上表现较差的现象。简而言之,模型过拟合了训练数据,无法很好地泛化到新的未见数据。 过拟合的原因: 1:模型复杂度过高:如果模型具有过多的参数或层级,它可能会过度记忆训练数据,从而无法正确地捕捉到普遍规律。例如,在神经网络中,如果隐藏层的数量太多或每个隐藏层的单元数过多,容易导致过拟合。 2:数据不足:当训练数据量较少时,模型容易过拟合。模型无法在有限的数据中学习到足够的模式和变化。增加更多的训练数据可以帮助减少过拟合。 3:特征选择不当:选择过多或不相关的特征可能导致过拟合。过多的特征可能会引入噪声,不相关的特征则会干扰模型的学习。 4:训练时间过长:如果模型训练时间过长,可能会导致模型过拟合训练数据,而无法泛化到新的数据。
关于激活函数:
yolo算法的原理:
网格划分:首先,将输入图像划分为固定大小的网格。每个网格负责预测包含物体的边界框和类别概率。
特征提取:通过卷积神经网络(CNN),对整个图像进行特征提取。通常采用预训练的骨干网络(如DarkNet、ResNet等)来提取图像特征。
边界框预测:在每个网格中,预测多个边界框(bounding box),每个边界框由4个坐标值(x、y、宽度、高度)表示。这些坐标值相对于网格的大小。同时,对于每个边界框,预测其包含物体的类别概率。
类别概率计算:使用softmax函数将每个边界框对应的类别概率进行归一化,使其总和为1。这样可以确定每个边界框最有可能包含的物体类别。
预测输出:将所有网格中的边界框预测结果结合起来,通过置信度得分(confidence score)筛选出具有高置信度的边界框。最终输出检测到的目标边界框及其对应的类别。
YOLO算法的主要特点是在一个前向传播过程中完成目标检测,运行速度快。然而,由于网格划分的粗糙性,YOLO算法相对于其他方法可能在小物体检测和密集目标排列方面略有不足。为了改进这些问题,YOLOv2、YOLOv3等版本进行了一系列的改进,如引入多尺度预测、使用更细粒度的网格划分等。
激活函数的作用:
激活函数在神经网络中起着非常重要的作用,它们引入非线性特性,允许神经网络模型学习更加复杂和非线性的模式。以下是激活函数的几个主要作用:
引入非线性:线性函数的组合仍然是线性的,而激活函数的引入可以使神经网络模型具备处理非线性关系的能力。这对于解决许多现实问题非常关键,因为很多真实世界的数据具有复杂的非线性特征。
增加模型的表示能力:激活函数能够扩展神经网络的表示能力。通过引入非线性,激活函数可以使神经网络模型拟合更加复杂的数据分布和函数关系,从而提高模型的表达能力。
改善模型的稳定性:激活函数可以帮助改善神经网络模型的数值稳定性。例如,某些激活函数可以有效地解决梯度消失或梯度爆炸的问题,从而加速模型的训练过程。
提取特征和非线性映射:激活函数可以通过对输入数据的非线性变换,有选择性地激活或抑制神经元的输出。这样可以帮助神经网络模型提取数据中的重要特征,并进行非线性映射,使模型具备更强的表示能力。
具备生物学解释:激活函数的选择也可以受到生物学神经元工作原理的启发,使得神经网络模型与人脑的工作方式更加相似。
常见的激活函数包括ReLU、LeakyReLU、Sigmoid、Tanh等,它们在不同的场景和任务中具有不同的适用性和效果。选择合适的激活函数可以对神经网络模型的性能和效果产生明显的影响。
补充:
IOU阈值:
目标比较高的话,会设置为95%。
第一步网格
第二步 两个候选框,一个格子生成两个候选框。
比如红色格子,有两个黄色格子的候选框。
没太懂,就说第一个位看它是不是狗,第二个位看它是不是猫。然后一直排到第20个类别,
一共49个格子,就会生成49*2 = 98个候选框。每个候选框为是狗的概率。
狗的类别如果是1-19,那就输出他的候选框和置信度。如果类别不是狗,就不显示了,所以最后有三个输出,这三个在类别里面有最高值,就可以知道大概是什么了。判定流程。(反向,根据损失反向调整)
位置损失,类别损失,置信度损失。分类损失的p ,就是那个是狗的概率。
学习思路:
github上面找源码:
yolo v5
很详细,安装环境呀等等。