当前位置: 首页 > article >正文

卷积神经网络之Yolo详解

YOLO(You Only Look Once)是一个非常流行的目标检测算法,基于卷积神经网络(CNN)进行目标检测的任务。与传统的目标检测算法(如 R-CNN 系列)不同,YOLO 的核心思想是将目标检测问题转化为回归问题,直接从图像中回归出边界框和类别概率,整个过程可以一次性完成,从而实现非常高效的检测。

YOLO的基本原理

YOLO 的工作原理基于全卷积网络(Fully Convolutional Network,FCN),其主要步骤如下:

  1. 输入图像划分网格: YOLO 将输入图像划分为一个 S × S 的网格(通常是 7x7、13x13 等)。每个网格负责预测图像中某一部分的目标。

  2. 每个网格负责预测: 对于每个网格,YOLO 输出一个固定数量的边界框(通常是 2 或 5 个),以及每个边界框的置信度(confidence)和类别概率(class probabilities)。具体来说,YOLO 会输出每个边界框的四个坐标(x, y, w, h)、置信度(表示该边界框包含目标的概率)和每个类别的概率。

  3. 置信度: 置信度表示该边界框是否包含物体,置信度是通过预测框与实际物体位置的重合度(IoU,交并比)来衡量的。置信度由两个部分组成:

    • 目标是否存在的概率
    • 预测框与真实框的重叠程度
  4. 输出向量: 每个网格的输出通常是一个包含多个信息的向量,通常是 [b, c1, c2, ..., cn, p1, p2, ..., pk],其中:

    • b 表示该框的置信度。
    • c1, c2, ..., cn 是每个类别的概率(类别数目是固定的,通常是物体检测问题的类别)。
    • p1, p2, ..., pk 是该框的坐标参数(x, y, w, h)。
  5. 损失函数: YOLO 使用一个综合的损失函数来衡量预测的误差。这个损失函数包括三部分:

    • 位置误差(Localization loss): 用于评估边界框位置的精度,通常使用均方误差(MSE)。
    • 置信度误差(Confidence loss): 衡量目标检测的置信度和真实目标置信度之间的差异。
    • 类别误差(Class loss): 用于评估每个网格预测的类别与真实类别的差异。
  6. 非极大值抑制(NMS,Non-Maximum Suppression): 在YOLO的输出中,可能会有多个重叠的边界框。NMS 用于去除重复的边界框,只保留置信度最高的框。这是目标检测中一个常见的后处理步骤。

YOLO版本演化

YOLO 在多个版本中进行迭代和优化,主要版本包括:

  1. YOLOv1:

    • YOLO 的初始版本,提出了将目标检测问题转化为回归问题的思想。每个网格预测固定数量的边界框和类别概率。
    • 优点:速度快,适用于实时检测。
    • 缺点:精度相对较低,尤其是在小物体检测上。
  2. YOLOv2(Darknet-19):

    • 引入了更深的网络结构,使用了更高分辨率的输入图像,并进行了大量的训练优化。
    • 引入了多尺度训练,使得模型在不同尺寸下都能进行有效的检测。
  3. YOLOv3:

    • YOLOv3 增强了对小物体的检测能力,采用了更深的网络(Darknet-53),并使用了更精细的特征提取方式。
    • 使用了多层特征图来进行预测,进一步提高了小物体的检测精度。
    • 使用了更好的损失函数,采用了 BCE(Binary Cross Entropy)作为分类损失。
  4. YOLOv4:

    • 引入了 CSPDarknet53 作为 backbone,并采用了多种优化手段,如数据增强、剪枝和混合精度训练等。
    • 提供了更好的准确性和速度平衡,适用于更多的应用场景。
  5. YOLOv5:

    • YOLOv5 是由一个社区团队发布的版本,虽然并非原作者的版本,但在实际应用中获得了广泛的认可。
    • 它使用 PyTorch 实现,易于部署,并且具有高效的性能。相较于 YOLOv4,YOLOv5 的推理速度更快,且对小物体检测表现更好。
  6. YOLOv7:

    • 是在 YOLOv4 和 YOLOv5 基础上进一步优化的版本,引入了更多的技术创新,进一步提升了模型的检测精度。

YOLO的优缺点

