YOLO学习笔记1. YOLOV1的基本概念

news2024/11/18 19:44:30

YOLO学习笔记1. YOLOV1的基本概念

  • 一、 YOLO简介
  • 二、一些基本概念
    • 1. two-stage和one-stage
    • 2. 指标分析
      • (1)精度的概念
      • (2)召回率的概念
      • (3)IOU
      • (4)置信度阈值
      • (5) mAP
    • 3. 示例
  • 三、YOLOV1网络架构
    • 1. 整体说明
    • 2. 预测边界框和条件类别概率
      • (1) 网格单元(Grid Cell):
      • (2) 边界框预测(Bounding Box Prediction):
      • (3) 条件类别概率(Conditional Class Probability):
    • 3. 预测后处理
      • (1)置信度过滤(Confidence Thresholding):
      • (2) 非极大值抑制(Non-Maximum Suppression,NMS):
      • (3)全概率计算

一、 YOLO简介

YOLO(You Only Look Once)是一种流行的实时目标检测算法,由Joseph Redmon和Ali Farhadi等人开发。

YOLO作为目标检测算法,旨在识别图像中出现的物体以及它们的位置。与其他目标检测算法不同的是,YOLO将整个图像看作一个整体,并使用单个CNN(卷积神经网络)模型直接预测图像中所有物体的类别和位置。这使得YOLO具有更快的速度和更高的实时性,而不需要额外的后处理步骤。

YOLO算法通过在图像上滑动网格来实现目标检测,每个单元格负责预测一组边界框和类别概率。每个边界框由5个值表示,包括中心坐标、宽度、高度和一个表示对象存在的置信度得分。分类概率为每个单元格预测的每个对象类别提供了一个分数。

尽管YOLO在速度和实时性方面表现出色,但也存在一些缺点,如难以检测小目标和位于密集区域的物体。然而,YOLO算法在许多实际应用中已被证明是一种高效、准确的目标检测算法。

二、一些基本概念

1. two-stage和one-stage

two-stage和one-stage都是目标检测算法中常用的概念。

two-stage算法包括两个阶段:区域提取和分类定位。首先,算法会生成一些候选区域,然后对这些区域进行分类和回归,获取最终的目标检测结果。例如,Faster R-CNN就是一种经典的two-stage算法。
在这里插入图片描述

one-stage算法只包括一个阶段,直接对整张图像进行分类和回归得到目标检测结果。相比于two-stage算法,one-stage算法的速度更快,但准确率较低。常见的one-stage算法有SSD和YOLO等。

one-stage图示

2. 指标分析

(1)精度的概念

精度(Precision)是用于评估分类器预测结果的指标之一,表示预测为正例的样本中,真正为正例的比例。

在二分类问题中,我们可以将预测结果分为:

  • 真正例(True Positive,TP):预测为正例且实际为正例的样本数
  • 假正例(False Positive,FP):预测为正例但实际为负例的样本数
  • 真反例(True Negative,TN)
  • 假反例(False Negative,FN):预测为负例但实际为正例的样本数

四种情况。

精度的计算公式如下:
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP

即精度等于真正例的数量除以所有被预测为正例的样本的数量之和。

精度是一个重要的指标,因为它告诉我们分类器正确预测为正例的概率有多大。在某些任务中,例如医学诊断或金融欺诈检测等任务中,准确性至关重要,因此精度通常被用作主要的性能指标。

(2)召回率的概念

在目标检测领域,召回率(recall)也是一个非常重要的指标,它用于衡量目标检测算法的查全率。

在目标检测中,召回率是指算法正确检测到的物体框(true positives,TP)的数量与实际物体框(ground truth,GT)的数量之比。具体来说,如果检测到的物体框与GT的IoU超过了设定的阈值,那么就视为检测成功,否则视为检测失败。召回率计算公式如下:

R e c a l l = T P / ( T P + F N ) Recall = TP / (TP + FN) Recall=TP/(TP+FN)

其中,FN表示未被检测到的GT框的数量,即算法漏检的框数。

在目标检测领域,正确检测到目标非常重要,因为检测到的目标框将被用于后续的目标跟踪、目标识别、行为分析等任务。

一个算法的召回率表示它成功检测到的目标占全部目标的比例,召回率越高,代表算法能够更好地找到目标,具有更高的查全率,对于提高目标检测算法的性能和实用性都是非常有益的。

(3)IOU

IOU(Intersection over Union,交并比)用于评估目标检测算法的准确度,它通过计算预测边界框和真实边界框之间的交集和并集之间的比率来计算的,公式如下:

I O U = 交集面积 / ( 预测框面积 + 真实框面积 − 交集面积 ) IOU = 交集面积 / (预测框面积 + 真实框面积 - 交集面积) IOU=交集面积/(预测框面积+真实框面积交集面积)

