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

YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】

目录

  • 1 前言
  • 2 YOLO在不同领域的应用
  • 3 物体检测指标和NMS
    • 3.1 mAP和IOU
    • 3.2 mAP计算流程
      • 3.2.1 VOC 数据集
      • 3.2.2 微软 COCO 数据集
    • 3.3 NMS

1 前言

最近在做目标检测模型相关的优化,重新看了一些新的论文,发现了几篇写得比较好的YOLO系列论文综述,所以写了这篇博文,总结一下YOLO从v1到v11的模型架构、优化、优势和局限性。(学术界太卷了,一年更新三版,到今年九月份就已经更新到v11了,印象中两年前还是YOLOv5的天下。)

参考论文:

  1. A COMPREHENSIVE REVIEW OF YOLO ARCHITECTURES IN COMPUTER VISION: FROM YOLOV1 TO YOLOV8 AND YOLO-NAS
  2. YOLOV1 TO YOLOV10: A COMPREHENSIVE REVIEW OF YOLO VARIANTS AND THEIR APPLICATION IN THE AGRICULTURAL
    DOMAIN
  3. YOLOV10 TO ITS GENESIS: A DECADAL AND COMPREHENSIVE REVIEW OF THE YOU ONLY LOOK ONCE (YOLO) SERIES

目标检测的发展经历了五个比较大的阶段:传统算法、Two-stage、One-stage、Anchor-free、Transformer。

在深度学习出现之前,主要是依赖于手工设计的特征与机器学习分类器的结合,包括相关滤波器、滑动窗口法和Viola-Jones检测器等,这些方法所涉及的特征提取技术包括Gabor特征、梯度方向直方图(Histogram of Oriented Gradients, HOG)、局部二值模式(Local Binary Patterns, LBP)和哈尔特征(Haar-like features)。这些检测器最常用的分类方法包括随机森林、支持向量机、统计分类器(例如贝叶斯分类器和Adaboost)以及多层感知器(MLP)等。

将卷积神经网络(Convolutional Neural Networks, CNN)引入物体检测之后,真正实现了自动化的特征提取和端到端的学习。

CNN的特点包括:

  • 层次化的特征学习:CNN在最开始几层可以学习一些低维的特征(如边缘、纹理),在深层可以学习一些高维的特征(如物体部件、形状);
  • 空间不变性:卷积层使得CNN能够识别图像中不论位置如何的对象,从而增强了检测的鲁棒性;
  • 可扩展性和泛化能力:CNN易于扩展,便于处理更大的数据集和更复杂的模型,在广泛的任务和应用环境中提高性能和鲁棒性。

下图展示了物体检测算法的主要发展历史。

时间线

如果直接通过滑动窗口的方法将CNN应用到物体检测中,这种暴力搜索的方法计算成本非常高,并且效率很低,难以做到实时处理。

2013年,Ross Girshick等人提出了R-CNN (Region-based CNN) 架构来解决这些挑战。R-CNN利用选择性搜索算法生成大约2000个区域proposals,然后通过CNN处理这些区域来提取特征。Fast R-CNN改进了这一过程,通过在单次传递中集成区域proposals特征提取和分类来提高效率。Faster R-CNN进一步优化了这种方法,引入了Region Proposal Networks(RPNs)进行端到端训练,去掉了选择性搜索的方法。

“You Only Look Once”(YOLO)物体检测算法是由Joseph Redmon等人在2015年首次提出,用一个单一的神经网络将region proposal和分类结合起来,极大地减少了计算时间,使得实时物体检测开启了新的里程碑。YOLO将图像分割成很多个网格,每个网格直接预测边界框和类别概率,实现了端到端的学习。

2 YOLO在不同领域的应用

YOLO的实时物体检测能力在自动驾驶车辆系统中具有不可估量的价值,能够快速识别和跟踪各种物体,如车辆、行人、自行车和其他障碍物。这些功能已被应用于多个领域,包括用于监控、体育分析和视频动作识别。

