YOLO系列:从yolov1至yolov8的进阶之路 持续更新中

news2024/12/28 20:48:32

一、基本概念

1.YOLO简介

YOLO(You Only Look Once):是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。

2.目标检测算法

  • RCNN:该系列算法实现主要为两个步骤:先从图片中搜索出一些可能存在对象的候选区(Selective Search),大概2000个左右;然后对每个候选区进行对象识别。检测精度较高,但速度慢。

  • YOLO:将筛选候选区域与目标检测合二为一,大大加快目标检测速度,但准确度相对较低。

3.评价目标

3.1.IOU

IOU(Intersection over Union):交并比,候选框(candidate bound,紫色框)与原标记框(ground truth bound,红色框)的交叠率,IOU值越高,说明算法对目标的预测精度越高。

  • Area of overlap:原标记框与候选框的交集面积
  • Area of union:原标记框与候选框的并集面积

3.2.置信度

3.3.二分类指标

在「二分类」任务中,对样本的描述:

  • Position:正例,二分类中的一类样本,一般是想要的
  • Negative:负例,二分类中另一类样本,一般是不想要的
  • TP(True Position):在拿出样本中,正确识别为正例
  • FP(False Position) :在拿出样本中,错误识别为正例,即本身是负例(误判)
  • TN(True Negative) :未拿出样本中,正确当负例舍弃
  • FP(False Negative) :未拿出样本中,错误当负例舍弃,即本身是正例(遗漏)

二分类结果的评判指标:

3.4.AP

由于 Precision 与 Recall 只适用于「二分类问题」。当存在多样本分类时,对每一类样本单独考虑其「二分类问题」,即目标样本与其他样本的分类问题。

当确认的样本越少,出错的风险也就越小;当选择出的样本量越大,得到全部目标样本的可能性越大。因此 Precision 与 Recall 是一度矛盾的关系

  • Precision 较大时,Recall 较小:当要分辨 10 个苹果时,我只拿出一个苹果,那么 Precision 就是 100 %,而 Recall 确是 10 %
  • Precision 较大时,Recall 较小:若选择出 100 个水果,10 个苹果我们都拿出来了,但是还有 90 个其他水果。Precision 就是 10 %,而 Recall 是 100 %

假设模型的任务为从图片中,检测出三类物体:(1,2,3)。「一张图片」的模型预测结果如下所示

现在对每一类别分别绘制 Precision-Recall曲线

每个预测的 box 与其分类对应的所有 Ground True box 进行 IOU 计算,并选择出最大的 IOU 作为输出结果。 认为当前预测 box 就是 IOU 最大的这个 Ground True box 的预测结果。(若多个预测box 与同一个 Ground True box 相对应,则只记录一个)

将 max_iou 与给定阈值 thresh = 0.5 进行比较,大于阈值就标记 1

数据根据「分类置信度 class_conf」 进行排序

取出分类 1

假设在当前图片中,存在 3 个 1 类目标,计算其 Precision 与 Recall。

根据上面的结果,假设只找出 1 个 1 类目标时:

假设只找出 2 个 1 类目标时

假设只找出 3 个 1 类目标时

以此类推,找出全部时

根据上述 Precision 与 Recall 序列绘制出的曲线,就是 1 类别目标对应的Precision-Recall曲线,重复上述步骤,就是绘制出 2, 3 类别的曲线。 根据Precision-Recall曲线就能计算 AP 值了。

AP(Average Precision):Precision-Recall曲线下方的面积。结合 Precision 与 Recall ,更加全面的对模型的好坏进行评价。

绘制完整的 Precision-Recall曲线:将 Precision 与 Recall 绘制成曲线。

查找 precision 突然变大的点

利用这个突变点来代表这个区间内的 Precision

最后计算彩色矩形区域的面积,该值就是 AP

二、YOLO V1

1.网络模型

对于第一版 YOLO 的网络模型就两个部分: 卷积层、全连接层 。

  • 输入: 尺寸为 448x448x3 的图片, 图片尺寸定死

  • 输出: 图片中被检测目标的位置(矩形框坐标)与被检测物体的分类。

