首页 > 其他分享 >YOLOv1

YOLOv1

时间:2025-01-14 10:54:44浏览次数:1  
标签:置信度 边界 YOLOv1 sum 损失 hat

YOLOv1

YOLOv1(You Only Look Once)是一种开创性的目标检测算法,由Joseph Redmon等人在2015年提出。

一、基本原理

  1. 网络结构

    • YOLOv1的网络结构主要基于卷积神经网络(CNN)。它有24个卷积层和2个全连接层。这些卷积层用于提取图像的特征,全连接层用于输出目标的类别概率和位置信息。
    • 其输入是一张固定大小的图像(例如448×448像素),网络会将整个图像划分为S×S个网格(在YOLOv1中S = 7)。每个网格负责预测一定区域内的目标。

    img

  2. 目标检测过程

    • 边界框预测:每个网格单元会预测B个边界框(在YOLOv1中B = 2)以及这些边界框的置信度分数。置信度分数包含两部分,一是这个边界框内含有目标的概率,二是这个边界框预测的准确性。其计算公式为\(Confidence = Pr(Object)×IOU^{truth}_{pred}\),其中\(Pr(Object)\)表示网格单元中是否有目标(有目标为1,无目标为0),\(IOU^{truth}_{pred}\)是预测边界框和真实边界框(Ground - Truth)的交并比。
    • 类别预测:每个网格单元还会预测C个类别概率(在PASCAL VOC数据集上C = 20),这个概率是在这个网格单元包含目标的前提下,目标属于每个类别的概率。最后输出的类别概率是类别预测概率和边界框置信度的乘积。

    img

二、损失函数

  1. 损失函数的构成

    • 在YOLOv1中,损失函数主要由三部分组成:坐标损失(位置损失)、置信度损失和类别损失。其目的是通过最小化损失函数来优化网络的参数,使得预测结果与真实标签(Ground - Truth)尽可能接近。
    • 损失函数的一般形式为

    \[L=\lambda_{coord}\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{obj}\left[(x_{i}-\hat{x}_{i})^{2}+(y_{i}-\hat{y}_{i})^{2}\right]+\lambda_{coord}\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{obj}\left[(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}})^{2}+(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}})^{2}\right]+\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{obj}(C_{i}-\hat{C}_{i})^{2}+\lambda_{noobj}\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{noobj}(C_{i}-\hat{C}_{i})^{2}+\sum_{i = 0}^{S^{2}}\mathbb{1}_{i}^{obj}\sum_{c\in classes}(p_{i}(c)-\hat{p}_{i}(c))^{2} \]

    • 其中,\(S\)是网格数量(在YOLOv1中\(S = 7\)),\(B\)是每个网格预测的边界框数量(\(B = 2\)),\(\mathbb{1}_{ij}^{obj}\)表示第\(i\)个网格的第\(j\)个边界框是否负责预测目标(如果负责为1,否则为0),\(\mathbb{1}_{ij}^{noobj}\)则相反,表示第\(i\)个网格的第\(j\)个边界框是否不负责预测目标,\(\lambda_{coord}\)和\(\lambda_{noobj}\)是权重系数,用于平衡不同类型损失的重要性。
  2. 坐标损失(位置损失)

    • 这部分损失主要用于惩罚预测边界框和真实边界框位置的差异。
    • 对于边界框的中心坐标\((x,y)\),直接计算预测值\((x_{i},\ y_{i})\)和真实值\((\hat{x}_{i},\hat{y}_{i})\)的平方差

    \[\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{obj}\left[(x_{i}-\hat{x}_{i})^{2}+(y_{i}-\hat{y}_{i})^{2}\right] \]

    • 对于边界框的宽和高\((w,h)\),为了缓解大框和小框在尺寸差异上对损失的不同影响,采用了平方根的形式

    \[\lambda_{coord}\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{obj}\left[(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}})^{2}+(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}})^{2}\right] \]

    例如,如果直接使用宽高的平方差,一个大框的位置微小变化可能导致损失值比小框位置较大变化产生的损失值还要小,这种平方根形式可以使得损失函数对不同大小的边界框在位置变化上更公平地进行惩罚。

  3. 置信度损失

    • 置信度损失分为两部分,一部分是包含目标的边界框的置信度损失,另一部分是不包含目标的边界框的置信度损失。
    • 对于包含目标的边界框(\(\mathbb{1}_{ij}^{obj}=1\)),计算预测置信度\(C_{i}\)和真实置信度\(\hat{C}_{i}\)的平方差

    \[\sum_{i = 0}^{S^{2}}\sum_{j = 0}^{B}\mathbb{1}_{ij}^{obj}(C_{i}-\hat{C}_{i})^{2} \]

    真实置信度是通过计算预测边界框和真实边界框的交并比(IOU)得到的。

    • 对于不包含目标的边界框(\(\mathbb{1}_{ij}^{noobj}=1\)),也计算预测置信度和真实置信度(此时真实置信度为0)的平方差,但通过权重系数\(\lambda_{noobj}\)来降低这部分损失的权重,因为在图像中不包含目标的边界框数量通常远多于包含目标的边界框数量,如果不降低权重,这部分损失会主导整个损失函数,使得网络难以收敛。
  4. 类别损失

    • 类别损失用于惩罚预测类别概率和真实类别概率的差异。
    • 只有当一个网格单元包含目标(\(\mathbb{1}_{i}^{obj}=1\))时,才计算类别损失

    \[\sum_{i = 0}^{S^{2}}\mathbb{1}_{i}^{obj}\sum_{c\in classes}(p_{i}(c)-\hat{p}_{i}(c))^{2} \]

    其中\(p_{i}(c)\)是预测的类别概率,\(\hat{p}_{i}(c)\)是真实的类别概率。