优点:

  • 速度快: YOLO 是一个非常快速的目标检测算法,可以实时处理视频流。
  • 端到端训练: 由于是回归问题,YOLO 不需要像 R-CNN 系列那样依赖多个步骤,训练过程简洁高效。
  • 高效: 在很多应用中,YOLO 可以提供非常高效的性能和较好的精度。

缺点:

  • 对小物体检测差: YOLO 在检测小物体方面相对较弱,因为它将图像分成了较大的网格,每个网格只能预测有限数量的框。
  • 精度较低: 相比一些更精细的目标检测方法(如 RetinaNet、Faster R-CNN 等),YOLO 的精度稍逊。

YOLO应用场景

YOLO 由于其实时性和高效性,广泛应用于很多需要快速检测的场景,如:

  • 视频监控: 实时检测和跟踪目标。
  • 自动驾驶: 对路面上的行人、车辆等进行实时检测。
  • 无人机检测: 在飞行中对目标进行检测和识别。

好的,下面我将详细介绍 YOLO 的工作原理,并结合一些例子来帮助理解它是如何进行目标检测的。

YOLO的工作原理(更详细)

YOLO 算法的核心思想是将图像的目标检测问题转化为一个回归问题。具体来说,YOLO 通过以下几个步骤来处理图像并进行目标检测。

1. 输入图像划分网格

首先,将输入图像划分成一个 S × S 的网格。例如,假设输入图像是 416x416 的尺寸,将其划分为 13x13 的网格。每个网格负责预测图像中某一区域的物体。

假设网格的每个单元格包含以下信息:

  • 每个网格单元预测 B 个边界框(bounding boxes),每个边界框包含 4 个坐标参数(x, y, w, h),分别表示边界框的中心位置、宽度和高度。
  • 每个边界框还会预测一个 置信度(Confidence),表示边界框包含物体的概率以及该边界框与真实框的重叠程度(IoU)。
  • 每个网格还预测每个类别的概率。假设有 C 类物体,每个网格单元输出 C 个概率值,表示该区域是每个类别的可能性。
2. 每个网格的输出

对于每个网格单元,它会输出以下信息:

  • B 个边界框,每个边界框包括:4个坐标 (x, y, w, h)、1个置信度值。
  • C 个类别概率。

假设我们有一个 13x13 的网格,B = 2(每个网格单元预测2个边界框),C = 80(80个类别)。则每个网格单元的输出是一个长度为 (B * 5 + C) 的向量,其中:

  • 每个边界框包含5个元素:x, y, w, h(坐标),置信度。
  • C 个类别的概率。

因此,每个网格单元的输出向量长度为:2 * 5 + 80 = 90。每个网格单元输出的向量长度就是 90,这意味着每个网格单元都要输出 2个边界框 的信息、每个边界框的 5个参数(坐标和置信度)以及 80个类别概率

3. 目标检测输出

YOLO 会对所有网格单元的输出进行合并,得到最终的检测结果。对于每个网格单元,它预测的边界框可能会有很大的重叠,因此需要采用 非极大值抑制(NMS) 进行处理,去掉重复的框,只保留置信度最高的框。

4. 损失函数

YOLO 使用一个复合损失函数来训练模型,包括以下几部分:

  • 位置损失(Localization Loss):用来衡量预测框和真实框之间的差异,通常使用均方误差(MSE)来计算框的位置(x, y, w, h)。
  • 置信度损失(Confidence Loss):衡量预测框的置信度和真实框之间的误差。
  • 类别损失(Class Loss):计算每个网格单元预测的类别概率和真实类别之间的差异,通常使用交叉熵损失(Cross-Entropy)来度量。

最终的损失函数是位置损失、置信度损失和类别损失的加权和。

举个例子(假设目标检测场景:监控视频中的人物检测)

假设你在监控视频中应用 YOLO 来检测人物目标。你的输入是一个 416x416 的图像(如视频的一帧),YOLO 会将该图像划分为 13x13 的网格。每个网格单元的任务是检测其对应区域是否含有目标(例如行人)。

步骤:
  1. 网格划分:假设图像被划分为 13x13 的网格,每个网格单元大小大约是 32x32 像素。
  2. 边界框预测:每个网格单元预测 2 个边界框,输出每个边界框的坐标(x, y, w, h)和置信度(confidence)。
  3. 类别预测:每个网格单元还会预测该区域内可能含有的类别(如“人物”)。
  4. NMS处理:由于某些边界框可能会有较大的重叠,YOLO 会使用 NMS 去除冗余的边界框,只保留置信度最高的框。

