【目标检测系列】YOLOV1解读

news2024/9/29 19:22:25

前言

从R-CNN到Fast-RCNN,之前的目标检测工作都是分成两阶段,先提供位置信息在进行目标分类,精度很高但无法满足实时检测的要求。

而YoLo将目标检测看作回归问题,输入为一张图片,输出为S*S*(5*B+C)的三维向量。该向量结果既包含位置信息,又包含类别信息。可通过损失函数,将目标检测与分类同时进行,能够满足实时性要求。

接下来给出YOLOV1的网络结构图

核心思想

YOLO将目标检测问题作为回归问题。会将输入图像分为S*S的网格,如果一个物体的中心点落到一个cell中,那么该cell就要负责预测该物体,一个格子只能预测一个物体,同时会生成B个预测框。

对于每个cell:

  • 含有B个预测边界框,这些框大小尺寸等等都随便,只有一个要求,就是生成框的中心点必须在cell中,每个框都有一个置信度分数(confidence score)。这些框的置信度分数反映了该模型对某个框内是否含有目标的置信度,以及它对自己的预测的准确度的估量。

  • 每个cell还预测了C类的条件概率,即每个单元格只存在一组类别概率,而不考虑框B的数量。

  • 每个预测边界框包含5个元素:(x,y,w,h, c) 其中 x,y,w,h表示该框中心位置, c为该框的置信度

  • 不管框B的数量多少,该cell只负责预测一个目标

综上,S*S个网格,每个网格要预测B个bounding box,还要预测C个类。网络输出为S*S*(5*B+C)。 (S*S个网络,每个网络都有B个预测框,每个框又有五个参数,在加上每个网格都有C个类别)

最终的预测特征由边界框位置、边框的置信度得分以及类别概率,即S*S*(5*B+C), 这里是 7*7*(2*5+20)

训练过程

对于一个网络模型,损失函数的目的是要缩小预测值和标签之间的差距。对于YOLOV1网络来说,每个cell含有5*B+C个预测值,我们在训练过程中该如何获得与之对应的label.

这5*B+C个预测值的含义在上面已经给出(S*S个网络,每个网络都有B个预测框,每个框又有五个参数,在加上每个网格都有C个类别),因此我们实际需要给出的label为每个预测框的四个坐标及其置信度,和每个cell对应的类别。

  • 每个预测框的四个坐标(x, y, w, h)的label为该预测框所在cell中目标物体的坐标

  • 每个预测框的置信度c,反映了该模型对某个框内是否含有目标的置信度,以及它对自己的预测的准确度的估量,是让网络学会自我评价候选框的功能。因此它所对应的label计算相对复杂。我们将置信度定义为confidence=Pr(Object) \times IOU_{pred}^{truth}。 Pr(Object)=[0, 1], 如果该单元格内不存在目标(即Pr(Object)=0),则置信度分数为0。 如果单元格内存在目标,即(Pr(Object)=1),我们希望置信度分数等于预测框和真实框之间的交并比(IOU)。

  • 每个cell对应的类别概率C,参数数量与该模型类别数量保持一致,label为one-hot编码。

  • 此外,根据公式推算,我们发现用置信度*某一类别的概率=Pr(Object) \times IOU_{preb}^{truth} \times Pr( classes_i| Object) = IOU_{preb}^{truth} \times Pr(classes_i)即得到了一个特殊的置信度分数,表示每个预测框中具体某个类别的置信度

损失函数

YOLOV1的损失函数被分为坐标损失、置信度损失和网格类别损失三种

坐标损失

​简要介绍下四个坐标(x,y,w,h)的含义,x,y表示预测框中心点坐标,w,h表示预测框的宽高。

l_{ij}^{obj}表示第i个cell中的第j个预测框是否负责检测物体,同一个cell中仅有IOU值最高的一个框会负责检测物体,并约束其坐标

第一行表示中心点的坐标损失,第二行表示宽高的损失,至于为何对宽高加根号,是为了消除大小框不同的影响。

举个例子,以预测框的宽度为例,不加根号的话,若目标框宽为100,预测结果为90,差值为10,误差为10%,损失为(90-100)^2 = 100; 若目标框宽10,预测结果为9,差值为1,误差为10%,损失为(9-10)^2=1。可以看出,同样的预测差值,产生了同样的损失,但是这个差值给大小框带来的误差差了10倍,而如何利用这个损失值去修正误差的话,对大的预测框来说,微调10%,对小的预测框来说,重调100%。

