YOLOv1深入解析与实战:目标检测算法原理

参考:
https://zhuanlan.zhihu.com/p/667046384
https://blog.csdn.net/weixin_41424926/article/details/105383064
https://arxiv.org/pdf/1506.02640

1. 算法介绍

学习目标检测算法,yolov1是必看内容,不同于生成模型,没有特别多的理论,关键在于模型结构的构造。
先直接从作者给的图,来解释yolo到底干了一件什么事情,为什么速度那么快。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
我们重点分析这几张图,搞明白图就明白了算法核心。
从图中,我们要明确以下几点:

  1. 输入:输入是一张完整的图片,不是说把一张图片分成S*S个网络
  2. 输出 S × S × ( B ∗ 5 + C ) S\times S \times (B*5 +C) S×S×(B5+C)的矩阵:
    S × S S\times S S×S相当于把原图分成 S × S S\times S S×S个grid cell,这里是7x7;
    ( B ∗ 5 + C ) (B*5 +C) (B5+C)表示每个gird cell需要预测东西,B表示需要预测多少个检测框也就是经常提到的bounding box,5表示预测的检测框属性是什么,这里是(x,y,w,h,confidence)也就是需要预测这5个值,C表示预测的类别,原文中要预测两个检测框B=2,预测20个类别C=20
    ,也就是最终预测矩阵为7x7x30。
  3. 标签:检测框大小和位置对应预测(x,y,w,h);类别对应预测C。那还有一个confidence呢,别忘了我们的confidence是和预测的检测框绑定在一起的,那自然就是:这个检测框是我们要预测的为1,不是我们要预测的为0。那该怎么处理呢,别着急,我们先看后面损失函数,自然就明白了。

其实搞清楚我们输入输出和目标就自然而然明白了yolo是在做什么。但是仍有需要注意的地方:

  • 每一个grid cell只能预测一个目标,也就是我们最后输出的7x7x30最多只能预测7x7个目标
  • 预测的x,y是相对于当前grid cell 中的相对坐标,什么意思呢?预测结果每一个30维度向量都是和原图7x7个grid cell是一一对应的,其预测值也是在对应grid cell 中,比如预测的x=0.5,y=0.5,那么预测的就是对应这个grid cell的中心。
  • 预测的w,h测是相对于原图W,H归一化后的结果,也就是除以W和H后的结果。

2 损失设计

在这里插入图片描述
我们依然看论文中原式:
看这个式子,有一点非常重要,也就是损失计算的前提:gronud truth,也就是我们给定的标签,中心点是否在我们预测的grid cell中,不在就为0,只计算在的,也就是我们不需要傻傻的把所有的预测的框都要去计算损失,也没法计算,也不需要计算,因为我们检测的是目标,标签给的也是目标的标签。看一下loss中几个符号含义,非常重要:

1 i o b j 1_{i}^{obj} 1iobj:第i个grid cell 是否预测了物体,也就是gronud truth的中心点是否在grid cell中,在为1,不在为0;
1 i j o b j 1_{ij}^{obj} 1ijobj:第i个grid cell 是预测了物体前提下,也就是 1 i o b j = 1 1_{i}^{obj}=1 1iobj=1的前提,第j个预测框是否预测物体,预测为1,不预测为0
1 i j n o o b j 1_{ij}^{noobj} 1ijnoobj:第i个grid cell 是预测了物体前提下,也就是 1 i o b j = 1 1_{i}^{obj}=1 1iobj=1的前提,第j个预测框是否预测物体,预测为0,不预测为1

那么问题来了,我该如何判断我这j个检测框,哪一个是才是预测了物体呢,很简单,把每一个检测框和groud truth求IOU,IOU最大的那个是预测了物体,其他没预测物体。预测物体的置信度标签 C i ^ = 1 \hat{C_i}=1 Ci^=1,否则为0。也就是:
第1、2、3排的损失是计算了第i个grid cell 是预测了物体前提下,第j个预测框是预测了物体的检测框的损失,
第4排,自然是剩下没有B-1个没有预测物体检测框的置信度损失,标签为0,
第5排,这个不用说了,当前grid cell预测的类别。
从损失来看,所有损失计算都是在ground truth 中心点在预测的grid cell中,也就是这个grid cell是来预测物体的这个前提,非常重要,不明白这一点相当于yolo白看,压根就没看懂。

