YOLO学习笔记(2):YOLOV1算法详解

这篇具有很好参考价值的文章主要介绍了YOLO学习笔记(2):YOLOV1算法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

YOLOV1网络结构

yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
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 cell
bounding 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的三维矩阵(如下图所示)。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
  在卷积神经网络(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算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
  在前向推断过程中,输入一张彩色图片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生成所有类别的全概率(单个类别的全概率=置信度*每个类别的条件概率)。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
  7x7=49个网格(grid cell)每个网格生成2个bounding box(7x7x2=98个bounding box)其中边界框的粗细表示bounding box的置信度(如上图所示)
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
  网格的颜色表示在单个网格的预测的一组20个类别的全概率参数中,全概率最高的类别所占的网格(grid cell)(可视化显示如上图)
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

前向推断过程步骤可视化如上图显示

预测阶段后处理步骤

  YOLOv1理论上有7x7=49个grid cell,7x7x2=98个bounding box(每个bounding box有置信度(边界框粗细)和最高概率对应的类别(边界框颜色)),过滤低置信度预测框,经过非极大值抑制去除重复预测框得到预测结果。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

预测阶段后处理可视化如上图所示

yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
  7x7x2=98个bunding box共有98组20维的全概率向量,每个类别的全概率=置信度x每个类别的条件概率
注:全概率公式P(A)=P(A|B1)P(B1) + P(A|B2)P(B2) + ... + P(A|Bi)P(Bi)
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
   置信度过滤:首先,对每个预测框的置信度进行评估。置信度表示了模型对预测框内存在目标的确定程度。通常,会设置一个 阈值,只有置信度高于该阈值的预测框才会被保留,而低于该阈值的预测框则会被置0。这有助于 过滤掉那些模型认为不太可能是目标的预测框
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
   非极大值抑制(NMS):经过置信度过滤后,可能仍然会有 多个预测框指向同一个目标。NMS的目的就是解决这种冗余问题。NMS的基本思想是,对于每个目标,只保留置信度最高的预测框,而 抑制(即丢弃)与其重叠程度较高的其他预测框。这样做可以 确保每个目标只被检测一次,避免了重复检测的问题
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
NMS的具体实现通常包括以下几个步骤:
  1.对于每个类别, 根据置信度对预测框进行排序
  2.选择置信度最高的预测框,将其添加到最终检测结果中。
  3. 计算该预测框与其他预测框的重叠度(IOU,Intersection over Union)。
  4.如果某个预测框与已选择的预测框的 重叠度超过某个阈值(例如0.5),则将其丢弃(高于阈值视为重复识别)。
  5.重复上述步骤,直到所有预测框都被处理完毕。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
  通过 置信度过滤NMS这两个步骤,YOLOv1能够有效地从大量的预测框中筛选出最有可能的目标,并生成最终的检测结果。这些结果通常以边界框和对应的类别标签的形式呈现,可以用于各种实际应用中,如目标跟踪、安全监控等。
需要注意的是,虽然YOLOv1在目标检测领域取得了显著的进步,但它仍然存在一些局限性,如 对小目标和密集目标的检测性能相对较差。后续版本的YOLO(如YOLOv2、YOLOv3等)针对这些问题进行 了改进,进一步提升了目标检测的准确性和效率。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

训练阶段(反向传播)

  训练过程中的反向传播阶段用于微调神经元中的权重,以使得损失函数最小化
  首先,监督学习或者说深度学习是通过梯度下降(神经网络核心算法,后文有注解)反向传播方法迭代的去微调神经元中的权重来使得损失函数最小化的过程。在目标检测任务中,训练集上有人工使用标注工具(如labelimg)对训练图片进行各类加框标注,这些标注框被称为ground truth(即标准答案)。算法的目标是让预测结果尽量拟合这些人工标注框,从而使得损失函数最小化。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
注:简言之训练过程就是用bunding box(和ground truth交并比最大的bunding box)(虚线框)去拟合ground truth(实线框)(训练过程可视化如上图所示)
损失函数
  在YOLOv1中,损失函数的设计旨在使负责拟合物体的预测框与物体的真实ground truth尽可能一致和重合。损失函数包含多项误差,这些误差都是通过残差平方和的形式进行计算的。
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

  YOLOv1的损失函数旨在综合考虑模型预测的位置、置信度和分类误差,以达到良好的检测性能。其主要由三部分组成:位置回归误差、置信度回归误差和分类误差。(如上图所示)
位置回归误差

  • 中心点定位横纵坐标误差(字母上带帽子的是标注值,否则为预测值)
  • bbox的宽高定位误差(根号的目的是使小框对物体更敏感,减小大小差别较大的边界框之间的误差差异。(具体来说,当一个小目标和大目标的预测框宽度或高度都增加相同的像素值时,相对于各自的真实框,小目标的预测框偏差比例会更大))。
      为了使得这种大小的差异在损失函数中得到合理的体现,对宽和高进行开根号处理。这样做可以将预测框与真实框之间的误差进行“归一化”,使得不同大小的物体在损失函数中的贡献更加均衡。换句话说,通过开根号,模型会给予小目标预测偏差更大的权重,从而更关注小目标的定位准确性。因此,宽高定位误差带根号的设计是为了更好地处理不同大小目标的定位误差,提高目标检测的准确性。
    yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

置信度回归误差

  • 负责检测物体的bunding box置信度回归误差( 绿色标签值为bunding box与ground truth的交并比IoU)
  • 不负责检测物体的bunding box置信度回归误差( 橙色标签值为0)
    yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

负责检测物体的分类误差
yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习

yolov1算法讲解,YOLO系列算法学习记录,YOLO,python,目标检测,计算机视觉,人工智能,神经网络,深度学习
蓝框是负责检测物体的grid cell
红框是负责检测物体的bunding box
绿框是不负责检测物体的bunding box
梯度下降法
  在反向传播阶段,利用梯度下降法迭代地调整神经元的权重。首先计算损失函数关于权重的梯度,然后根据这些梯度信息更新权重。这个过程反复进行,直到损失函数达到一个相对较小的值,即预测结果已经足够接近真实标注框。
  梯度下降法是一种优化算法,它通过计算损失函数关于模型参数的梯度,然后沿着梯度的反方向更新参数,以使得损失函数达到最小值。在YOLOv1中,损失函数包括了位置误差、置信度误差和分类误差等多个部分,因此梯度下降法需要同时考虑这些误差来更新权重。
  在反向传播阶段,会计算损失函数关于输出层神经元的梯度。这些梯度表示了损失函数对于输出层神经元权重的敏感度。然后,通过链式法则,这些梯度会逐层反向传播到模型的更深层,计算得到每一层神经元的梯度。这些梯度反映了模型在当前权重下,对于输入数据的拟合程度以及预测误差的大小。
  得到每一层神经元的梯度后,就可以使用梯度下降法来更新权重了。将每个神经元的梯度与学习率相乘,得到一个权重更新量。然后,将这个更新量加到原来的权重上,就得到了新的权重值。这个过程会迭代进行多次,每次迭代都会使用新的训练数据来计算梯度并更新权重。
  通过不断地迭代和更新权重,模型能够逐渐学习到如何从输入数据中提取出有用的特征,并准确地预测出目标的位置、置信度和类别。同时,由于损失函数的设计考虑了多种误差因素,因此模型在优化过程中会综合考虑这些因素,以达到更好的性能。
对于神经卷积网络的核心算法——梯度下降法(请参考本视频)
  为了避免过拟合,YOLOv1在训练过程中采用了dropout技术,它是一种正则化方法,它在训练过程中随机将一部分神经元的输出置为0,这样可以减少模型对训练数据的依赖,进而提高模型的泛化能力。还可以使用正则化技术来限制权重的取值范围,防止模型过于复杂而出现过拟合现象。
  综上,YOLOv1训练过程的反向传播阶段是一个迭代优化权重的过程,旨在通过最小化损失函数来使得预测结果更加接近真实标注框。通过不断调整和优化模型参数,可以训练出一个高效且准确的目标检测模型。文章来源地址https://www.toymoban.com/news/detail-855099.html

到了这里,关于YOLO学习笔记(2):YOLOV1算法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 目标检测YOLO算法,先从yolov1开始

    有一套配套的学习资料,才能让我们的学习事半功倍。 yolov1论文原址:You Only Look Once: Unified, Real-Time Object Detection 代码地址:darknet: Convolutional Neural Networks (github.com) one-stage(单阶段):YOLO系列 最核心的优势:速度非常快,适合做实时检测任务! 但是缺点也是有的,效果通常

    2024年02月09日
    浏览(49)
  • 目标检测——YOLO系列学习(一)YOLOv1

    YOLO可以说是单阶段的目标检测方法的集大成之作,必学的经典论文,从准备面试的角度来学习一下yolo系列。 RCNN系列,无论哪种算法,核心思路都是 Region Proposal(定位)+ classifier(修正定位+分类) 。所以也被称为两阶段算法。但是难以达到实时检测的效果,因此yolov1将其修

    2024年04月25日
    浏览(41)
  • YOLO系列算法全家桶——YOLOv1-YOLOv9详细介绍 !!

    文章目录 前言 一、YOLO算法的核心思想 1. YOLO系列算法的步骤 2. Backbone、Neck和Head 二、YOLO系列的算法 1. YOLOv1(2016) 1.1 模型介绍 1.2 网络结构 1.3 实现细节 1.4 性能表现 2. YOLOv2(2016) 2.1 改进部分 2.2 网络结构 2.3 性能表现 3. YOLOv3 (2018) 3.1 模型介绍 3.2 网络结构 3.3 改进部分

    2024年04月10日
    浏览(58)
  • 人工智能学习07--pytorch21--目标检测:YOLO系列理论合集(YOLOv1~v3)

    如果直接看yolov3论文的话,会发现有好多知识点没见过,所以跟着视频从头学一下。 学习up主霹雳吧啦Wz大佬的学习方法: 想学某个网络的代码时: 到网上搜这个网络的讲解 → 对这个网络大概有了印象 → 读论文原文 ( 很多细节都要依照原论文来实现, 自己看原论文十分

    2024年02月10日
    浏览(73)
  • YOLO系列概述(yolov1至yolov7)

    参考: 睿智的目标检测53——Pytorch搭建YoloX目标检测平台 YoloV7 首先我们来看一下yolo系列的发展历史,yolo v1和yolox是anchor free的方法,yolov2,yolov3,一直到yolov7是anchor base的方法。首选我们来回顾下每个版本的yolo都做了些什么 yolo v1是将 416 ∗ 416 416*416 4 1 6 ∗ 4 1 6 的图片,分

    2024年02月05日
    浏览(45)
  • 从YOLOv1到YOLOv8的YOLO系列最新综述【2023年4月】

    作者: Juan R. Terven 、 Diana M. Cordova-Esparaza 摘要: YOLO已经成为 机器人 、 无人驾驶汽车 和 视频监控应用 的核心实时物体检测系统。我们对YOLO的演变进行了全面的分析,研究了从最初的YOLO到YOLOv8每次迭代的创新和贡献。我们首先描述了标准指标和后处理;然后,我们讨论了

    2024年02月04日
    浏览(62)
  • 经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构

    实现原版的YOLOv1并没有多大的意义,因此,根据 《YOLO目标检测》(ISBN:9787115627094) 一书,在不脱离YOLOv1的大部分核心理念的前提下,重构一款较新的YOLOv1检测器,来对YOLOV1有更加深刻的认识。 书中源码连接:GitHub - yjh0410/RT-ODLab: YOLO Tutorial 对比原始YOLOV1网络,主要改进点如下:

    2024年02月03日
    浏览(49)
  • 目标检测——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

    什么是目标检测? 滑动窗口(Sliding Window) 滑动窗口的效率问题和改进 滑动窗口的效率问题:计算成本很大 改进思路 1:使用启发式算法替换暴力遍历 例如 R-CNN,Fast R-CNN 中使用 Selective Search 产生提议框 ( 区域提议 ) 依赖外部算法,系统实现复杂,难以联合优化性能 改进

    2024年02月09日
    浏览(41)
  • yolov1详解

    YOLOv1是单阶段目标检测方法,不需要像Faster RCNN这种两阶段目标检测方法一样,需要生成先验框。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测。 整个YOLO目标检测pipeline如上图所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目

    2024年02月06日
    浏览(40)
  • 计算机视觉的应用14-目标检测经典算法之YOLOv1-YOLOv5的模型架构与改进过程详解,便于记忆

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用14-目标检测经典算法之YOLOv1-YOLOv5的模型架构与改进过程详解,便于记忆。YOLO(You Only Look Once)是一种目标检测深度学习模型。想象一下,传统的目标检测方法就像侦探一样,需要仔细观察整个场景,逐个研究每个细

    2024年02月07日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包