2.目标检测原理

  1. 将输入图片通过 7x7 网格,划分为 49 个单元格
  2. 每个单元格负责一个检测目标:存储检测目标外接矩形的「中心点坐标」、长宽;存储检测目标的类型。 即当检测目标的外接矩形「中心点坐标」位于该单元格内时,就让该单元格全权负责储存这个检测目标的信息。
  3. 每个单元格持有2个候选矩形框,会通过置信度选择一个最好的当作预测结果输出

3.模型输出

V1 版本的输出结果为 7x7x30 的一个向量,对该向量进行维度转换得到

其中 7x7 表示利用 7x7 的网格,将输入图片划分为 49 个单元格;30 表示对每个单元格预测结果的描述:两个目标位置候补框、置信度、目标的分类

  • bounding box 1 :第一个候补框的参数,外接矩形中心坐标 (x1,y1)(x1​,y1​) ;长宽 (w1,h1)(w1​,h1​)
  • confidence 1 :第一个候补框是待检测目标的置信度
  • bounding box 2 :第二个候补框的参数,外接矩形中心坐标 (x1,y1)(x1​,y1​) ;长宽 (w1,h1)(w1​,h1​)
  • confidence 2 :第二个候补框是待检测目标的置信度
  • 分类:检测目标为 20 个分类的概率

其中,对于中心坐标 (x,y)(x,y) 、长宽 (w,h)(w,h) 值的存储是一个百分比。

  • 中心坐标 (x,y)(x,y) :相对单元格长宽的比值
  • 长宽 (w,h)(w,h):相对于输入图片长宽的比值

4.损失函数

4.1.定义

4.2.位置预测

当预测外接框与目标外接框的宽度、高度的差值一样时,对于较大的物体而言相对误差小,而对于较小物体而言相对误差较大。因此为了让损失函数对小物体的外接矩形的宽度、高度更敏感一些,在 YOLO V1 中采用了 「根号」: 自变量在[0,1]取值时,根号的斜率变化比直线要大。

5.模型预测

5.1.思路

训练好的 YOLO 网络,输入一张图片,将输出一个 7x7x30 的张量(tensor)来表示图片中所有网格包含的对象(概率)以及该对象可能的2个位置(bounding box)和可信程度(置信度)。每个单元格有两个 bounding box ,一共有 7x7 个单元格,现在将所有的 7x7x2=98 个 bounding box 绘制出来

可以看见图上到处都是 bounding box,现在就需要从这些 bounding box 中,筛选出能正确表示目标的 bounding box。

为了实现该目的, YOLO 采用 NMS(Non-maximal suppression,非极大值抑制)算法

三、YOLO V2

1.模型改进

1.1.卷积化

在 V1 中,最后的输出结果是靠「全连接层」得到的,这也就限制了输入图片的尺寸。因此在 V2 将所有的全连接层转为了卷积层,构造了新的网络结果 DarkNet19,其中还利用 1x1 卷积对模型进行优化。​​​​​​

1.2.Batch Nomalization

在 DarkNet19 网络中,对于卷积层加入了 Batch Normalization ,并删除了 dropout 。

由于 DarkNet19 做了 5 次池化且卷积均进行了padding,所以输入图片将会被缩放 25=3225=32 倍,即 448x448 的输入,输出结果应当是 448/32=14,但是14x14的结果没有特定的中心点,为了制造一个中心点,模型的输入图片尺寸就更改为了416x416,输出结果就变为了13x13

1.3.Fine-Grained Features

在 DarkNet19 模型中,存在一个 PassThrough Layer 的操作,该操作就是将之前阶段的卷积层结果与模型输出结果进行相加。根据 感受野 可知,越靠前的网络层对细节的把握越好,越靠后的网络更注重于目标整体,为了使得输出结果对小物体有更好的把握,就可以利用 PassThrough Layer 来提升结果特征图对小物体的敏感度。

1.4.图片输入

由于历史原因,ImageNet分类模型基本采用大小为 224x224 的图片作为输入,所以 YOLO V1 模型训练使用的输入图片大小其实为 224x224,在模型预测时,又使用的是 448x448 的图片作为输入,这样就导致模型的训练和模型的预测,输入其实是有差异的。为了弥补这个差异,模型训练的最后几个 epoch 采用 448x448 的图片进行训练。

2.Anchor Box