假设某个网格单元检测到有行人并且预测了一个边界框:

  • 预测框的位置为 (x, y) = (0.5, 0.5),宽高为 (w, h) = (0.3, 0.6)(相对于图像大小)。
  • 置信度为 0.9(表示该框包含物体的概率)。
  • 类别概率为:人物(prob = 0.8),车(prob = 0.1),狗(prob = 0.05)等。

最终,YOLO 会通过 NMS 处理去除重复的框,保留置信度较高的框。

YOLO 及其他目标检测算法中,交并比(Intersection over Union,IoU)、置信度(Confidence)、精确率(Precision)和召回率(Recall)是评估模型性能的重要指标。理解这些概念对于提升目标检测模型的效果以及分析检测结果至关重要。

1. 交并比(IoU, Intersection over Union)

交并比(IoU)是衡量预测边界框与真实边界框重叠度的指标。它的计算公式如下:

IoU=预测框∩真实框/预测框∪真实框​

其中:

  • 预测框是模型预测的边界框。
  • 真实框是实际标注的边界框。
  • 交集(Intersection):指预测框和真实框重叠的区域。
  • 并集(Union):指预测框和真实框的总面积,即它们的并集区域。
例子:

假设预测框和真实框分别为:

  • 预测框的坐标为 (x1, y1, w1, h1),真实框的坐标为 (x2, y2, w2, h2)
  • 交集区域是预测框和真实框的重叠部分,计算交集区域的面积。
  • 并集区域是预测框和真实框的联合区域,计算并集区域的面积。

IoU 越大,表示预测框与真实框越接近,检测效果越好。通常,我们会设置一个 IoU 阈值(比如 0.5),如果预测框与真实框的 IoU 大于该阈值,则认为是 正样本(检测成功);如果 IoU 小于阈值,则认为是 负样本(检测失败)。

IoU 的常见应用:
  • 目标检测的评估标准:例如,在 COCO 数据集上进行评估时,通常使用 mAP(mean Average Precision),其计算过程中依赖于 IoU 来判断每个预测框是否为 TP(True Positive)
  • 非极大值抑制(NMS):在 YOLO 中,使用 IoU 来去除重复的边界框,保留最有可能是目标的框。

2. 置信度(Confidence)

置信度模型对其预测框包含物体的程度的信心,它反映了该框的 预测准确度。对于 YOLO 算法来说,置信度由两个部分组成:

  • 物体存在的概率:表示预测框包含目标物体的概率。
  • 预测框与真实框的重叠度:通常是通过 IoU 来衡量。

具体来说,YOLO 的每个预测框都会输出一个置信度值,该值表示框内存在物体的可能性以及预测框和真实框的重叠度。例如,在进行目标检测时,如果模型预测某个框包含物体,并且该框与真实框的 IoU 很高,则置信度值会很高。

置信度公式:

Confidence=P(Object)×IoU

其中:

  • P(Object) 是该框包含目标的概率。
  • IoU 是预测框与真实框的交并比。

置信度较高的预测框会被认为更加可信,并且模型会优先选择这些框用于最终检测。

3. 精确率(Precision)

精确率是衡量模型检测结果中有多少是正确的,即 正确预测的正样本占所有预测为正样本的比例。它的计算公式为:

Precision=TP/(TP+FP)

其中:

  • TP(True Positive):真正例,指模型正确预测为目标的边界框。
  • FP(False Positive)假正例,指模型错误地预测为目标的边界框(即实际上没有目标的地方被预测为有目标)。

精确率的提高意味着模型能够更好地减少误报,确保模型预测为目标的框是真正的目标。

精确率举例:
  • 假设模型预测了 10 个框,其中 7 个框是正确的(TP),3 个框是错误的(FP)。
  • 那么,精确率就是 7/(7+3)=0.7,即 70% 的预测为正样本的框是正确的。

4. 召回率(Recall)

召回率是衡量模型检测出的目标的 完整性,即 正确检测出的正样本占所有真实正样本的比例。它的计算公式为:

Recall=TP/(TP+FN)

其中:

  • TP(True Positive):真正例,指模型正确预测为目标的边界框。
  • FN(False Negative):假负例,指模型没有检测到的实际目标(即实际上有目标的地方被预测为没有目标)。

召回率的提高意味着模型能检测到更多的目标,减少漏检。

