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

YOLO系统——yolov1工作原理

1. YOLOv1 的核心定位与输入输出逻辑

YOLOv1 是首个成功的一阶段目标检测模型,与 R-CNN 等两阶段模型的核心区别在于:它无需先通过区域提议(Region Proposal)生成候选框,而是直接对整幅图像进行一次推理即可完成目标检测。具体而言,YOLOv1 将输入图像均匀划分为 S×S 个网格(如 7×7),每个网格负责检测 “中心落在该网格内” 的目标。训练前,需对标注数据进行预处理,将每个目标的坐标转换为相对于所在网格的归一化值(范围 [0,1]),最终每个目标的真实标签包含:

  • 目标中心相对于网格的偏移量(x,y)
  • 目标宽高相对于整幅图像的比例(w,h)
  • 置信度(confidence,反映目标存在的概率及预测框的准确性)
  • 类别概率(对应数据集中的类别,如 VOC 的 20 类)

模型的输出是一个 S×S×(B×5 + C) 的张量(B 为每个网格预测的边界框数量,YOLOv1 中 B=2;C 为类别数),包含每个网格的 B 个边界框参数(每个框 5 个值:x,y,w,h,confidence)和 C 个类别概率。

2. 模型的网络结构设计

YOLOv1 的网络结构由 24 个卷积层和 2 个全连接层组成,卷积层的核心参数包括:

  • 输入 / 输出通道数:输入通道数与上一层输出匹配(如 RGB 图像初始为 3 通道),输出通道数由人工设定(通常随网络加深递增,如 16→32→64),通道数越多可学习的特征越丰富,但计算量也越大。
  • 卷积核大小、步长、padding:卷积核常用 3×3,通过步长(stride)和填充(padding)控制输出特征图尺寸,计算公式为:out_size = floor((in_size - kernel_size + 2×padding) / stride) + 1 
  • 池化层:通过 2×2 最大池化(步长 2)降低特征图尺寸(如 448→224→112...),既减少计算量,又扩大感受野(单个像素对应原始图像的区域)。

最终通过全连接层将特征映射为 7×7×30 的输出张量(B=2、C=20 时,2×5+20=30)。

3. 模型训练过程

训练过程通过多轮迭代(epochs)优化模型参数,核心步骤包括:

  1. 数据加载:使用 DataLoader 按批次读取图像和标注信息,每个批次包含多张图像及对应的真实标签。
  2. 前向传播:将图像输入模型,得到预测输出(7×7×30 张量)。
  3. 损失计算:通过 YOLO 特有的损失函数计算预测值与真实值的差异,包含三部分:
    • 边界框坐标损失(x,y,w,h 的误差)
    • 置信度损失(目标存在 / 不存在的误差)
    • 类别概率损失(分类误差)
  4. 反向传播与参数更新:通过梯度下降(如 SGD)反向传播损失,更新网络权重,最小化损失值。

训练终止条件通常是固定迭代次数(epochs),或损失值在验证集上连续多轮不再下降(早停策略)。“损失值大于平均损失值时停止” 的表述不准确,因为损失波动是正常的,需结合验证集性能判断。

4. 模型权重的保存

训练结束后,可保存模型的权重参数供后续预测使用。在 PyTorch 中,标准做法是通过 torch.save() 保存状态字典:torch.save(model.state_dict(), 'best.pt')

5. 预测与后处理

使用训练好的模型进行预测时,需对输出张量做后处理,步骤包括:

  1. 解析输出:将 7×7×30 张量转换为每个边界框的绝对坐标(反归一化)、置信度和类别概率。
  2. 置信度过滤:设置置信度阈值(如 0.5),过滤掉低置信度的预测框,减少冗余。
  3. 非极大值抑制(NMS):对同一类别的预测框,计算交并比(IOU),当 IOU 大于阈值(如 0.5)时,保留置信度最高的框,移除重叠的冗余框。
  4. 可视化:在图像上绘制筛选后的边界框,并标注类别和置信度。
http://www.dtcms.com/a/395683.html

相关文章:

  • 第20讲 机器学习中的分类数据
  • 《前端学习总结:GitLab、状态管理、组件库与 Umi.js》
  • 【论文阅读】理解世界还是预测未来?—— 世界模型全面综述
  • AR眼镜:远程协作与精准操作的未来之眼
  • 【论文阅读】GR-2:用于机器人操作的生成式视频-语言-动作模型
  • maven GAVP 的含义
  • 【Android】录制视频
  • RK3576-Android15_Usb白名单功能实现篇二
  • Spring中使用Apache Http客户端调第三方系统接口临时查看请求体参数
  • Linux系统-debian系的软件包管理
  • PCB工艺中的深微孔
  • 关于Pycharm中在运行出现语法错误:Non-UTF-8 code starting with
  • 构建AI智能体:四十一、大模型思维链提示工程:技术原理与行业应用案例分析
  • 鸿蒙系统中音视频的采集与播放
  • HTTPS 双向认证抓包实战,原理、难点、工具与可操作的排查流程
  • 开源跨平台文件管理工具,告别杂乱无章的数据世界
  • Node.js事件循环机制
  • Linux---文件系统
  • 循环语句效率与规范的原理及示例解析
  • Three.js 开发实战教程(四):相机系统全解析与多视角控制
  • 介绍一下SQLite的基本语法和常用命令
  • 台式电脑如何恢复出厂设置?Win10 强制重置详细教程
  • 李宏毅2023机器学习作业 HW02实操
  • 【C++实战㉜】深入C++动态内存分配:从理论到实战的进阶之路
  • 小鼠抗新冠病毒N蛋白IgG亚型抗体ELISA检测试剂盒
  • 安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析
  • C++ 中 size_t 的用(用于跨平台编译)
  • C++ 拷贝构造函数调用时机
  • 手机镜头参数介绍
  • 区块链技术之《(1)—概述》