YOLO V1 的 bounding box 缺陷

  1. 一个单元格只能负责一个目标检测的结果,如果该单元格是多个目标的中心点区域时,V1 版本将不能识别。
  2. V1 中,对于 bounding box 的预测结果并未加限制,这就会导致 bounding box 的中心点可能会跑到其他单元格内
  3. bounging box 的宽度与高度是靠模型自己学习的,这就可能走很多弯路。

2.1.Anchor

  1. 模型训练开始前,人为为每个单元格预定义几个不同大小的 Anchor Box,这样从训练开始,每个单元格的bounding box就有了各自预先的检测目标,例如瘦长的 bounging box 就适合找人,矮胖的 bounging box 就适合找车等。

  2. 模型训练就是调整这些预定义的bounding box 的中心点位置与长宽比列。

2.2.Box 数据结构

在引入 Anchor box 后, YOLO V2 对于一个 bounging box 的数据结构为:

  • 中心点坐标 (x,y)(x,y),相对于单元格宽度的比列值
  • 相对于 Anchor box 宽高的偏移量 (w,h)(w,h)
  • 当前 bounging box 存在检测目标的置信度 ConfidenceConfidence
  • 检测目标对应各个类型的概率 pipi​

一个单元格能检测多少目标,就输出多少个上述 Box 数据结构。

2.3.Box 解析

2.4.确定Anchor

3.损失函数

四、YOLO SPP

五、YOLO V4

六、YOLO V5

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

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

相关文章

WPF篇(4)- VirtualizingStackPanel (虚拟化元素)+Canvas控件(绝对布局)

VirtualizingStackPanel虚拟化元素 VirtualizingStackPanel 类(虚拟化元素)和StackPanel 类在用法上几乎差不多。其作用是在水平或垂直的一行中排列并显示内容。它继承于一个叫VirtualizingPanel的抽象类,而这个VirtualizingPanel抽象类继承…

[BSidesCF 2019]Kookie1