至于w,h为什么带根号,很简单,有的检测框大有的小,为了让尺度尽量一致,开根号处理了以下。

3 网络结构

在这里插入图片描述
作者给的网络结构是早期的darknet网络,就是一直在用CNN做卷积提取特征。

4 推理

NMS非极大值抑制,很好理解:对于一个目标,我们只需要一个检侧框,主要解决的是一个目标被多次检测的问题,意义主要在于在一个区域里交叠的很多框选一个最优的。
这里推荐看https://blog.csdn.net/qq_41498261/article/details/121983012
简单来说就是排序问题:
(1)找出某个类别所有的框,最多98个,因为 7 ∗ 7 ∗ 2 7*7*2 772(懂的都懂),假设预测dog的最终有10个框,找出这10个框,按照置信度排序从大到小排序,如1 2 3 4 5 6 7 8 9 10
(2)按照顺序第2-9和第1个计算IOU,假如设定一个阈值为0.7,IOU超过0.7从序列中排除,假如第567超过了0.7,则剔除,则新的排序为1 2 3 4 5 8 9 10
(3)按照(2)方式,计算3 4 5 8 9 10和2的结果IOU,以此类推,假如最终结果为1,2,5,则1,2,5在这个检测框是我们要的,理想情况下三个检测框检测到3条狗。
(4)进行第二个类别NMS,按照(1)(2)(3)以此类推,完成所有类别检测

备注

YOLO提供了一个端到端的检测任务,不需要分两次训练,一步完成,这也是它速度快的原因,学习v1版本会让我们更快学习后面的版本。接下来,我们会介绍v3版本,而不是v2,v3相比v2更好理解,不必非要介绍v2才可以学习v3,不必浪费时间学习v2。代码的话,低版本代码没有什么值得学习的,也不必要学习,只要学习更加先进的东西即可。

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

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

相关文章

CSAPP Lab07——Malloc Lab完成思路

完整代码见:CSAPP/malloclab-handout at main SnowLegend-star/CSAPP (github.com) Malloc Lab 按照惯例,我先是上来就把mm.c编译了一番,结果产生如下报错。搜索过后看样子应该是编译器的版本不匹配,得建立条软链接。 经过多番…

【数据结构】链式二叉树详解

个人主页~ 链式二叉树基本内容~ 链式二叉树详解 1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQueue.c层序…

WordPress子比内容同步插件

1.支持分类替换 将主站同步过来的文章分类进行替换 2.支持本地化文章图片 (使用储存桶可能会导致无法保存图片) 3.支持自定义文章作者(选择多个作者则同步到的文章作者将会随机分配) 4.支持将同步过来的文章自定义文章状态&…

