首页 > 其他分享 >YOLO系列笔记 · 二 · v1

YOLO系列笔记 · 二 · v1

时间:2024-04-07 09:33:11浏览次数:22  
标签:置信度 预测 YOLOv1 格子 text 物体 YOLO 笔记 v1

YOLO系列笔记 · 二 · v1

YOLO-V1

概述

YOLOv1(You Only Look Once版本1)作为经典的单阶段目标检测算法,其设计理念是将目标检测问题通过卷积神经网络(CNN)转化为回归问题,实现了对视频流的实时检测,并因其应用范围广泛而备受关注。与早期的深度学习网络相比,YOLOv1在模型推理速度上有显著的优势,尽管其平均精度(mAP)不如后来的两阶段(two-stage)网络高,但在速度上仍保持领先地位。
在这里插入图片描述

核心思路

YOLOv1的核心思想在于将输入的图像划分成多个格子(cells / grids),每个格子负责预测落在其中心点的物体。通过对图像中的物体预设若干框,并不断调整这些框的位置(x, y)和大小(w, h),以及计算框与真实物体之间的交并比(IOU)和置信度(confidence),YOLOv1旨在寻找最适合每个物体的框。具体到YOLOv1中,每个格子会初始化两个预测框,通过计算IOU和置信度来筛选非目标格子,这种方式简化了检测流程,提高了处理速度。
思路展示

网络结构

YOLOv1的网络结构设计较为简约,输入层固定接收448x448x3的图像尺寸,这一设计受到网络后期全连接层限制的影响。通过一系列的卷积层提取特征图(feature maps),并经过全连接层处理,YOLOv1最终输出一个7x7x30的结果。这一输出代表将图像分为7x7的格子,每个格子对应30个输出值,包括两个预测框的位置、大小、置信度以及20个可能类别的概率。
在这里插入图片描述

数据结构解释

针对每个格子的30个值,其中10个值(每个预测框5个,共2个框)包含预测框的位置(x, y)、大小(w, h)以及框中物体存在的置信度(c)。剩余的20个值代表了该格子中物体属于20个类别中的哪一个的概率。这种数据结构允许YOLOv1同时对物体的位置和类别进行预测。
数据解释

损失函数

损失函数
YOLOv1的损失函数是其设计中的一个核心要素,因为它直接影响到网络学习的效果,包括如何准确地定位物体和预测其类别。这个损失函数由几个不同的部分组成,用以评估不同类型的预测误差,并通过它们的和来指导模型的训练。以下是损失函数的详细分解和解释:

1. 位置误差(Bounding Box Prediction)

位置误差反映了预测的边界框(bounding boxes)与真实边界框之间的差异。YOLOv1对每个边界框的中心坐标(x, y)和尺寸(w, h)进行预测。误差计算使用的是预测值与真实值之间的平方差。为了平衡不同尺寸物体的影响,对宽度w和高度h的预测使用了平方根,因为较大物体的尺寸误差对损失的贡献应小于较小物体的尺寸误差。这部分的损失函数可以表达为:
λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 + ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ \left( x_i - \hat{x}_i \right)^2 + \left( y_i - \hat{y}_i \right)^2 + \left( \sqrt{w_i} - \sqrt{\hat{w}_i} \right)^2 + \left( \sqrt{h_i} - \sqrt{\hat{h}_i} \right)^2 \right] λcoord​i=0∑S2​j=0∑B​1ijobj​[(xi​−x^i​)2+(yi​−y^​i​)2+(wi​ ​−w^i​ ​)2+(hi​ ​−h^i​ ​)2]

其中, S 2 S^2 S2 表示格子的数量,B是每个格子预测的边界框数量, ( 1 i j obj ) (\mathbb{1}_{ij}^{\text{obj}}) (1ijobj​)是一个指示函数,当第(i)个格子的第(j)个框负责预测某个物体时为1,否则为0。 ( x , y , w , h ) (x, y, w, h) (x,y,w,h)分别是预测的中心坐标和边界框尺寸,而带有帽子的值表示对应的真实值。 λ coord \lambda_{\text{coord}} λcoord​是坐标预测的权重系数,用于增加模型对边界框位置准确性的关注。

2. 置信度误差(Confidence Prediction)

置信度误差考虑了边界框是否包含物体以及边界框的准确性。YOLOv1为每个预测框分配一个置信分数,表示框中含有物体的置信度以及框的准确性(即预测框与真实框的IOU)。损失函数的这一部分区分了包含物体的框和不包含物体的框,给不含物体的框的置信度误差分配了较低的权重:
∑ i = 0 S 2 ∑ j = 0 B [ 1 i j obj ( C i − C ^ i ) 2 + λ noobj 1 i j noobj ( C i − C ^ i ) 2 ] \sum_{i=0}^{S^2} \sum_{j=0}^{B} \left[ \mathbb{1}_{ij}^{\text{obj}} \left( C_i - \hat{C}_i \right)^2 + \lambda_{\text{noobj}} \mathbb{1}_{ij}^{\text{noobj}} \left( C_i - \hat{C}_i \right)^2 \right] i=0∑S2​j=0∑B​[1ijobj​(Ci​−C^i​)2+λnoobj​1ijnoobj​(Ci​−C^i​)2]
其中, C i C_i Ci​是预测的置信度, C ^ i \hat{C}_i C^i​是与真实边界框相比的IOU, 1 i j noobj \mathbb{1}_{ij}^{\text{noobj}} 1ijnoobj​是当没有物体被第 i 个格子的第 j 个框预测时为1的指示函数。 λ noobj \lambda_{\text{noobj}} λnoobj​是非物体置信度的权重系数,减少模型将背景误识别为物体的倾向。

3. 分类误差(Class Prediction)