而加了根号之后,若目标框宽为100,预测结果为90,差值为10,误差为10%,损失为0.263;若目标框宽10,预测结果为9,差值为1,误差为10%,损失为0.0263。同样的误差,对于大小框之间的惩罚从原来的百倍差距,降为10倍差距,即提升了对小框的惩罚力度,毕竟对于小的预测框,一点点偏差都会产生很大的影响。(模型对大小框的约束能力能存在十倍差距,是否可以进一步改进)

置信度损失

l_{ij}^{obj}表示第i个cell中的第j个预测框是否负责检测物体, l_{ij}^{noobj}表示第i个cell中的第j个预测框是否不负责检测物体,两个数值含义相反。 表示该预测框的真实置信度,通过上述公式计算得出, 表示模型预测的置信度,此部分损失函数是为了让模型掌握自我评价的能力,为测试过程选择最佳预测框用。

第一行表示负责检测物体的框的置信度损失,第二行表示不负责检测物体的框的置信度损失 (问:两种置信度之间有什么区别)

分类损失

l_i^{obj}表示第i个cell内是否存在目标物体

测试过程

测试过程就非常简单了,对于一次前向传播得到的S * S *B个预测框,根据各个候选框对应的置信度分数,利用非极大值自抑(NMS),最终得到所有预测结果。

非极大值自抑制(NMS):所有预测框,按照置信度分数从大到小排序。第一轮,选择置信度最高的预测框作为基准,然后所有其他预测框按顺序依次计算与基准预测框的IOU值(提前设置一个阈值,当IOU大于这个阈值,则认为两个预测框高度重合,预测的是同一个物体),对于和基准预测框重合的则直接淘汰。一轮结束后,排除上一轮的基准,重新选择新的预测框作为基准重复上述步骤。

缺点

  • 每个cell只能预测一类物体,对于密度大的小物体无法预测

  • 定位损失占比较大(包括坐标损失和置信度损失),致使模型更加侧重定位物体,分类能力相对较弱

  • 测试时,如果同意物体的长宽比发生变化,则难以泛化。


论文链接:You Only Look Once: Unified, Real-Time Object Detection

源码地址:mirrors / alexeyab / darknet

参考内容:【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

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

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

相关文章

PyTorch 微调终极指南:第 2 部分 — 提高模型准确性

一、说明 如今,在训练深度学习模型时,通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型,我们可以利用他们的专业知识并使其适应我们的特定任务,从而节省宝贵的时间和计算资源。本文分为四个部分&…

AI文档识别技术之表格识别 (一)

AI文档识别技术之表格识别(一) 文章目录 文章目录 AI文档识别技术之表格识别(一)1. 表格识别原理介绍1.1 表格类型分类1.2 识别原理 2. 整体识别流程2.1 流程图2.2 图像处理部分大致流程 3. 将表格转换为html与json格式输出3.1 html格式3.2 json格式3.3 表格识别实例 前言 此文…

可靠传输概述——停止-等待协议

基本概念: 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否出现了误码。 此时有: 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做 可靠传输服务&a…

Weblogic未授权远程代码执行漏洞 (CVE-2023-21839)

前言: Weblogic 允许远程用户在未经授权的情况下通过IIOP/T3进行JNDI lookup 操作,当JDK版本过低或本地存在javaSerializedData时,这可能会导致RCE漏洞。 0x00 环境设置 此次实验,我们使用P神的vulhub。启动环境: cd…

Android Studio实现图形验证码

源代码 源代码MainActivity 效果图32行需要修改,不修改会报错:需要常量表达式,我的代码已修改 点击后 MainActivity import static com.example.graphicverificationcode.RxCaptcha.TYPE.NUMBER;import android.annotation.SuppressLint; import android.os.Bundle; impo…

【Terraform学习】保护敏感变量(Terraform配置语言学习)

实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中,单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分,为角色选择可信实体类型: AWS 服务 使用案例:EC2 单击下一步 添加权限:现在,您可以看到…

Sentieon | 每周文献-Multi-omics(多组学)-第九期