Java | Leetcode Java题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution {public int longestConsecutive(int[] nums) {Set<Integer> num_set new HashSet<Integer>();for (int num : nums) {num_set.add(num);}int longestStreak 0;for (int num : num_set) {if (!num_set.contai…

乡村振兴与文化传承:挖掘乡村历史文化资源,传承乡村优秀传统,打造具有地方特色的美丽乡村文化品牌

目录 一、引言 二、乡村历史文化资源的挖掘与保护 &#xff08;一&#xff09;乡村历史文化资源的内涵 &#xff08;二&#xff09;乡村历史文化资源的挖掘 &#xff08;三&#xff09;乡村历史文化资源的保护 三、乡村优秀传统的传承与创新 &#xff08;一&#xff09;…

4.基础纹理

纹理的目的&#xff1a;使用一张图片来控制模型的外观纹理映射技术&#xff1a;把一张图“黏”在模型表面&#xff0c;逐纹素&#xff08;与像素不同&#xff09;地控制模型颜色通常在建模软件中利用纹理展开技术实现&#xff0c;把纹理映射坐标存储在每个顶点上纹理映射坐标&a…

数学基础——微积分在机器/深度学习上的应用

目录 微分学 导数 偏导数 梯度 梯度下降算法 反向传播算法 自动求导 计算图 正则化与过拟合 L1正则化 L2正则化 Dropout正则化 拉格朗日对偶问题 拉格朗日乘数法 凸优化 对偶问题 KKT条件 Slater条件 积分学 笔记内容 微积分是17世纪后半叶发展起来的数…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 买卖股票的最佳时机含冷冻期(难度⭐⭐)(79)

1. 题目解析 题目链接&#xff1a;309. 买卖股票的最佳时机含冷冻期 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 二、算法思路 1. 状态表示 dp[i][0]&#xff1a;表示第 i 天结束后&#xff0c;处于「买入」状态…

【计算机毕业设计】331基于微信小程序的家庭财务管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

音视频开发15 FFmpeg FLV封装格式分析

FLV(Flash Video)简介 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式&#xff0c;由于其封装后的⾳视频⽂件体积⼩、封装简单等特点&#xff0c;⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤ FLV格式封装的⽂件后缀为.flv。 FLV封装格式的组成 FLV封装…

牛客BM22 比较版本号【中等 字符串 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7 思路 字符串用.分割为数组&#xff0c;然后依次比较大小Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修…

lvs安装文档

目录 1. 检测内核是否支持了lvs 2. 安装依赖 3. 安装ipvsadm 1. 检测内核是否支持了lvs Centos6.5的内核已经支持了lvs&#xff0c;所有只需要安装lvs的管理工具ipvsadm即可&#xff1b; 检查linux内核是否集成lvs模块&#xff1a;modprobe -l | grep ipvs 开启路由转发功…

一文了解经典报童模型的扩展问题

文章目录 1 引言2 经典报童模型3 综述文章4 模型扩展4.1 扩展目标函数4.2 增加约束条件4.3 增加优化变量4.4 扩展模型参数4.5 扩展问题场景 5 总结6 相关阅读 1 引言 时间过的真快呀&#xff0c;已经6月份了。距离上一篇文章发表&#xff0c;已经过去了将近一个月&#xff0c;…

godot.bk:how to add map to the game

1.项目构建如下&#xff0c;map是我们点击start之后才渲染出来的 mian.tscn --main.gd --background(textureact) --start(button) --button.gd sourceFile map.tscn --tilemap --tileset 2.main.gd&#xff1a;注意main.gd并不定义信号&#xff0c;它只是接收信号而已 extend…

冒泡排序与快速排序

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 关注博主带你了解更多数据结构知识 1.冒泡排序 冒泡排序 private static void swap(int[] arrary,int i,int j){int tmp arrary[i];arrary[i] arrary[j];arrary[j] tmp;public static void bubbl…

Java筑基-面向对象

Java-面向对象 一、类和对象1、类和对象的关系2、创建类3、创建对象4、成员变量与局部变量5、构造器5.1、创建对象的过程5.2、构造器的格式5.3、构造器和方法的区别5.4、构造器的作用5.5、构造器的重载 6、this关键字用法&#xff1a;6.1、this可以修饰属性6.2、this可以修饰方…

【Ubuntu常用命令】终端个人常用命令总结

【Ubuntu常用命令】终端常用命令总结 查看硬盘挂载情况查看内存占用情况移动或重命名文件和目录复制文件或目录conda安装本地文件 查看硬盘挂载情况 mount 命令会列出当前系统上所有已挂载的文件系统。它会显示挂载点、文件系统类型、挂载选项等信息 mount df 命令用于显示文…

【一小时学会Charles抓包详细教程】Charles 抓包相关设置 (7)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 Charles 抓包相…

数据库(18)——DCL权限控制

MySQL常用权限 权限说明ALL,ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表 DCL语法 查询权限 SHOW GRANTS FOR 用户名主机名; 查询hello的权限 SHOW GRANTS FOR hellolocalhost; 授…

GCB | 基于36年5个生态系统观测数据发现表层土壤深度提高生态系统的生产力和稳定性

陆地生态系统生产力对全球粮食安全和促进碳固存至关重要&#xff0c;但生产力受到气候变化以及火灾、干旱、洪水、霜冻频率增加和生物多样性减少的压力。了解控制生态系统初级生产力变异的不同因素和机制&#xff0c;为维持生态系统初级生产力和增强生态系统恢复力提供了科学依…