三、优点

  1. 速度快
    • 由于YOLOv1将目标检测看作一个回归问题,它能够在一次前向传播过程中同时预测出所有目标的类别和位置,而不像传统方法那样需要对图像进行多区域划分并逐个检测。这种方式使得它在检测速度上有很大优势,能够达到实时检测的要求,例如在Titan X GPU上可以达到45帧/秒的速度。
  2. 端到端训练
    • YOLOv1的整个网络是一个端到端的架构,可以直接使用标注好的图像数据进行训练,不需要像一些传统方法那样分多个阶段进行训练(如先提取特征,再进行分类和回归),简化了训练过程。

四、缺点

  1. 精度较低
    • 相比于一些基于区域提议(Region Proposal)的目标检测算法(如Faster R - CNN),YOLOv1的检测精度稍差。这主要是因为它对小目标的检测效果不好,而且每个网格单元只能预测固定数量的边界框,可能会遗漏一些目标。
    • 例如,在复杂场景中,当多个小目标聚集在一起时,YOLOv1可能无法准确地为每个小目标生成合适的边界框。
  2. 定位不准确
    • 其边界框的定位精度有限,因为它的预测是基于相对简单的网格划分,对于形状不规则的目标或者目标之间相互遮挡的情况,定位的准确性会受到影响。

五、应用场景和影响

  1. 应用场景
    • 实时监控系统:可以用于实时检测监控视频中的行人、车辆等目标,如在智能安防领域。
    • 自动驾驶:辅助车辆检测道路上的其他车辆、行人、交通标志等物体,为自动驾驶系统提供重要的环境感知信息。
  2. 对后续研究的影响
    • YOLOv1的出现为目标检测领域带来了新的思路,后续的YOLO系列算法(如YOLOv2、YOLOv3、YOLOv4等)在其基础上不断改进,提高了检测精度和速度,拓展了目标检测算法的应用范围。

标签:置信度,边界,YOLOv1,sum,损失,hat
From: https://www.cnblogs.com/codersgl-blog/p/18670352

相关文章