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

YOLO系列基础(六)YOLOv1原理详解,清晰明了!

系列文章地址

YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客

YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客

YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客

YOLO系列基础(四)归一化层(BN层)的前世今生!-CSDN博客

YOLO系列基础(五)从神经元共适应性到模型Dropout层-CSDN博客

YOLO系列基础(六)YOLOv1原理详解原理如此清晰-CSDN博客

目录

系列文章地址

背景

YOLOv1的网络结构

YOLOv1原理的高层级理解

YOLO算法流程

YOLOv1原理详解

YOLOv1网格详解

针对每一个grid_cell

输出结构内容详解

YOLOv1损失函数详解

第一行损失函数详解

第二行损失函数详解

第三、四行损失函数详解

第五行损失函数详解


背景

        随着YOLOv11版本的发布,YOLO算法在视觉检测领域独领风骚,本系列旨在从小白出发,给大家讲解清楚视觉检测算法的前世今生,并讲清楚YOLOv11版本算法的所有模块功能!

        经过前面几个栏目的学习与掌握,我们已经具备理解和掌握YOLOv1的基本能力。今天,我们来精讲YOLOv1的原理!

YOLOv1的网络结构

YOLOv1网络结构图

YOLOv1的网络结构图很简单,主要的需要注意的点如下:

  • 输入图像大小为448*448。
  • 经过若干个卷积层与池化(具体是24个卷积层和4个最大池化层),变为7*7*1024张量(图一中倒数第三个立方体)。
  • 最后经过两层全连接层,输出张量维度为7*7*30。
  • 在第一个连接层之后,还有一层dropout层,其丢弃率设置为0.5。
  • 除了最后一层使用了线性激活函数外,其余层的激活函数为 Leaky ReLU

        这就是Yolo v1的整个神经网络结构。没有BN层等后续复杂的层级结构,在那个年代,神经网络还很清晰单纯……

        下图为整个结构图的说明解释,官方给的图有点容易让人混淆了,特别是上面的立方体和下面的层不对应……也是有点无语了……

YOLOv1原理的高层级理解

        如果一上来就把原理揉碎了开始长篇大论,个人感觉效果会很不好,听者也会云里雾里。所以我们先从YOLOv1的高层级理解开始,先给自己一个大致的感觉~

        YOLOv1网络将输入的图片resize成480*480之后,再把这个图片分割为7*7的格网(也称grid_cell),如下图所示。想必大家都已经看腻下面的图片了吧(笑)。在代码中,下图的 S = 7。

        在该图片中,假设我们需要检测狗、自行车、和白车。我人工标注了一下三个检测框和中心点。白色框框选狗,白色小圆圈标记框的中心点,以此类推……

YOLO算法流程

  • 首先获取每一个检测框的中心点,也就是上图中的白色、红色、蓝色圆圈坐标。
  • 获取到坐标之后,该坐标点对应的grid_cell(也就是对应的格子)就需要负责该类别的检测,一共需要获取三个内容(中心点坐标、检测框坐标、类别ID)
  • YOLO的训练策略为:非中心点所在的cell需要极力让自己格子内检测框的置信度C降低,中心点所在的cell则需要让自己的检测框的置信度上升、中心点的坐标和检测框的IoU要极力去拟合,当然还有类别的概率。

也就是说,无论是检测中心点还是检测框,都是由中心点所在的cell来预测的,和其他的cell没有任何关系。但是每个cell都需要进行中心点、检测框、类别的预测,然后在训练过程中,将预测置信度不断提高(有物体) or 降低(无物体)!

显然,以cell为检测单位,导致每一个cell仅能针对一个类别进行预测,若两个类别的中心点位同一个cell,那么YOLOv1就会直接开摆~

有了上诉的一些概念,我们进行原理详解与论文精读

YOLOv1原理详解

传统的视觉识别算法分两步走:

  1. 检测中心和检测框的回归问题
  2. 目标对象的分类问题

        在YOLO中,我们把对象的分类问题也看成回归问题去解决,使得整个网络大为精简(端到端直接全部输出类别、检测框……)

YOLOv1网格详解

        我们已知YOLO会将输入图像分成S×S(其中S=7)的网格,如果一个物体的中心点落入到一个cell中,那么该cell就要负责预测该物体,一个格子只能预测一个物体,并生成B个检测框(其中B=2,意味着每次检测都会尝试两次)。