召回率举例:
  • 假设有 10 个真实目标,其中模型正确检测到了 6 个目标(TP),漏检了 4 个目标(FN)。
  • 那么,召回率就是 6/6+4=0.6,即模型检测到了 60% 的目标。

5. 精确率与召回率的权衡

精确率和召回率通常是 相互对立的

  • 提高精确率通常会降低召回率,因为当我们更加严格地判断框是否为正样本时,可能会漏掉一些真实的目标(增加 FN)。
  • 提高召回率通常会降低精确率,因为当我们降低判断标准,预测框变得更加宽松时,可能会增加误报(增加 FP)。

6. F1-Score

为了综合考虑精确率和召回率,通常会使用 F1-Score,它是精确率和召回率的调和平均数,公式如下:

F1-Score=2×Precision×Recall/Precision+Recall

F1-Score 是平衡精确率和召回率的一种方式,尤其在数据集存在类不平衡时,F1-Score 比单独考虑精确率或召回率更加重要。

7. 实际应用示例

假设你正在使用 YOLO 进行目标检测,评估一个图像上的目标检测结果。假设检测结果如下:

  • 真实目标:有 5 个目标(例如 5 个行人)。
  • 预测结果:模型预测了 6 个框,其中 3 个框正确地检测到了行人(TP),2 个框是误报(FP),1 个行人被漏检(FN)。

计算:

  • 精确率 = TP/TP+FP=33+2=0.6
  • 召回率 = TP/TP+FN=33+1=0.75
  • F1-Score = 2×0.6×0.750.6+0.75=0.67

总结

  • IoU 用于衡量预测框与真实框的重叠程度,是目标检测中的基础评估指标。
  • 置信度 反映了模型对于其预测框包含物体的信心。
  • 精确率 衡量了预测为目标的框中,实际是目标的比例。
  • 召回率 衡量了模型能够找到的真实目标的比例。
  • 精确率召回率 之间通常存在权衡,需要根据实际需求选择合适的指标。

读到这里大家可能对tp tn fp fn仍有疑问,不要着急下面更详细的来了:

在机器学习和目标检测中,TPFPTNFN 是用来衡量模型性能的四个基本概念,它们主要用于评估分类任务的准确性。理解这些概念有助于我们评估模型的效果,特别是在二分类任务(如物体检测)中。

1. TP(True Positive)——真正例

真正例(True Positive)表示 模型正确地预测了正类(即预测结果为正类,且实际也为正类)。

例子:
  • 在目标检测中,如果某个图像中实际存在一个行人,且模型正确地识别出了该行人并且预测框与真实框的IoU大于阈值,则该检测为 TP
  • 在二分类问题中,假设我们要预测邮件是否为垃圾邮件,若模型预测该邮件为垃圾邮件,并且该邮件确实是垃圾邮件,那么这就是一个 TP

2. FP(False Positive)——假正例

假正例(False Positive)表示 模型错误地预测为正类(即模型将负类预测为正类)。

例子:
  • 在目标检测中,如果图像中并没有行人,但模型仍然预测出一个边界框,并且错误地标记为行人,则该检测为 FP
  • 在二分类任务中,如果模型将非垃圾邮件错误地预测为垃圾邮件,则为 FP

3. TN(True Negative)——真负例

真负例(True Negative)表示 模型正确地预测了负类(即模型预测结果为负类,且实际也是负类)。

例子:
  • 在目标检测中,如果图像中没有任何目标(例如没有行人),并且模型正确地没有预测任何目标,那么这就是 TN
  • 在二分类任务中,如果模型正确地预测邮件不是垃圾邮件(即负类),则为 TN

4. FN(False Negative)——假负例

假负例(False Negative)表示 模型错误地预测为负类(即模型将正类预测为负类)。

例子:
  • 在目标检测中,如果图像中有行人,但模型没有检测到任何目标,或者检测到了一个错误的框而没有覆盖行人,这就是 FN
  • 在二分类任务中,如果模型将垃圾邮件错误地预测为非垃圾邮件,则为 FN

总结表格

类别预测结果实际类别说明
TP正类正类模型正确预测为正类(真正例)。
FP正类负类模型错误预测为正类(假正例)。
TN负类负类模型正确预测为负类(真负例)。
FN负类正类模型错误预测为负类(假负例)。

评估指标