分类误差衡量了预测的类别分布与真实的类别分布之间的差异,使用的是平方差损失函数。对于每个格子,如果格子中心包含物体,则计算其类别预测的误差:
∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 \sum_{i=0}^{S^2} \mathbb{1}_i^{\text{obj}} \sum_{c \in \text{classes}} \left( p_i(c) - \hat{p}_i(c) \right)^2 i=0∑S2​1iobj​c∈classes∑​(pi​(c)−p^​i​(c))2
其中, p i ( c ) p_i(c) pi​(c) 是格子 i 预测物体属于类别 c 的概率, p ^ i ( c ) \hat{p}_i(c) p^​i​(c)是真实值, 1 i obj \mathbb{1}_i^{\text{obj}} 1iobj​ 是当格子(i)包含物体中心时为1的指示函数。

通过综合这三个部分,YOLOv1的损失函数旨在同时优化位置准确性、置信度以及类别预测的准确性,从而实现高效准确的目标检测。

NMS(非极大值抑制)

在多个预测框重叠的情况下,非极大值抑制(NMS)是一种有效的方法来选择最佳预测框。通过比较重叠框的IOU值,NMS算法能够筛选出与真实物体位置最接近的预测框,从而提高检测的准确性。
在这里插入图片描述

存在的问题

尽管YOLOv1在速度和性能上取得了显著成果,但它在处理高度重合的物体、多标签预测以及对小物体的敏感度方面仍存在局限。特别是,其单一尺寸的预设框难以适应不同大小物体的检测需求,这些问题在后续版本中得到了改进和优化。

标签:置信度,预测,YOLOv1,格子,text,物体,YOLO,笔记,v1
From: https://blog.csdn.net/XISHI_TIANLAN/article/details/137422341

相关文章

  • MCE学习笔记
    MCE学习笔记最小表示法。你说的对,月考考完了,但是感觉基本炸了。/ll/ll,相对失败。艹,写了我一个晚上。\(\frac{3}{20}\),还差的远呢。闲话:MCE是a3叫的,不过感觉挺好听。这个算法出题的话可能就比较板了,所以不是很热门?不废话了。引入定义:循环同构,对于两个字符串\(S\)......
  • SCC学习笔记
    SCC学习笔记好听点的话来说,就是强连通分量。一个有向图,里面任意两个节点之间可以相互到达,我们把它称为一个强连通分量。Kosaraju首先,对于一个强连通的图,显然,他的反图也是一个强连通图。(因为原先\(A\)可以到\(B\),\(B\)可以到\(A\),反过来是一样的)做法是从任意一个点开始,......
  • 生成树学习笔记
    最小生成树学习笔记代码合集很好,这还是一篇复习笔记。考虑这么一个问题,给出一张无向图,有\(n\)个点,\(m\)条边,边有边权,要你找\(n-1\)条边,使得这\(n\)个点联通且边权和最小。Kruskal首先,我们先把边权进行排序,然后贪心的加边,把选的边所带的点加到一个集合里面。如果\(x......
  • 单调栈 and 单调队列学习笔记
    单调栈and单调队列学习笔记本文均以维护单调递增的栈/队列举例。本篇代码合集以后在写动态规划单调队列/单调栈优化的时候,这两个东西会合并。单调栈本质上就是模拟。假设要维护一个单调递增的栈,那么对于一个元素进来了,在栈顶的所有比他小的数我全部都要踢出去,不然就不满足......
  • 并查集学习笔记
    并查集学习笔记本质上还是一个复习笔记。考虑这样一个问题:给出\(x,y\),合并\(x,y\)所在集合。给出\(x,y\),查询\(x,y\)是否在同一集合内。我们把集合当成一棵树,两个点有连边就表示他们在同一个集合内。这棵树的根节点就是这个集合的“老大”,也就是这个集合里面的......
  • Docker学习笔记(三)Dockerfile指令详解
    文章目录FROM指定基础镜像RUN执行命令COPY复制文件ADD高级文件复制CMD容器启动命令ENTRYPOINT入口点ENV设置环境变量ARG构建参数VOLUME定义匿名卷EXPOSE声明端口WORKDIR指定工作目录USER指定当前用户HEALTHCHECK健康检查ONBUILD构建触发器LABEL添加元数据......
  • C语言学习笔记--(2)基础语法
    我先写点,我不太擅长写,所以各位有问题可以评论说,我看到一定改一.C语言编程的格式    我们可以先看一个关于C语言的基础实例下面是一个简单的C语言程序,用于计算购买商品的总价,并根据折扣计算最终支付金额。#include<stdio.h>//计算购买商品的总价floatcalculat......
  • 2-SAT 学习笔记
    2-SAT学习笔记P4782【模板】2-SAT2-SAT问题模型:构造bool变量\(x_1,x_2...x_n\),使得满足一些限制一对\(x_1\)和\(x_2\)取值的条件合法。很显然根据Floyd传递闭包可以做到\(O(n^3+m)\),但不太行。有\(O(n+m)\)的做法,发现对于每个条件是要我们选择一种取值(选择就很......
  • [笔记]数位dp例题及详解(更新中)
    数位dp的定义引自洛谷日报#84:求出在给定区间\([L,R]\)内,符合条件\(f(i)\)的数\(i\)的个数。条件\(f(i)\)一般与数的大小无关,而与数的组成有关。由于是按位dp,数的大小对复杂度的影响很小。由于数位dp状态的上下文信息比较多,所以一般用记忆化搜索实现,而非递推。P4999烦人的数......
  • SpringBoot学习笔记
    SpringBoot一、SpringBoot3介绍1.1SpringBoot3简介课程使用SpringBoot版本:3.0.5https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.introducing-spring-boot到目前为止,你已经学习了多种配置Spring程序的方式。......