针对每一个grid_cell

  • 我们会输出B个(B=2)检测框,大小、高度都无所谓,但是检测框的中心点坐标一定是落于该cell内的
  • 我们针对每一个检测框,都会输出检测框的置信度,代表该处存在物体的可能性以及IoU

注意,每一个检测框的置信度是由该处存在物体的可能性和检测框的IoU决定的,公式如下:

confidence=P(Object)×IOU_{truth}^{pred}

P(Object) :表示预测框内存在物体的概率

IOU_{truth}^{pred}    :表示预测框与真实框之间的交并比。

  • 所以每个检测框包含5个元素(x,y,w,h,c)分别代表中心点坐标(x,y),检测框大小(w,h)以及置信度。每个格子一共两个检测框,所以一共有10个值输出。

 图例如下

   

 注意,上面的x,y,w,h均是归一化到(0,1)的值,和整个图像大小之间进行归一化。有的博主认为中心点坐标xy是和网格cell之间的偏移量进行归一化,但是私以为,应该还是和原图像进行的归一化。

(若有错漏请指正

输出结构内容详解

        我们已知YOLOv1的输出结构为7*7*30,这里的7*7指的是输出特征的大小,是由原图像(480*480)通过4层最大池化层和一层卷积层(步长均为2)来进行缩减的,也就是说每一个格子,对应64*64的原像素区域。

        在YOLOv1的官方示例中,官方采用了20种标签来进行训练。由于YOLOv1采用回归的方式解决分类问题,所以输出的结果还有该网格中所有类别的分类置信度(一共20个)。

        所以输出结构就很清晰了:

  • 7*7代表7*7的格子
  • 30代表两个检测框的(x,y,w,h,c)和20个类别的分类置信度

举个例子,以下就是30的含义:

第一个检测框第二个检测框所有类别的置信度
x1y1w1h1c1x2y2w2h2c2cls1cls2……cls19cls20

  

至此,YOLOv1的输出结构已经说明完毕。

到此为止,YOLOv1的网络结构都已经解构完成,我们只缺损失值的计算。

YOLOv1损失函数详解

直接先给出YOLOv1损失函数!

  

看着头晕晕?没关系,其实很简单!我们一行行来:

第一行损失函数详解

\lambda _{coord}\sum_{i=0}^{s^{2}}\sum_{j=0}^{B}\mathbb{I}_{ij}^{obj}[(x_{i}-\hat{x}_{i})^{2}-(y_{i}-\hat{y}_{i})^{2}] 

这一行主要是针对中心点进行差距损失的计算。

  • 其中\lambda _{coord}(等于5)是一个参数,暂时没啥特别的(后面详解)
  • \sum_{i=0}^{s^{2}}用以遍历所有的格子
  • \sum_{j=0}^{B}用以遍历每一个格子中的检测框

以我们普遍的理念看来,假设我们需要针对中心点进行拟合,我们能想出来的损失函数应当如下所示:

\lambda _{coord}\sum_{i=0}^{s^{2}}\sum_{j=0}^{B}[(x_{i}-\hat{x}_{i})^{2}-(y_{i}-\hat{y}_{i})^{2}]

这是我们好理解的,可是剩下的 \mathbb{I}_{ij}^{obj} 是个什么东西??

  1. 这表明在第 i 个格子存在待测物体的中心点。
  2. 且单元i中的第j个边界框预测器“负责”该预测。

这个部分最重要的就是确保该检测框正确召回了物体!也就是说确保该检测框检测出了待测物体,尽管可能IOU不高、类别不精准。

大家可以想象,若没有这个条件约束,后面的计算就毫无意义。 

第二行损失函数详解

\lambda _{coord}\sum_{i=0}^{s^{2}}\sum_{j=0}^{B}\mathbb{I}_{ij}^{obj}[(w_{i}-\hat{w}_{i})^{2}-(h_{i}-\hat{h}_{i})^{2}]

简单,和第一行一样,这次计算的是检测框宽和高的损失。

第三、四行损失函数详解

\sum_{i=0}^{s^{2}}\sum_{j=0}^{B}\mathbb{I}_{ij}^{obj}[(c_{i}-\hat{c}_{i})^{2}] + \lambda _{noobj}\sum_{i=0}^{s^{2}}\sum_{j=0}^{B}\mathbb{I}_{ij}^{noobj}[(c_{i}-\hat{c}_{i})^{2}]

此为检测框置信度的损失值计算,但是这里出现了\lambda _{noobj} 和 \mathbb{I}_{ij}^{noobj} 这是为什么呢?实际上,\mathbb{I}_{ij}^{noobj}和上面的\mathbb{I}_{ij}^{obj}含义刚好相反,\mathbb{I}_{ij}^{obj}表示该检测框成功召回了物体,\mathbb{I}_{ij}^{noobj}则表示该检测框没有召回物体。显然这里的损失函数的两面的:

  • 针对成功召回的检测框,我们需要计算检测框和目标检测框的IOU之间的差距来表示损失值。
  • 针对没有召回的检测框,此时的目标置信度为0,我们需要将这些失败的检测框的置信度下降。

第五行损失函数详解

\sum_{i=0}^{s^{2}}\mathbb{I}_{i}^{obj}\sum_{c \in classes}(p_{i}(c)-\hat{p_{i}}(c))^{2}

显然,这里的意思就是:

遍历所有的检测框,如果检测框内存在目标物体的中心点,则针对该检测框内的分类结果对所有的类别的目标进行损失的计算并求和。

至此YOLOv1的全部内容详解完毕!

总结

YOLOv1虽然已经是将近10年前的算法了,但是作为目标检测之王的初代版本,依旧有很多可以学习和借鉴的内容,实际上,博主光是准备此篇博客就花费了整整两天的时间。恳请广大读者不要吝啬手中的点赞哦!

相关文章:

YOLO系列基础(六)YOLOv1原理详解,清晰明了!

系列文章地址 YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客 YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客 YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客 YOLO系列基础…...

LeetCode100之环形链表(141)--Java

1.问题描述 给你一个链表的头节点 head ,判断链表中是否有环 示例1 输入:head [3,2,0,-4], pos 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点 示例2 输入:head [1,2], pos 0 输出&#xf…...

【ict基础软件赛道】真题-50%openEuler

以下哪个命令可用于查看当前shell的后台任务在openeuler中哪个符号用于创建后台执行进程在openeuler中使用哪个命令查看软件包的详细信息在openeuler中如果想要查看本机的主机名可以使用下面哪个命令在openeuler中使用的包管理器是在openeuler系统中要配置防火墙以允许ssh连接应…...

<AI 学习> 下载 Stable Diffusions via Windows OS

注意: 不能使用 网络路径 不再支持 HTTPS 登录,需要 Token 1. 获得合法的授权 Stability AI License — Stability AI 上面的链接打开,去申请 许可 2. 拥有 HuggingFace 账号 注册:https://huggingface.co/ 3. 配置 Tok…...

计算机图形学在游戏开发中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机图形学在游戏开发中的应用 计算机图形学在游戏开发中的应用 计算机图形学在游戏开发中的应用 引言 计算机图形学的基本概念…...

【CubeMX-HAL库】STM32H743II——SDRAM配置所遇问题

推荐的博客和视频: 1、【CubeMX-HAL库】STM32H743—FMC配置SDRAM_stm32h743 sdram 速度-CSDN博客 2、【【STM32CubeMX教程】STM32全外设原理、配置和常用HAL、LL库API使用详解】 3、在百度网盘里有STM32H743的例程:【通过网盘分享的文件:S…...

mac上使用docker搭建gitlab

在 Mac 上搭建 GitLab 可以使用 Docker 来简化安装过程 一、安装详细步骤 1. 安装 Docker 如果你尚未安装 Docker,可以通过以下步骤安装: 下载并安装 Docker Desktop for Mac.安装完成后,启动 Docker Desktop,确保 Docker 运行…...

二维数组操作

代码结构 main.c #include <stdio.h> #include <stdlib.h>#define LEN 100int main() {//通过指针引用多维数组# if 1//定义多维数组int a[3][5] {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};int row sizeof(a) /sizeof(a[0]);int colum sizeof(a[0]) / sizeof(a[0…...

uniapp设置tabBar高斯模糊并设置tabBar高度占位

1、设置tabBar高斯模糊 2、设置tabBar高度占位 &#xff08;1&#xff09;需要先在App.vue中获取一下 uni.getSystemInfoSync().windowBottom; //返回值是tabBar的高度&#xff08;2&#xff09;在app.vue中定义一个全局样式 3、在需要的页面底部&#xff0c;加上一个view&…...

上市公司代理成本数据大全(第一类和第二类代理成本均有)1991-2023年

一、计算方式&#xff1a; &#xff08;1&#xff09; 第一类代理成本 AC1:经营费用率&#xff0c;参考顶刊《管理世界》李文贵和余明桂(2015)老师的研究构建代理成本 AC2:管理费用率&#xff0c;参考C刊《经济管理》彭雅哲和汪昌云(2021) 老师的研究构建代理成本 AC3:资产周转…...

CA-Markov模型概述及其MATLAB实现

CA-Markov模型概述及其MATLAB实现 1 Markov模型2 CA-Markov模型2.1 元胞自动机(Cellular Aumatomata, 简称CA)2.1.1 构成2.2 准确度评估(Accuracy assessment)2.2.1 Kappa coefficient参考1.参考文献2.其它参考资料1 Markov模型 Markov模型是一种数学模型,用于描述系统在不…...

《生成式 AI》课程 第3講 CODE TASK执行文章摘要的机器人

课程 《生成式 AI》课程 第3講&#xff1a;訓練不了人工智慧嗎&#xff1f;你可以訓練你自己-CSDN博客 任务1:总结 1.我们希望你创建一个可以执行文章摘要的机器人。 2.设计一个提示符&#xff0c;使语言模型能够对文章进行总结。 model: gpt-4o-mini,#gpt-3.5-turbo, import…...

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后&#xff0c;智能手表如果需要获取手机传过来的数据&#xff0c;从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案&#xff1a;C 分析&#xff1a;FA发起迁移后&am…...

c++原型模式(Prototype Pattern)

原型模式&#xff08;Prototype Pattern&#xff09; 原型模式是一种创建型设计模式&#xff0c;它允许你通过复制现有对象来创建新的对象&#xff0c;而不是通过类实例化来创建对象。这种模式在开发时需要大量类似对象的情况下非常有用。原型模式的核心是一个具有克隆方法的接…...

联通大数据面试题及参考答案

Flink 是怎么使用的? Flink 是一个分布式流批一体的开源平台,以下是其一般使用步骤及相关要点: 环境搭建 首先要根据需求选择合适的部署模式,比如本地模式用于开发测试,集群模式(如 Standalone、YARN、Kubernetes 等)用于生产环境。安装相应的 JDK 版本(Flink 基于 Ja…...

MySQL数据库:SQL语言入门 【3】(学习笔记)

目录 5&#xff0c;TCL —— 事务控制语言&#xff08;Transaction Control Language&#xff09; &#xff08;1&#xff09;事务的概念作用 &#xff08;2&#xff09;事务的特性 【1】原子性 【2】一致性 【3】隔离性 【4】持久性 &#xff08;3&#xff09;并发事务带来…...

uniapp 实现tabbar分类导航及滚动联动效果

思路&#xff1a;使用两个scroll-view&#xff0c;tabbar分类导航使用scrollleft移动&#xff0c;内容联动使用页面滚动onPageScroll监听滚动高度 效果图 <template><view class"content" ><view :class"[isSticky ? tab-sticky: ]">…...

华为数字化转型的本质为何是管理变革

随着全球经济的加速数字化转型&#xff0c;企业纷纷进入了数字化时代的大潮。华为作为数字化转型的领军者&#xff0c;已经成功实践了从传统企业向数字化企业的蜕变。对于企业而言&#xff0c;数字化转型不仅仅是新技术的应用&#xff0c;更是一场管理变革。在这场变革的背后&a…...

【数据库】深入解析慢 SQL 的识别与优化策略

文章目录 什么是慢 SQL&#xff1f;慢 SQL 的危害如何检测分析慢 SQL使用 MySQL 慢查询日志利用 EXPLAIN 分析执行计划通过 Profiling 获取详细执行信息借助慢 SQL 收集分析平台 实际案例解析&#xff1a;600秒的慢 SQL 优化之旅问题描述初步分析优化步骤1. 优化 SQL 语句结构2…...

Linux从入门到精通

远程连接linux操作系统 Linux的图形化界面并不稳定&#xff0c;因此往往使用命令行去接触Linux操作系统 远程连接到Linux操作系统需要借助一个叫做finalshell的软件&#xff0c;官方地址如下&#xff1a; finalshell官方下载 在linux的terminal终端中输入指令 ifconfig就可以…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...