在农业方面,YOLO被用来检测和分类作物、害虫和疾病,辅助精准农业技术并实现农作过程自动化。它们也被调整用于生物识别、安全以及面部识别系统中的人脸检测任务。

在医学领域,YOLO已被用于癌症检测、皮肤分割和药片识别,提高了诊断准确性和治疗过程的效率。

在遥感领域,它被用于卫星和航空影像中的物体检测与分类,支持土地利用制图、城市规划和环境监测。

安全系统整合了YOLO模型进行视频流的实时监控和分析,允许快速检测可疑活动、社交距离保持及口罩佩戴检测。这些模型还被应用于表面检查以检测缺陷和异常情况,从而加强制造和生产过程中的质量控制。

在交通应用中,YOLO被用于车牌检测和交通标志识别等任务,为智能交通系统和交通管理解决方案的发展做出了贡献。它们还被用于野生动物检测和监测,以识别濒危物种,促进生物多样性保护和生态系统管理。

最后,YOLO在机器人应用和无人机物体检测中得到了广泛应用。

下图展示了Scopus中标题含有“YOLO”一词的所有论文的文献计量网络可视化,并通过物体检测关键词进行了筛选。

YOLO应用领域

3 物体检测指标和NMS

3.1 mAP和IOU

平均精度(Average Precision, AP),也称为平均平均精度(Mean Average Precision, mAP),衡量所有类别物体的平均精度,是评估物体检测模型性能的常用指标。COCO数据集对AP和mAP不做区分。下文中,我们提到的AP和mAP是等价的。

在YOLOv1和YOLOv2中,用于训练和基准测试的数据集是PASCAL VOC 2007和VOC 2012,但从YOLOv3开始,使用的是COCO(Common Objects in Context)数据集。

mAP指标是基于精确度-召回率指标,处理多个物体类别,并通过交并比(IoU)定义正预测。

精确度Precision:衡量模型正预测的准确性,简单理解就是模型输出的检测框里,检测正确的框的比例。

召回率Recall:衡量模型正确识别的正例的比例,换而言之,就是有多少正例被正常识别出来。

通常,精确度和召回率之间会互相影响,例如:增加检测到的对象数量(更高的召回率)可能导致更多的假阳性(更低的精确度)。为了综合考虑精确度和召回率,需要用mAP来衡量,mAP指标结合了不同置信度阈值下的精确度-召回率曲线,表示的是精确度-召回率曲线下的面积。

通常一个模型会检测多个类别,mAP指标通过分别计算每个类别的平均精度(AP),然后取所有类别AP的均值(这也是为什么它被称为平均平均精度的原因),这种方法能更全面地评估模型的整体性能。

交并比(Intersection over Union, IoU):物体检测旨在通过预测边界框准确地定位图像中的物体,mAP指标通过引入交并比(IoU)来评估预测边界框的质量。IoU是指预测边界框与真实边界框的交集面积与并集面积之比,表示了真实边界框与预测边界框之间的重叠程度。COCO基准采用多个IoU阈值来评估模型在不同定位精度水平上的表现。

IOU

3.2 mAP计算流程

在VOC和COCO数据集中,AP的计算方式有所不同。

3.2.1 VOC 数据集

该数据集包括20个物体类别,mAP计算步骤:

  1. 对于每个类别,通过改变模型预测的置信度阈值来计算精确度-召回率曲线。
  2. 使用精确度-召回率曲线上11点插值的方法来计算每个类别的平均精度(AP)。
  3. 通过取所有20个类别的AP均值来计算最终的平均精度(AP)。

3.2.2 微软 COCO 数据集