多组学系列文章-1 标题(英文): Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题(中文): 基于多组学分析和综合模型…

Java使用String来开发验证码

Java使用String来开发验证码 需求分析代码实现小结Time 需求分析 使用String来开发验证码。 实现随机产生验证码,验证码的每位可能是数字、大写字母、小写字母 根据需求分析,步骤如下: 1.首先,设计一个方法,该方法接收…

细胞——求细胞数量 C++详解

细胞——求细胞数量 C详解 求细胞数量题目描述输入格式输出格式样例样例输入样例输出 提示数据规模与约定 解法代码 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成,数字 1 1 1 到 9 9 9 代表细胞,细胞的定义为沿细胞数字上下左右若还…

产品经理回到三线城市能去干什么?

首先要强调一个重要原则:尽量待在一线城市。我们付出了很多努力,在大城市生活了好几年,如果不能在这里获得成功,真的愿意回到原来的地方吗?我出生在山东农村,家庭条件很普通。自从上大学时,我就…

企业权限管理(二)-环境搭建

环境搭建 项目的基本架构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

Drools用户手册翻译——第四章 Drools规则引擎(十三)复杂事件处理(CEP)会话时钟,事件流和切入点

甩锅声明&#xff1a;本人英语一般&#xff0c;翻译只是为了做个笔记&#xff0c;所以有翻译错误的地方&#xff0c;错就错了&#xff0c;如果你想给我纠正&#xff0c;就给我留言&#xff0c;我会改过来&#xff0c;如果懒得理我&#xff0c;就直接划过即可。 目录 会话时钟…

无货源无技术无专业做跨境电商?Live Market一站式服务助你出海

近年来&#xff0c;我国跨境电商发展取得可喜进展。商务部数据显示&#xff0c;跨境电商货物进出口规模占外贸比重由5年前的不足1%上升到目前的5%左右。越来越多的资本开始重视这一领域&#xff0c;越来越多的玩家开始布局。 然而&#xff0c;对于普通商家来说想要踏足跨境电商…

解决VtsHalLightTargetTest问题

一、问题描述&#xff1a; 二、解决方案&#xff1a; Date: Fri, 14 Jul 2023 11:14:31 0800 Subject: [PATCH] fix: 解决VtsHalLightTargetTest问题Description:依据报错修改代码Self Test:PassChange-Id: Ia0bca62480cd26845b285ae61c3d8264d8555d9a ---diff --git a/aidl/d…

软件开发项目文档清单(多套实际案例)

写在前面&#xff1a; 我花了一些时间整理了这些年从事软件行业以来的文档&#xff0c;将它们分类整理后&#xff0c;电脑瞬间变得更加简洁。我整理了数百份软件开发过程中的常用文档&#xff0c;包括项目计划、立项计划、需求分析、概要设计、详细设计、数据库设计、用户操作手…

mysql不用窗口函数,后面加一列序号

前言 在后端开发中最常用的数据库还是比较稳定的5.8&#xff0c;而窗口函数是只有在mysql8以上才有的&#xff0c;然后在开发中有个需要排序序号的需求&#xff0c;翻找资料&#xff0c;问AI得出结论可以实现。 列出方法 如果你使用的是MySQL 5.7版本&#xff0c;而没有窗口…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理&#xff1f;如果你的组织处理关键或敏感的业务数据&#xff0c;测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%&#xff0c;这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

【雕爷学编程】Arduino动手做(200)---WS2812B幻彩LED灯带6

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

云服务器选什么系统

特网科技是一家领云计算服务提供商&#xff0c;拥有全球性服务&#xff0c;覆盖了超过200个国家和地区&#xff0c;提供多种不同的服务器操作系统&#xff0c;包括常见的Linux和Windows&#xff0c;以及一些非常特殊的OS&#xff0c;如FreeBSD和OpenSUSE。如何选择合适的操作系…

PCB状态字段细分,线程安全问题,加锁,synchronized

补充&#xff1a;之前的线程休眠 sleep &#xff0c;参数是以ms作为单位&#xff0c;但是sleep本身就存在一些误差。sleep(1000),不一定是精确在休眠1000ms&#xff08;线程的调度&#xff0c;也是需要时间的&#xff09; sleep&#xff08;1000&#xff09;的意思是说该线程在…