yolov1的阅读笔记

一,目标检测简介

二,yolov1网络的输出结果分析

我们首先来看一下yolov1的网络图,如下图所示。
网络图
在yolov1的网络当中,输入的图片的大小为448x448x3,这个在图中也可以很明显的看出来。重点是,输出的7x7x30的输出结果包含哪些信息。首先我们先看一下下面这张图片:
在这里插入图片描述
在图片当中,可以看到,图像被分为7x7的网格,与上面提到的网络输出7x7x30相对应,可以看出每一个网格都包含30个输出参数。接下来我们来讲解一下,这三十个输出参数都代表什么信息。看接下来这张图片:
在这里插入图片描述
在yolov1当中每一个网格都会有两个预测框,每个预测框的位置需要四个参数确定(x,y,w,h),其中x,y是预测框左上角的坐标,w,h为框的宽和高。同时,每个预测框都有一个置信度参数,也就是该预测框内含有目标物体的概率。这样,每个预测框就包含了五个参数,一共是10个参数。在yolov1训练的数据集当中,一共有20个物体类别,每个物体类别有一个概率参数,所以一共是20个参数,这个参数是两个预测框共用的。

所以(2 x 5 + 20)= 30个参数,一共有7x7个网格,所以总结一下就是7x7x30个参数,也就是网络的输出结果。

三,yolov1的预测过程

通过在上一节分析的结果,也就是每个网格有两个预测框,整幅图像就包含7x7x2=98个预测框,显示在图像中就如下图所示:
在这里插入图片描述
图像当中一共有98个预测框(想数一下的小伙伴,可以试一下),下一步的任务就是如何从98个预测框中,提取出实际包含物体的预测框。这里就使用到了非最大值抑制(nonMaximumSuppression),这里简单讲解一下非极大值抑制(需要深入了解的可以查看一下其他教程)。
在这里插入图片描述
在非极大值抑制过程中,第一步就是要将98个预测框按照他们的置信度进行由大到小的排序,假设图中的四个检测框置信度分别0.8,0.7,0.4和0.36。
首先计算将排名第一的检测框与第二名进行交并比计算,交并比公式如下:
随后人为设置一个阈值,只要交并比大于所设阈值,就认为这两个检测框检测的是同一个物体,就删除置信度比较小的检测框。此时就将98个检测框减少为97个检测框。同理继续进行下去,将第一名与第三名进行交并比计算、第一名与第四名进行交并比计算…直到与所有检测框完成对比。
在这里插入图片描述

注意,此时还没有结束,以第一名为对象完成一次循环后,将继续将置信度第二名的检测框与比他置信度小的检测框进行对比,若第二名已经被删除,就顺延到置信度第三名,知道遍历完所有的检测框。这时候就可以将上面含有密密麻麻检测框的图片变成下图所示:
在这里插入图片描述

四,yolov1的训练过程

讲完推理的过程,现在来讲一下训练的过程,在模型结构上最前面贴出的模型结构图很简单,大家应该都能够看懂,这一节讲的重点是损失函数的设计。首先先把损失函数给大家:
在这里插入图片描述
主要可分为五个部分:
(1)负责目标检测的框的中心点定位误差。
(2)负责目标检测的框宽高定位误差。
(3)负责目标检测的框置信度误差。
(4)负责目标检测的框置信度误差。
(5) 负责目标检测的框分类误差。
接下来我们一一讲解

4.1 中心点定位误差

如下图红框标注所示,这一部分就是负责目标检测的框的中心点定位误差,就是中心点的像素距离,需要注意的只有公式中的两个未知数,图中已经给出了解释,就不再重复(其实是我不会用LaTex数学公式,后面有机会补上,也可以在评论里时不时踢我一下)。
在这里插入图片描述

4.2 宽高定位误差

下图中就是宽高误差部分,这一部分很好理解,就是预测框宽高与ground truth的宽高取个差值再各自平方加在一起。这里需要注意的是宽高都取了开平方,这里是为了缓解yolov1的一个缺陷,就是对小目标的物体不敏感。例如一个小目标的预测框和ground truth宽高大小差个好几倍的关系,但是由于小目标本身就比较小,导致求差值的结果也很小,不利于模型的收敛。
在这里插入图片描述