该数据集包含80个物体类别,并使用更复杂的方法来计算AP。与VOC使用11点插值不同,它使用101点插值,即从0到1以0.01为增量计算101个召回率阈值下的精确度。此外,AP是通过对多个IoU值而不是仅一个IoU值求平均得到的,除了一个常用的AP指标称为AP50,它是单个IoU阈值0.5时的AP。COCO中计算AP的步骤如下:

  1. 对于每个类别,通过改变模型预测的置信度阈值来计算精确度-召回率曲线。
  2. 使用101个召回率阈值来计算每个类别的平均精度(AP)。
  3. 在不同的交并比(IoU)阈值下计算AP,通常是从0.5到0.95,步长为0.05。较高的IoU阈值要求更准确的预测才能被视为TP。
  4. 对于每个IoU阈值,取所有80个类别的AP均值。
  5. 最后,通过对每个IoU阈值下计算出的AP值求平均来计算整体AP。

AP计算方法的不同使得直接比较两个数据集上的物体检测模型性能变得困难。目前的标准倾向于使用COCO AP,因为它对模型在不同IoU阈值下的表现进行了更细致的评估。

3.3 NMS

非极大值抑制(Non-Maximum Suppression, NMS)是一种在物体检测算法中使用的后处理技术,用于减少重叠边界框的数量并提高整体检测质量。物体检测算法通常会在同一个物体周围生成多个具有不同置信度分数的边界框,NMS通过过滤掉冗余和无关的边界框,只保留最准确的那些。

非极大值抑制(NMS)的工作原理:

  • 初始化:首先获取所有预测的边界框及其对应的置信度分数。
  • 排序:根据置信度分数对这些边界框进行降序排列。
    选择最高分框:选取置信度最高的边界框作为当前处理的对象。
  • 计算IoU:对于剩余的所有边界框,计算它们与当前最高分框之间的交并比(IoU)。
  • 抑制重叠框:如果某个边界框与当前最高分框的IoU超过了预设阈值(例如0.5),则认为该边界框是冗余的,并将其从列表中移除。
  • 重复步骤3-5:继续选取下一个置信度最高的边界框,并重复上述过程,直到所有边界框都被处理完毕。

通过这种方式,NMS能够有效地去除多余的重叠边界框,从而简化结果并提高检测准确性。这种方法对于确保每个物体只有一个最佳匹配的边界框特别有用,这对于后续的应用如跟踪或识别非常关键。

NMS

NMS示意图

从下一篇博文开始,我们逐一介绍每一版本YOLO的模型架构、改进点、优势和局限性。

相关文章:

YOLO系列论文综述(从YOLOv1到YOLOv11)【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】

目录 1 前言2 YOLO在不同领域的应用3 物体检测指标和NMS3.1 mAP和IOU3.2 mAP计算流程3.2.1 VOC 数据集3.2.2 微软 COCO 数据集 3.3 NMS 1 前言 最近在做目标检测模型相关的优化,重新看了一些新的论文,发现了几篇写得比较好的YOLO系列论文综述&#xff0…...

数据结构--Map和Set

目录 一.二叉搜索树1.1 概念1.2 二叉搜索树的简单实现 二.Map2.1 概念2.2 Map常用方法2.3 Map使用注意点2.4 TreeMap和HashMap的区别2.5 HashMap底层知识点 三.Set3.1 概念3.2 Set常用方法3.3 Set使用注意点3.4 TreeSet与HashSet的区别 四.哈希表4.1 概念4.2 哈希冲突与避免4.3…...

计算机操作系统——进程控制(Linux)

进程控制 进程创建fork()函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出(Exit)由于信号终止非…...

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录,也可以使用默认目录 插件: 输入 Chinese,中文插件 安装: open in browser,直接右键文件…...

【排序算法 python实现】

排序算法 python实现 / 默写 # 汉诺塔 import copy import randomdef hanuo(n, a, b, c):if n 1:print(f{a} --> {c})returnhanuo(n - 1, a, c, b)print(f{a} --> {c})hanuo(n - 1, b, a, c)hanuo(3, A, B, C)# 冒泡排序 def bubble_sort(arr):n len(arr)for i in ran…...