在这里插入图片描述

其中:

  • 交集面积是预测框和真实框的重叠部分面积,
  • 预测框面积和真实框面积分别是两个框的面积。

在目标检测中,如果IOU的值大于或等于一个预设的阈值,则预测框被认为是正确的。一般来说,IOU的阈值为0.5或0.6,具体值可以根据具体的任务和数据集进行调整。

(4)置信度阈值

置信度阈值是指在进行物体检测时,对于预测框的置信度(confidence)进行二值化的阈值。只有当预测框的置信度大于等于阈值时,才会被视为有效的检测结果。换句话说,只有当算法非常确信预测框中包含一个目标时,才会将该预测框作为检测结果输出。

在YOLO中,通常先根据置信度阈值筛选出有效的预测框,然后再使用IOU阈值筛选出具有最高置信度的预测框。这样可以有效地提高检测结果的准确性和召回率。

(5) mAP

精度可以通过计算平均精度(mean average precision,mAP)来综合评估模型的性能。mAP是对每个类别计算的平均准确率(AP)的平均值。

mAP越高,说明该类别的检测效果越好。

mAP的计算方法包括以下几个步骤:

  1. 对于每个类别,按照置信度从高到低的顺序排序所有检测结果。
  2. 对于每个检测结果,计算其 Precision-Recall 曲线上每个 Recall 点处的 Precision 值,然后将这些 Precision 值进行插值得到平均精度(AP)。
  3. 对于每个类别,将所有检测结果的 AP 值进行平均,得到该类别的 mAP 值。
  4. 最后,将所有类别的 mAP 值进行平均,得到整个数据集的 mAP 值。

在YOLO中,有函数 calculate_mAP()函数用来计算并输出平均精度mAP及Precision-Recall曲线。

3. 示例

假设:有若干狗的图像数据集。

目标:检测在这些图像中识别狗的数量,并计算算法的精度和召回率。

假设:我们使用了一个算法,在这100张图片中检测出了1000只狗,其中正确识别的狗有800只,而错误的识别有200只。此外,还有400只狗没有被识别到。

我们可以使用以下公式计算TP、FP、Precision和Recall:

  • TP(真正例):算法正确识别为狗的狗的数量,即800只。

  • FP(假正例):算法错误地将非狗的物体识别为狗的数量,即200只。

  • FN(假反例):未被识别出的狗的数量,即400只。

  • Precision(精度):算法正确识别为狗的狗的比例,即:
    P r e c i s i o n = T P T P + F P = 800 800 + 200 = 0.8 Precision=\frac{TP}{TP+FP}=\frac{800}{800+200}=0.8 Precision=TP+FPTP=800+200800=0.8

  • Recall(召回率):实际为狗的狗被正确识别为狗的比例,即:
    R e c a l l = T P T P + F N = 800 800 + 400 = 0.6667 Recall=\frac{TP}{TP+FN}=\frac{800}{800+400}=0.6667 Recall=TP+FNTP=800+400800=0.6667

此算法召回率比较低,意思有很多狗没有检测到,算法有进一步优化的空间。

三、YOLOV1网络架构

1. 整体说明

在这里插入图片描述
YoLo的9层模型:
在这里插入图片描述

YOLOv1的网络架构包括以下几个部分:

  • 输入层:4484483的图像,接受原始图像数据,并将其转化为CNN可以处理的形式。
  • 卷积层:YOLOv1中采用了24个卷积层和2个全连接层,其中卷积层用于从图像中提取特征,全连接层用于将特征映射到物体类别和位置。
  • 池化层:池化层用于对特征图进行下采样,减少特征图的大小,提高计算效率。
  • 特征提取层:特征提取层是YOLOv1的核心组件,它将卷积层和池化层的输出转化为一个特征向量,并且包含了物体类别和位置信息。
  • 全连接层:全连接层用于将特征向量映射到物体类别和位置的预测值。
  • 输出层:输出层输出物体类别和位置的预测值,并计算损失函数,用于优化模型参数。

2. 预测边界框和条件类别概率

(1) 网格单元(Grid Cell):

YOLOv1将输入图像分割为 S × S 的网格单元。每个网格单元负责预测一个或多个边界框,并判断边界框中是否存在目标物体。
网格单元的数量由网络结构和超参数决定。通常情况下,YOLOv1采用 7 × 7 的网格单元。

(2) 边界框预测(Bounding Box Prediction):

每个网格单元预测 B 个边界框,每个边界框由 5 个要素构成:(x, y, w, h, confidence)。
(x, y) 是边界框的中心坐标相对于当前网格单元的位置,并用相对值表示(相对于单元宽度和高度)。
(w, h) 是边界框的宽度和高度相对于整个图像的比例(相对于图像宽度和高度)。
confidence 是边界框中存在目标物体的置信度得分,用于衡量预测的准确性。