打开题目,看到 根据提示,账号:cookie。密码:monster。试一下登录,登陆成功 抓包看看信息 根据提示, 看一下返回包 账号要加username要改成admin,改一下试试 构造cookie 直接得到flag flag{c…

Animate软件基本概念:缓动、绘图纸外观及图层

FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer:Animate教程及作品源文件https://zhuanlan.zhihu.co…

【秋招突围】2024届秋招-京东笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍭 本次给大家…

LVS(Linux Virtual Server)

简介 LVS(Linux Virtual Server)是一个高性能的开源负载均衡解决方案,它通过在Linux内核中实现IPVS(IP Virtual Server)模块来提供负载均衡功能。LVS能够将外部请求根据特定的算法分发到后端的多个服务器上&#xff0c…

Java 中的打印流

打印流属于输出流,分为字节打印流和字符打印流。 字节打印流 构造方法 这么多个构造方法,不要求记住,知道怎么用就可以了。 字节流底层是没有缓冲区,开不开自动刷新都一样。 听老司机说 工作3年了 一个流都没用过。所以听下有…

maven配置 + IDEA集成自己配置的maven

去官网下载 解压出来&#xff0c;去 conf 配置本地仓库 要是没梯子&#xff0c;国外服务器还是慢的&#xff0c;参考下面的maven的架构图 &#xff0c;就不用去国外的中央仓库了&#xff0c;配置到去阿里云的私服。 <mirror><id>alimaven</id><name>a…

Unity物理模块 之 ​2D碰撞器

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.碰撞器是什么 在 Unity 中&#xff0c;碰撞器&#xff08;Collider&#xff09;是一种组件&#xff0c;用于检测物体之…

Ubuntu23.10 安装kvm并使用nmtui创建桥接网络

1.实验准备 &#xff08;1&#xff09;使用Vmware安装Ubuntu23.10 2.实验步骤 &#xff08;1&#xff09;配置ssh &#xff08;2&#xff09;安装qemu &#xff08;3&#xff09;安装libvirt服务 &#xff08;4&#xff09;安装virtinst &#xff08;5&#xff09;启动libvir…

AI文生图的最新王者出现了,Midjourney和Stable Diffusion这下得哭了

最近&#xff0c;超越Midjourney&#xff08;简称MJ&#xff09;和Stable Diffusion&#xff08;简称SD&#xff09;的AI文生图模型突然出现了&#xff0c;她就是Flux.1模型。Flux.1模型是由SD前核心创始团队创立的Black Forest Labs研发的&#xff01; Flux.1模型一发布就瞬间…

unity + ready player me + oculus lipsync 实现数字人说话对应口型 手把手 保姆教程

在网上看了很多教程都没讲明白&#xff0c;今天终于完全弄懂了&#xff0c;现在把教程完整分享出来&#xff0c;希望能帮到大家。 一、unity 中 安装ready player me 插件和 oculus lipsync插件 1.ready player me 安装 &#xff1a; 插件地址在这 菜单栏会出现这两个选项&…

4款热门的视频剪辑软件大盘点,哪款是你的菜?

视频剪辑软件早已成为了现在很多人展现创意、记录生活和实现创作的必备工具&#xff1b;如果你还没有找到一款适合自己的视频剪辑软件的话&#xff0c;不妨看看这4款&#xff0c;一定会给你带来惊喜的。 1、福昕剪辑助手 直达链接&#xff1a;www.pdf365.cn/foxit-clip/ 这个…

python-读取测序数据的ABI文件并输出png格式峰图

本地环境&#xff1a;win10&#xff0c;Python 3.9.13&#xff0c;Biopython 1.8.2&#xff0c;matplotlib 3.5.2 参考&#xff1a; matplotlib.pyplot.arrow — Matplotlib 3.9.1 documentation https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.arrow.html mat…

【实战场景】SpringBoot整合Swagger快速实现

【实战场景】SpringBoot整合Swagger快速实现 开篇词&#xff1a;干货篇&#xff1a;一. Swagger简介二. SpringBoot整合Swagger3环境搭建1. 引入maven依赖2. YML配置3. Swagger配置类4. Swagger分组配置 三. Swagger 常用注解配置1. Api2. ApiOperation3. ApiParam4. ApiModel …

工程技术人员职称专业一览表,赶紧收藏!有助评职称、落户

现在很多地区为了引进人才&#xff0c;都会对各类获得中级或高级职称的人才提供一系列优惠政策&#xff0c;比如人才补贴、职称入户等等。 下面小编就来为大家介绍一下中级职称专业一览表&#xff0c;告诉你能以考代评的几个考试&#xff0c;需要评职称、落户的快看过来&#…

C#中Override与New关键字的运用及实例解析

文章目录 override 关键字new 关键字使用场景使用注意事项和最佳实践总结 在C#编程中&#xff0c;override 和 new 关键字用于处理类的继承和方法的重写。理解它们的用法和区别对于编写清晰和高效的面向对象代码至关重要。本文将详细阐述这两个关键字的含义、使用场景&#xff…

5分钟带你走近:LVS负载均衡(lvs知识点+实验配置)

集群和分布式简介 1、系统性能扩展方式 Scale UP&#xff1a;向上扩展,增强 Scale Out&#xff1a;向外扩展,增加设备&#xff0c;调度分配问题&#xff0c;Cluster 2、集群Cluster Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统 Cluster常见…

PDF扫描?用lookscanned就好了【送源码】

日常工作&#xff0c;我们有时会需要把电子文档转换成看起来像是用扫描仪扫描出来的PDF文件&#xff0c;满足某些特定的需求&#xff0c;你懂的~~ 有时候身边没有打印机或者打印纸&#xff0c;或者打印不方便&#xff0c;总不至于每天都背着吧&#xff1f; 今天要跟大家聊聊一…

SX_错误声明定义了两个以上的数据类型BUG解决_14

具体报错&#xff1a; In file included from perfmon_priv.h:32,from perfmond.c:21: perfmon_api.h:7:18: 错误: 声明指定了两个以上的数据类型7 | #define uint8_t unsigned char perfmon_api.h:7:27: 错误: 声明指定了两个以上的数据类型7 | #define uint8_t unsigned cha…

《人工智能算力资源池技术规范》团体标准正式发布!

由趋动科技提出、中关村新兴科技服务业产业联盟牵头、联合行业专家单位参与&#xff0c;遵循标准制定流程&#xff0c;经过批准起草小组会议讨论、广泛征求意见、委员会草案投票等流程的《人工智能算力资源池技术规范》团体标准&#xff08;标准编号为T/STSI 43—2023&#xff…