4.3 置信度误差

这里我们将第三行和第四行放在一起看,蓝框标出来的那一部分很容易理解,如果预测框中心落在了实际物体的中心,则希望他的置信度越靠近1越好,反正越靠近0越好。需要注意的是,第四行的公式,前面多了一个参数,这个是在模型的训练开始时,使用者可以自由调节的一个参数,表示你对非准确预测框的重视程度。
在这里插入图片描述

在这里插入图片描述

4.4 分类误差

分类误差就也很容易理解了,就是将前面给出的20个物体的预测概率分别与实际物体的类别做差值取平方,最后再累加。
在这里插入图片描述

五、结论

到这里基本上就结束了,yolov1作为该系列的开山之作,开创了单阶段检测的先河,但是因为是先驱,算法仍然有许多需要缺陷,例如检测精度不是特别高,对小目标物体检测不敏感等等。

### 关于YOLOv1模型复现的笔记与教程 #### YOLOv1概述 YOLOv1(You Only Look Once Version 1)是一种用于实时目标检测的强大算法,其核心优势在于能够一次性完成图像中的多个对象定位和分类任务。该方法采用卷积神经网络直接预测边界及其对应的类别概率[^1]。 #### 端到端训练思想 不同于传统的基于区域建议的目标检测架,YOLOv1实现了真正的端到端训练过程。输入整张图片至单个卷积网络,在输出层同时得到物体位置以及所属类别的信息。这种一体化的设计简化了整个流程,并提高了处理速度[^2]。 #### 编码解码操作 - **Encoder**: 将原始尺寸的输入图像缩放到固定大小(通常是448×448),并通过一系列卷积层提取特征。 - **Decoder**: 利用全连接层或其他机制从这些高级语义特征中恢复出具体的边界坐标及置信度得分等信息。 #### 原理总结 通过划分网格的方式将原图分割成SxS个小格子;每个格子负责预测B个边候选区连同它们各自的最大IoU值作为confidence score;另外还需给出C维的概率分布表示可能存在的各类目存在与否的情况。最终形成一个形状为(S,S,B*5+C)的结果矩阵。 #### 损失函数设计 为了衡量预测结果与真实标签之间的差异程度,定义了一个多部分组成的损失函数: - `object_loss`: 对有目标中心落在当前cell内部的情形下的bbox回归误差求平方和; - `classification_loss`: 针对含有实际物体所在单元格计算交叉熵损失以优化分类准确性; - `confidence_loss`: 考虑所有正样本即ground truth box关联的位置处所对应的责任方格内产生的confidences偏差惩罚项; - `noobject_loss`: 同样针对负样本也就是不含任何有效实例的空间范围施加抑制作用力防止误报现象发生。 #### 训练实践指南 当准备着手实现YOLOv1时,可以遵循如下几个方面来进行开发工作: ##### 数据集准备 选择合适的数据源非常重要,常用的选择包括PASCAL VOC、COCO等公开数据集合。确保下载并解析好相应的标注文件以便后续使用。 ##### 构建PyTorch版本的YOLOv1架构 利用现有的深度学习库如PyTorch快速搭建起相似结构的CNN模型。注意调整参数配置使之匹配论文描述的具体规格要求。 ```python import torch.nn as nn class YOLOv1(nn.Module): def __init__(self, S=7, B=2, C=20): # 默认设置适用于VOC数据集 super(YOLOv1, self).__init__() self.S = S self.B = B self.C = C # 定义基础卷积层和其他组件... def forward(self, x): pass # 实现前向传播逻辑... model = YOLOv1() print(model) ``` ##### 自定义损失函数Loss Function 按照上述提到的不同组成部分编写自定义化的loss function来评估模型性能表现。 ##### 开始训练 加载预处理后的dataset进入dataloader之后就可以调用optimizer配合scheduler逐步迭代更新权重直至收敛满意为止。 ##### 测试验证效果 最后不要忘记在测试集上面检验泛化能力如何,记录下mAP等相关指标数值供进一步分析改进参考之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值