YOLOV1网络结构
SAY YOU ONLY LOOK ONCE AGAIN!!!
SAY YOU ONLY LOOK ONCE AGAIN!!!
SAY YOU ONLY LOOK ONCE AGAIN!!!
本文章主要参考up主同济子豪兄的视频的基础上整理的笔记,建议读者务必观看原视频,受益匪浅
关键词注解
注:关键词在文章中大量使用,所以注解较为全面,可以在阅读文章前只大致浏览,在正文部分不断回顾,理解会更加透彻!
交并比IoU(Intersection over Union)
交并比IoU是目标检测中常用的一个度量指标,用于计算模型预测的目标边界框(Bounding Box) 与 真实目标边界框(ground truth) 之间的 重叠程度。
IoU的计算方式如下:
交集(Intersection):计算预测边界框和真实边界框之间的重叠区域面积。
并集(Union):计算预测边界框和真实边界框合并后的总面积。
交并比(IoU):将交集面积除以并集面积,得到的结果即为IoU值。IoU值越接近1,表示预测边界框与真实边界框的重叠程度越高,即预测越准确;IoU值越接近0,表示预测边界框与真实边界框的重叠程度越低,即预测越不准确。
IoU在目标检测训练阶段,可以作为损失函数的一部分,用于优化模型的预测能力,使得模型能够输出更加接近真实边界框的预测结果。在预测阶段,IoU可以用于评估模型的性能,通过计算模型在所有测试样本上的平均IoU值,可以衡量模型在目标检测任务上的整体表现。
IoU只考虑了边界框之间的重叠程度,而没有考虑目标的类别信息。因此,在实际应用中,通常会结合其他指标(如准确率、召回率等)来全面评估目标检测模型的性能。置信度
置信度表示模型对于某个预测框内存在目标的信心程度。这个信心程度是通过计算预测框与真实框(ground truth)之间的重叠程度(如IoU,即交并比)以及预测框内存在目标的概率来得到的。
置信度的计算通常涉及两个方面:一是预测框与真实框之间的位置匹配程度,即IoU值;二是预测框内存在目标的概率估计。通过将这两个因素相结合,模型可以得出一个综合的置信度得分,用于表示该预测框包含目标的可信程度。
在YOLOv1的训练过程中,置信度是一个关键的损失函数组成部分。模型会尝试通过调整其参数来优化置信度得分,使得对于包含目标的预测框,置信度得分较高;而对于不包含目标的预测框,置信度得分较低。这样,模型就能够更好地区分真实目标和背景噪声,提高目标检测的准确性。
此外,在目标检测任务中,置信度还可以用于预测阶段后处理过程,如非极大值抑制(NMS)。NMS是一种通过消除重叠度较高的冗余预测框来优化检测结果的技术。在NMS过程中,置信度得分较高的预测框会被保留下来,而置信度得分较低的预测框则会被抑制或丢弃。这样,最终输出的检测结果将更为准确和可靠。grid cell
:在YOLOv1的输出层,图片被分成7x7的网格,每个网格就是一个grid cellbounding box(bbox)
:边界框是一个用来描述目标在图像中位置和范围的矩形框。它由矩形框的左上角和右下角坐标定义,主要用于标记和定位目标物体。在目标检测任务中,模型通过预测目标物体的边界框来实现目标检测和定位。ground truth
:特指人工标注的结果。它提供了图像中目标对象的准确位置和类别信息,是模型训练和评估过程中的基准标准。模型预测的bounding box会与ground truth进行比较,通过计算两者之间的相似度或重叠度(如IoU,即交并比)来评估模型的性能。
图解YOLOV1网络结构
YOLOv1的网络结构主要包括输入层、卷积层、全连接层以及输出层。注:输入层、卷积层、全连接层详解请参考
YOLO学习笔记(1):知识储备
输入层:YOLO的输入层是由输入图像经过裁剪、归一化或数据增强等方式处理得到的数据。YOLOv1将输入图像的大小固定为448x448,这是因为目标检测需要更加精细的信息。
卷积层:YOLOv1的网络中包含了24个卷积层(如下图所示),这些卷积层的主要操作是对输入层处理的特征图进行卷积操作运算,以提取输入层的特征信息,便于后续的分类与定位处理。这些卷积层中,卷积核的大小有3x3和1x1两种。其中,使用1x1大小的卷积核主要是考虑到降低卷积核通道数量的需要,以减少网络产生的参数。
全连接层:YOLOv1的网络结构最后两层是全连接层,用于回归框的坐标、置信度以及分类概率。
输出层:YOLOv1的输出层是一个7x7x30维的张量,这个张量表示的是将图像划分为7x7的网格(grid cell),每个网格预测2个bounding box,每个bounding box包含4个坐标值(中心点横纵坐标,边界框的长和宽)、1个置信度和20个类别的概率。因此,总共是7x7x(2x(4+1)+20)=7x7x30的三维矩阵(如下图所示)。
在卷积神经网络(CNN)中,卷积层的参数通常表示为“卷积核大小*卷积核大小 *输入通道数-s-步长”,其中:
卷积核大小(例如第一个卷积层是7x7)指的是卷积核的宽度和高度。
输入通道数指的是输入数据的通道数量(例如彩色图像通常有3个通道:红、绿、蓝)。
s表示步长stride步长指的是卷积核在输入数据上滑动时每次移动的像素数量。
第一个卷积层7x7x64-s-2表示的是卷积神经网络的第一层卷积,具体参数如下:
卷积核大小是7x7。
输入通道数是64(这意味着输入数据有64个卷积核)。
步长是2(卷积核在输入数据上每次移动2个像素)。
这一层卷积将会对448x448x3的图像输入数据通过64个卷积核分别对3个通道的图像数据进行卷积操作(由于使用7x7大小的卷积核,并且每次移动2个像素,卷积操作会生成新的特征图大小变为224224192),再经过2x2-s-2最大池化层得到112x112x192特征图作为下一个卷积层的输入。
预测阶段(前向推断)
在前向推断过程中,输入一张彩色图片YOLOV1网络会在输入层将其缩放为448x448x3(通道) 的图片,通过卷积层,池化层,全连接层回归在输出层得到7x7x30的三维矩阵(张量)。
三维矩阵可视化显示如上图所示的7x7=49个grid cell,每个grid cell可以预测2个bounding box(2个bounding box的中心点都落在这个grid cell中),每个bounding box包含中心点横纵坐标 x、y,bounding box的 高和宽 h、w, 置信度 c共5个参数。
每个网格grid cell预测2个bounding box共5+5=10个参数+20个类别的条件概率,综上,每个grid cell共有30个参数。注:每一个grid cell生成所有类别的全概率(单个类别的全概率=置信度*每个类别的条件概率)。
7x7=49个网格(grid cell)每个网格生成2个bounding box(7x7x2=98个bounding box)其中边界框的粗细表示bounding box的置信度(如上图所示)
网格的颜色表示在单个网格的预测的一组20个类别的全概率参数中,全概率最高的类别所占的网格(grid cell)(可视化显示如上图)
预测阶段后处理步骤
YOLOv1理论上有7x7=49个grid cell,7x7x2=98个bounding box(每个bounding box有置信度(边界框粗细)和最高概率对应的类别(边界框颜色)),过滤低置信度预测框,经过非极大值抑制去除重复预测框得到预测结果。
7x7x2=98个bunding box共有98组20维的全概率向量,每个类别的全概率=置信度x每个类别的条件概率
注:全概率公式P(A)=P(A|B1)P(B1) + P(A|B2)P(B2) + ... + P(A|Bi)P(Bi)
置信度过滤:首先,对每个预测框的置信度进行评估。置信度表示了模型对预测框内存在目标的确定程度。通常,会设置一个 阈值,只有置信度高于该阈值的预测框才会被保留,而低于该阈值的预测框则会被置0。这有助于 过滤掉那些模型认为不太可能是目标的预测框。
非极大值抑制(NMS):经过置信度过滤后,可能仍然会有 多个预测框指向同一个目标。NMS的目的就是解决这种冗余问题。NMS的基本思想是,对于每个目标,只保留置信度最高的预测框,而 抑制(即丢弃)与其重叠程度较高的其他预测框。这样做可以 确保每个目标只被检测一次,避免了重复检测的问题。
NMS的具体实现通常包括以下几个步骤:
1.对于每个类别, 根据置信度对预测框进行排序。
2.选择置信度最高的预测框,将其添加到最终检测结果中。
3. 计算该预测框与其他预测框的重叠度(IOU,Intersection over Union)。
4.如果某个预测框与已选择的预测框的 重叠度超过某个阈值(例如0.5),则将其丢弃(高于阈值视为重复识别)。
5.重复上述步骤,直到所有预测框都被处理完毕。
通过 置信度过滤和 NMS这两个步骤,YOLOv1能够有效地从大量的预测框中筛选出最有可能的目标,并生成最终的检测结果。这些结果通常以边界框和对应的类别标签的形式呈现,可以用于各种实际应用中,如目标跟踪、安全监控等。
需要注意的是,虽然YOLOv1在目标检测领域取得了显著的进步,但它仍然存在一些局限性,如 对小目标和密集目标的检测性能相对较差。后续版本的YOLO(如YOLOv2、YOLOv3等)针对这些问题进行 了改进,进一步提升了目标检测的准确性和效率。
训练阶段(反向传播)
训练过程中的反向传播阶段用于微调神经元中的权重,以使得损失函数最小化。
首先,监督学习或者说深度学习是通过梯度下降(神经网络核心算法,后文有注解)和反向传播方法迭代的去微调神经元中的权重来使得损失函数最小化的过程。在目标检测任务中,训练集上有人工使用标注工具(如labelimg)对训练图片进行各类加框标注,这些标注框被称为ground truth(即标准答案)。算法的目标是让预测结果尽量拟合这些人工标注框,从而使得损失函数最小化。注:简言之训练过程就是用bunding box(和ground truth交并比最大的bunding box)(虚线框)去拟合ground truth(实线框)(训练过程可视化如上图所示)
损失函数
在YOLOv1中,损失函数的设计旨在使负责拟合物体的预测框与物体的真实ground truth尽可能一致和重合。损失函数包含多项误差,这些误差都是通过残差平方和的形式进行计算的。
YOLOv1的损失函数旨在综合考虑模型预测的位置、置信度和分类误差,以达到良好的检测性能。其主要由三部分组成:位置回归误差、置信度回归误差和分类误差。(如上图所示)
位置回归误差
- 中心点定位横纵坐标误差(字母上带帽子的是标注值,否则为预测值)
- bbox的宽高定位误差(根号的目的是使小框对物体更敏感,减小大小差别较大的边界框之间的误差差异。(具体来说,当一个小目标和大目标的预测框宽度或高度都增加相同的像素值时,相对于各自的真实框,小目标的预测框偏差比例会更大))。
为了使得这种大小的差异在损失函数中得到合理的体现,对宽和高进行开根号处理。这样做可以将预测框与真实框之间的误差进行“归一化”,使得不同大小的物体在损失函数中的贡献更加均衡。换句话说,通过开根号,模型会给予小目标预测偏差更大的权重,从而更关注小目标的定位准确性。因此,宽高定位误差带根号的设计是为了更好地处理不同大小目标的定位误差,提高目标检测的准确性。
置信度回归误差
- 负责检测物体的bunding box置信度回归误差( 绿色标签值为bunding box与ground truth的交并比IoU)
- 不负责检测物体的bunding box置信度回归误差( 橙色标签值为0)
负责检测物体的分类误差
文章来源:https://www.toymoban.com/news/detail-855099.html
蓝框是负责检测物体的grid cell
红框是负责检测物体的bunding box
绿框是不负责检测物体的bunding box
梯度下降法
在反向传播阶段,利用梯度下降法迭代地调整神经元的权重。首先计算损失函数关于权重的梯度,然后根据这些梯度信息更新权重。这个过程反复进行,直到损失函数达到一个相对较小的值,即预测结果已经足够接近真实标注框。
梯度下降法是一种优化算法,它通过计算损失函数关于模型参数的梯度,然后沿着梯度的反方向更新参数,以使得损失函数达到最小值。在YOLOv1中,损失函数包括了位置误差、置信度误差和分类误差等多个部分,因此梯度下降法需要同时考虑这些误差来更新权重。
在反向传播阶段,会计算损失函数关于输出层神经元的梯度。这些梯度表示了损失函数对于输出层神经元权重的敏感度。然后,通过链式法则,这些梯度会逐层反向传播到模型的更深层,计算得到每一层神经元的梯度。这些梯度反映了模型在当前权重下,对于输入数据的拟合程度以及预测误差的大小。
得到每一层神经元的梯度后,就可以使用梯度下降法来更新权重了。将每个神经元的梯度与学习率相乘,得到一个权重更新量。然后,将这个更新量加到原来的权重上,就得到了新的权重值。这个过程会迭代进行多次,每次迭代都会使用新的训练数据来计算梯度并更新权重。
通过不断地迭代和更新权重,模型能够逐渐学习到如何从输入数据中提取出有用的特征,并准确地预测出目标的位置、置信度和类别。同时,由于损失函数的设计考虑了多种误差因素,因此模型在优化过程中会综合考虑这些因素,以达到更好的性能。
对于神经卷积网络的核心算法——梯度下降法(请参考本视频)
为了避免过拟合,YOLOv1在训练过程中采用了dropout技术,它是一种正则化方法,它在训练过程中随机将一部分神经元的输出置为0,这样可以减少模型对训练数据的依赖,进而提高模型的泛化能力。还可以使用正则化技术来限制权重的取值范围,防止模型过于复杂而出现过拟合现象。
综上,YOLOv1训练过程的反向传播阶段是一个迭代优化权重的过程,旨在通过最小化损失函数来使得预测结果更加接近真实标注框。通过不断调整和优化模型参数,可以训练出一个高效且准确的目标检测模型。文章来源地址https://www.toymoban.com/news/detail-855099.html
到了这里,关于YOLO学习笔记(2):YOLOV1算法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!