(3) 条件类别概率(Conditional Class Probability):

对于每个网格单元和每个边界框,YOLOv1预测 C 个类别的条件概率。
每个类别的条件概率表示在给定边界框存在目标物体的前提下,该边界框属于每个类别的概率。
通常,YOLOv1采用 softmax 函数将原始输出转换为类别概率,确保每个类别概率在 0 到 1 之间,并且所有类别的概率之和为 1。

总结来说,YOLOv1将输入图像划分为网格单元,并为每个网格单元预测边界框和条件类别概率。每个边界框由边界框坐标和置信度组成,表示边界框的位置和预测准确性。条件类别概率用于表示在给定边界框存在目标物体的前提下,边界框属于每个类别的概率。通过这种方式,YOLOv1可以同时进行目标检测和分类,并输出图像中所有目标物体的位置和类别信息。

最后输出 7730 维的张量。

在这里插入图片描述

3. 预测后处理

要把7730维张量变成最后的预测结果。

(1)置信度过滤(Confidence Thresholding):

在预测阶段,YOLO为每个边界框预测一个置信度得分,用于衡量预测的准确性。通常情况下,置信度得分介于0到1之间。
在置信度过滤中,我们通过设定一个阈值,将置信度得分低于阈值的边界框过滤掉。只有得分高于阈值的边界框会被保留下来,表示它们的预测较为可信。

(2) 非极大值抑制(Non-Maximum Suppression,NMS):

非极大值抑制是一种常用的技术,用于减少重叠边界框的数量,以提高检测结果的准确性。
在目标检测中,可能会存在多个边界框预测同一个目标物体。为了消除冗余的边界框,NMS算法会按照置信度得分进行排序,并逐个检查边界框。

对于每个边界框,NMS会计算其与其他边界框的重叠程度(例如,使用交并比IoU)。如果重叠程度超过了设定的阈值,则将该边界框剔除,否则将其保留下来。
通过不断迭代该过程,直到处理完所有边界框,NMS保留的边界框将具有最高的置信度得分,并且彼此之间没有太多重叠。

通过置信度过滤和非极大值抑制,可以剔除置信度较低的边界框并减少重叠的边界框数量,从而得到更准确的目标检测结果。这些后处理步骤有助于提高检测的精度和可靠性,并减少冗余的检测结果。
在这里插入图片描述

(3)全概率计算

  1. 对于每个网格单元和每个边界框,YOLOv1会预测 C 个类别的条件概率,表示在给定边界框存在目标物体的前提下,该边界框属于每个类别的概率。

  2. 在后处理阶段,首先需要对每个边界框的条件类别概率进行归一化,确保每个类别的概率值在0到1之间,且所有类别的概率之和为1。通常会使用 softmax 函数对原始输出进行归一化处理。

  3. 接下来,对于每个网格单元,需要将归一化的条件类别概率乘以预测的边界框的置信度得分。这是因为,置信度得分反映了边界框中存在目标物体的概率,乘以条件类别概率可以得到目标类别的置信度。

在完成上述步骤后,可以得到每个边界框的目标类别概率,即考虑了置信度得分和条件类别概率的综合。这样,每个边界框都会具有针对每个类别的目标概率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成功解决VScode每次只能打开一个文件,即只能打开一个编辑窗口。

成功解决VScode每次只能打开一个文件,即只能打开一个编辑窗口。 解决方案 解决方案 点击文件 --> 首选项 --> 设置 --> 工作台 --> 编辑管理 --> 取消勾选Enable Preview 如下图所示: 下拉,取消勾选Enable Preview

[JVM] 1. 初步认识JVM

核心思想: “Write Once, Run anywhere”. 各种语言通过编译器转换成字节码文件,在JVM上运行。 一、Java虚拟机 Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成…

Netty核心技术十一--用Netty 自己 实现 dubbo RPC

1. RPC基本介绍 RPC(Remote Procedure Call):远程 过程调用,是一个计算机 通信协议。该协议允许运 行于一台计算机的程序调 用另一台计算机的子程序, 而程序员无需额外地为这 个交互作用编程 两个或多个应用程序都分 布在不同的服…

AJAX与axios框架

文章目录 前言案例跨域访问总结❗ 前言 提示:这里可以添加本文要记录的大概内容: 通过 ajax 进行前后端交互 案例 此项目用到了javaweb知识 首先创建JavaWeb项目编写代码: package ajax;import java.io.IOException; import java.util.A…

个人引导页源码带三个按钮可添加

个人引导页源码带三个按钮可添加 简洁优雅引导页

SpingBoot配置文件