Java图书管理系统(简易保姆级)

前面学习了这么多知识,为了巩固之前的知识,我们就要写一个图书管理系统来帮助大家复习,让大家的知识融会贯通~~~ 话不多说,直接开始今天的内容~ 首先呢,我们要有一个大体的思路: 实现效果思路有两种情况&a…...

嵌入式硬件设计:从概念到实现的全流程

嵌入式硬件设计是现代电子技术中一个至关重要的领域,涉及从硬件架构设计到硬件调试的各个方面。它为我们日常生活中的各类智能设备、家电、工业控制系统等提供了强大的支持。本文将介绍嵌入式硬件设计的基本流程、关键技术、常用工具以及常见的挑战和解决方案&#…...

第 4 章 Java 并发包中原子操作类原理剖析

原子变量操作类 AtomicLong 是原子性递增或者递减类,其内部使用 Unsafe 来实现,AtomicLong类也是在 rt.jar 包下面的,AtomicLong 类就是通过 BootStarp 类加载器进行加载的。这里的原子操作类都使用 CAS 非阻塞算法 private static final lon…...

从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中

文章目录 前言构建一个 hello world web 应用项目结构项目核心文件启动项目 检查项目是否构建成功 容器化我们的应用编写 Dockerfile构建 docker 镜像推送 docker 镜像仓库 使用 labs.play-with-k8s.com 构建 Kubernetes 集群并部署应用构建 Kubernetes 集群环境编写部署文件 总…...

政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例

目录 Cusor的主要特点 Cusor实操 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! Cursor 是 Visual Studio Code 的一个分支。这使我们能够…...

CentOS 7 安装部署 KVM

1.关闭虚拟机 打开相关选项 打开虚拟机centos7 连接xshell 测试网络,现在就是没问题的,因为我们要使用网络源 安装 GNOME 桌面环境 安装KVM 模块 安装KVM 调试工具 构建虚拟机的命令行工具 qemu 组件,创建磁盘、启动虚拟机等 输入这条命令,…...

ArcGIS 10.2软件安装包下载及安装教程!

今日资源:ArcGIS 适用系统:WINDOWS 软件介绍:ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成地…...

一个专为云原生环境设计的高性能分布式文件系统

大家好,今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS,旨在解决海量云存储与各类应用平台(如大数据、机器学习、人工智能等)之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…...

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…...

3174、清除数字

3174、[简单] 清除数字 1、题目描述 给你一个字符串 s 。你的任务是重复以下操作删除 所有 数字字符: 删除 第一个数字字符 以及它左边 最近 的 非数字 字符。 请你返回删除所有数字字符以后剩下的字符串。 2、解题思路 遍历字符串: 我们需要逐个遍…...

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

目录 题目: 无重复字符的最长子串 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口(同向双指针) 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口 题目: 无重复字符的最长子串 1. 题目解析 题目截图: 此题所说的…...

ADS学习笔记 6. 射频发射机设计

基于ADS2023 update2 更多ADS学习笔记:ADS学习笔记 1. 功率放大器设计ADS学习笔记 2. 低噪声放大器设计ADS学习笔记 3. 功分器设计ADS学习笔记 4. 微带分支定向耦合器设计ADS学习笔记 5. 微带天线设计 -1、射频发射机性能指标 在射频电路和系统中,发送…...

上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量

在当今快速发展的物联网市场中,无线连接技术的不断进步对智能设备的性能和能效提出了更高要求。为了满足这一需求,乐鑫科技推出了ESP32-C61——一款高性价比的Wi-Fi 6芯片,旨在为用户设备提供更出色的物联网性能,并满足智能设备连…...

QT QRadioButton控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍,发展也很迅猛,学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出,但51单片机价格低廉、易学易用、性能成熟,在家电和工业控制中有一定的应用,而且学好了51单片机&…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

CTF show 数学不及格

拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 ​ 根据题目…...