基于 TP、FP、TN、FN,我们可以计算多种评估模型性能的指标,以下是几个常见的:

  1. 精确率(Precision)
    精确率是模型预测为正类的样本中,实际为正类的比例。
    公式:

    Precision=TP/TP+FP

    精确率衡量的是模型的预测结果是否可靠。

  2. 召回率(Recall)
    召回率是实际为正类的样本中,模型成功预测为正类的比例。
    公式:

    Recall=TP/TP+FN​

    召回率衡量的是模型是否能够识别出所有的正类。

  3. 准确率(Accuracy)
    准确率是模型正确预测的比例,即真正例和真负例占所有预测的比例。
    公式:

    Accuracy=TP+TN/TP+FP+TN+FN​

    准确率是最直观的指标,但在类不平衡问题中可能不太可靠。

  4. F1-Score
    F1-Score 是精确率和召回率的调和平均数,用于综合评估模型的性能。
    公式:

    F1-Score=2×Precision×Recall/Precision+Recall

    F1-Score 是在精确率和召回率之间找到一个平衡,特别适用于需要平衡两者的任务。

举个例子

假设我们有一个二分类问题(例如判断邮件是否是垃圾邮件):

  • 实际情况:
  • 共有 100 封邮件,其中 30 封是 垃圾邮件(positive),70 封是 正常邮件(negative)。
  • 模型预测:
  • 模型预测了 40 封邮件为垃圾邮件,其中 25 封是正确的垃圾邮件(True Positive (TP)),15 封是错误预测为垃圾邮件的正常邮件(False Positive (FP))。
  • 模型还预测了 60 封邮件为正常邮件,其中 5 封是漏掉的垃圾邮件(False Negative (FN)),55 封是正常邮件(True Negative (TN)

我们可以根据这些信息计算 TP、FP、TN、FN,以及精确率、召回率和 F1-Score。

计算:
  • TP = 25(正确识别的垃圾邮件)

  • FP = 15(错误识别为垃圾邮件的正常邮件)

  • TN = 55(正确识别的正常邮件)

  • FN = 5(漏掉的垃圾邮件)

  • 精确率 = 25/25+15​=0.625

  • 召回率 = 25/25+5=0.833

  • 准确率 = 25+65/25+15+55+5=0.8

  • F1-Score = 2×0.625×0.8330.625+0.833=0.7142 

从这些指标中,我们可以了解到模型在识别垃圾邮件方面的表现,并根据这些信息对模型进行优化。

结论

  • TP、FP、TN 和 FN 是用于评估分类任务中模型表现的基本概念,它们分别代表正确预测正类、错误预测为正类、正确预测负类和错误预测为负类。
  • 通过这些量,可以计算出多个评估指标,如精确率、召回率、准确率和 F1-Score,帮助我们更全面地了解模型的性能,尤其是在类不平衡的情况下,精确率和召回率往往更能反映模型的实际效果。

http://www.kler.cn/a/401692.html

相关文章:

  • 小鹏汽车嵌入式面试题及参考答案
  • Pytest 学习 @allure.severity 标记用例级别的使用
  • Android CPU核分配关联进程
  • 【第七节】在RadAsm中使用OllyDBG调试器
  • 移动应用开发:使用Android Studio 实现登录页与注册页跳转
  • 天童美语:下元节将至
  • Kotlin的data class
  • JSP是如何被执行的?
  • LabVIEW多通道面阵烟雾透过率测试系统
  • VSCode自定义插件创建教程
  • 软间隔支持向量机支持向量的情况以及点的各种情况
  • Java集合分页
  • uni-app快速入门(十二)--常用API(中)
  • 【Vim/Vi/Gvim操作】:列操作
  • SpringcloudAlibaba详解---超详细
  • 无人机侦察打击方案(2)
  • vue2中使用three.js步骤
  • 微服务网关聚合swagger(knife4j版本)
  • 【环境配置】ubuntu-jetson上的定时任务
  • STM32设计井下瓦斯检测联网WIFI加Zigbee多路节点协调器传输-分享
  • 【Qt】使用QString的toLocal8Bit()导致的问题
  • 【Linux学习】【Ubuntu入门】1-6 ubuntu文件系统结构
  • 使用 Elasticsearch 构建食谱搜索(二)
  • 微信小程序申请getlocation权限
  • 【视频讲解】Python深度神经网络DNNs-K-Means(K-均值)聚类方法在MNIST等数据可视化对比分析...
  • 同向双指针