普通参数配置 之前用阿里云oss,如果在每一个都程序都写这个 1.代码一旦修改要一个一个改 2.代码复用性低 所以可以配置到springBoot的配置文件来进行对应的读取,这样复用性就高了 赋值Value(和最下面注解功能相同) 在applicat…

淘宝app商品详情原数据API接口【详情页优惠券数据】Python语言示例请求范例,多种语言均支持

首先以Python语言请求示例为介绍 请求示例 # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pip install requests """ from __future__ import print_function import requests # 请求示例 url 默认请求参数已经做U…

密码学学习笔记(十一):哈希函数 - Merkle–Damgård结构

Merkle–Damgrd是一种算法,由Ralph Merkle和Ivan Damgrd提出。它通过迭代调用压缩函数来计算消息的哈希值。 应用 拿SHA-2举例,首先我们需要对需要进行哈希运算的输入做填充,然后将填充后的输入划分为等长的分组,每个分组的长度…

中级课程——SSRF

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言挖掘 前言 挖掘

【网站开发】jq (jquery)实现瀑布流布局

要实现网站瀑布流效果&#xff0c;可以使用HTML、CSS和jquery来完成。下面是一种常见的实现方式&#xff1a; 注意要引入jQuery库。 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…

git下载源码及环境搭建之数据库(二)

学习目标&#xff1a; 数据库 新项目使用 数据库文件 的配置 及相关属性的设置 步骤&#xff1a; 数据库 下图所示为开发时所用数据库 第一步&#xff1a;新建一个数据库 注意&#xff1a; 字符集与排序规则我们应该选择utf-8 相关 选中新创建的表&#xff0c;点击备份—还…

【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Flutter:网络图像缓存插件——cached_network_image

前言 为什么要使用这个插件&#xff0c;有什么用呢&#xff1f;毕竟官方提供了Image.network来进行网络图片加载 Image.network和CachedNetworkImage都可以用于在Flutter中加载网络图片&#xff0c;但它们之间有一些区别。 Image.network是Flutter核心库提供的一个构造函数&…

趣味:关于AI是否具备自我意识的探究方案之一

随着gpt等其他NLP大语言模型的爆火&#xff0c;AI技术再次成为我们谈论的焦点&#xff0c;AI是一种拟人的、能够通过学习和自我优化执行各种任务的技术&#xff0c;关于ai是否具备自我意识的答案很明显是否定的&#xff0c;以下将使用一个例子来论证的观点 1.实验准备 我们将…

收拾屋子找出10年前的三维教程

明天找个带光驱的电脑&#xff0c;打开看看。那会还是刻盘&#xff0c; 那会我还是小鲜肉&#xff0c;只是喜欢PS2游戏。所以才接触到三维软件&#xff0c;可惜没干这行。现在变成中年大叔了&#xff0c;拿出来玩会。 想当初现在e维网&#xff0c;下载最新的教程。后面电驴里…

高并发下保证接口幂等性的常用策略

接口幂等性问题&#xff0c;对于开发人员来说是一个常见的公共问题。这里分享一些我在项目中用到过的一些方法&#xff0c;给有需要的同学们一个参考。 你是否遇到过以下的场景&#xff1a; 在填写form页面表单时&#xff0c;如果前端没做loading或者防抖操作&#xff0c;保存…

松松商城上线“谷歌英文外链“资源,松松软文推出英文站点资源

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 近期&#xff0c;为了丰富资源&#xff0c;松松商城和松松软文迎来了一系列新的更新。松松商城推出了“谷歌外贸站英文"外链资源&#xff0c;而松松软文则上线了英文站点资源&#xff0c;为用…

MURF20100CT-ASEMI快恢复对管MURF20100CT

编辑&#xff1a;ll MURF20100CT-ASEMI快恢复对管MURF20100CT 型号&#xff1a;MURF20100CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 恢复时间&#xff1a;50ns 正向电流&#xff1a;20A 反向耐压&#xff1a;1000V 芯片个数&#xff1a;2 引脚数量&#xff1…

场景图生成——RelTR训练自己的数据集

RelTR训练自己的数据集 省流量省时间版本框的标注关系的标注总的 前言Open Images V6的标注格式RelTR中使用的Open Images V6的数据标注格式具体步骤框的标注生成格式关系三元组的生成格式 结束语参考链接 省流量省时间版本 框的标注 共需要创建4个json标注文件 train.json, …

功能升级,数据同步更便捷!场景化数据同步助您提效60%!

在企业数仓建设初期&#xff0c;为了保障数字化转型的落地效果&#xff0c;需要提供充足的数据资源&#xff0c;除了基础的数据抽取、转换和加载等过程&#xff0c;数据的同步也是重要环节之一。数据同步常用于数仓ODS、ADS层的建设&#xff0c;通过不同数据源的同步&#xff0…