YOLO目标检测综述(2024.6月最新!)

news2024/11/24 17:58:40

1 基本概念

        目标检测(Object Detection)是计算机视觉领域的重要任务之一,旨在识别图像或视频中的特定目标并将其位置标记出来。与图像分类任务不同,目标检测要求不仅能够识别目标类别,还需要精确地定位目标的位置。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

2 发展历史

        目标检测技术的发展历史可以追溯到20世纪80年代。在早期阶段,目标检测主要依赖于手工设计的特征提取算法和分类器。这些方法通常基于边缘、纹理、颜色等低级特征,并结合模板匹配或统计模型进行目标检测。然而,这些方法受限于特征的表达能力和鲁棒性,对于复杂场景的检测效果较差。

        随着计算机视觉和机器学习的快速发展,基于机器学习的目标检测方法逐渐兴起。其中,主要的突破之一是提出了基于特征的机器学习方法,如Haar特征和HOG特征。这些方法通过训练分类器来学习目标的特征表示,从而实现目标的检测。然而,这些方法仍然需要手动设计特征,并且对于复杂的目标来说,特征的表示能力较弱。

        近年来,深度学习的兴起极大地推动了目标检测技术的发展。基于深度学习的目标检测方法将深度神经网络引入目标检测领域,并取得了重大突破。最具代表性的方法之一是基于区域的卷积神经网络(R-CNN),它将目标检测任务分解为候选区域提取和区域分类两个子任务。后续的方法,如Fast R-CNN、Faster R-CNN和YOLO(You Only Look Once)等进一步改进了速度和准确性。这些方法不仅能够自动学习特征表示,还能够在端到端的框架下进行目标检测。

        YOLO(You Only Look Once)是一种对象检测算法,由Joseph Redmon等人于2015年提出。YOLO的核心思想是将对象检测任务转化为一个回归问题,通过一个卷积神经网络直接在图像上进行推理,实现实时对象检测。

YOLO的发展历程可以分为以下几个阶段:

        YOLO v1:YOLO的第一个版本是在2015年提出的,它采用了一个全卷积神经网络,将输入图像分为S×S个网格,每个网格预测B个边界框和各自边界框的类别概率。然后,通过阈值筛选和非极大值抑制(NMS)来获得最终的检测结果。YOLO v1在速度和准确率上取得了很大的突破,但对小目标和近似目标的检测效果较差。

        YOLOv5是由Ultralytics团队在2020年开发的。YOLOv5相比于之前的版本在精度和速度上都有显著提升。它采用了一种轻量化的结构,包括多个不同大小的卷积层和池化层,用于提取图像特征。与以往的版本相比,YOLOv5引入了新的网络架构,以及一种新的训练方法,使用更大的数据集和更长的训练时间,从而提高了算法的性能。

       YOLOv8 是由 Ultralytics 公司在2023年1月发布的最新一代实时目标检测模型。YOLOv8 采用了先进的骨干网络和颈部架构,实现了改进的特征提取和目标检测性能。它采用了无锚点的分割 Ultralytics 头部设计,这有助于提高准确性并使检测过程更加高效。YOLOv8 还专注于在准确性和速度之间保持最佳平衡,适合于不同应用领域的实时目标检测任务。此外,YOLOv8 提供了一系列预训练模型,以满足不同任务和性能要求,使得用户可以根据自己的具体用例找到合适的模型。

        YOLOv9 由中国台湾 Academia Sinica、台北科技大学等机构联合开发。YOLOv9引入了程序化梯度信息(Programmable Gradient Information, PGI),这是一种全新的概念,旨在解决深层网络中信息丢失的问题。传统的目标检测网络在传递深层信息时,往往会丢失对最终预测至关重要的细节,而PGI技术能够保证网络在学习过程中保持完整的输入信息,从而获得更可靠的梯度信息,提高权重更新的准确性。这一创新显著提高了目标检测的准确率,为实时高精度目标检测提供了可能。此外,YOLOv9采用了全新的网络架构——泛化高效层聚合网络(Generalized Efficient Layer Aggregation Network, GELAN)。GELAN通过梯度路径规划,优化了网络结构,利用传统的卷积操作符实现了超越当前最先进方法(包括基于深度卷积的方法)的参数利用效率。这一设计不仅提高了模型的性能,同时也保证了模型的高效性,使YOLOv9能够在保持轻量级的同时,达到前所未有的准确度和速度。

论文地址:https://arxiv.org/abs/2402.13616

Yolov9源代码:https://github.com/WongKinYiu/yolov9

        YOLOv10是清华大学的研究人员在Ultralytics的基础上,引入了一种新的实时目标检测方法,解决了YOLO 以前版本在后处理和模型架构方面的不足。通过消除非最大抑制(NMS)和优化各种模型组件,YOLOv10 在显著降低计算开销的同时实现了最先进的性能。大量实验证明,YOLOv10 在多个模型尺度上实现了卓越的精度-延迟权衡。

YOLOv10 的结构建立在以前YOLO 模型的基础上,同时引入了几项关键创新。模型架构由以下部分组成:

        主干网络:YOLOv10 中的主干网络负责特征提取,它使用了增强版的 CSPNet(跨阶段部分网络),以改善梯度流并减少计算冗余。

        颈部网络:颈部设计用于汇聚不同尺度的特征,并将其传递到头部。它包括 PAN(路径聚合网络)层,可实现有效的多尺度特征融合。

        一对多头:在训练过程中为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。

        一对一头:在推理过程中为每个对象生成一个最佳预测,无需 NMS,从而减少延迟并提高效率。

论文:https://arxiv.org/pdf/2405.14458 

源码: GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection  

        目前,目标检测技术仍在不断发展。一方面,研究者们致力于提高目标检测的准确性和效率。另一方面,一些新的方向也在探索中,如目标实例分割、多目标跟踪等。可以预见,随着技术的不断进步,目标检测技术将在更广泛的应用领域中发挥更大的作用。

 3 目标检测四大任务

  • 分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。

  • 定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

  • 检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物是什么。

  • 分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

        目标检测任务可分为两个关键的子任务:目标分类目标定位目标分类任务负责判断输入图像或所选择图像区域(Proposals)中是否有感兴趣类别的物体出现,输出一系列带分数的标签表明感兴趣类别的物体出现在输入图像或所选择图像区域(Proposals)中的可能性。目标定位任务负责确定输入图像或所选择图像区域(Proposals)中感兴趣类别的物体的位置和范围,输出物体的包围盒、或物体中心、或物体的闭合边界等,通常使用方形包围盒,即Bounding Box用来表示物体的位置信息。

4 目标检测算法的分类

        目前主流的目标检测算法主要是基于深度学习模型,大概可以分成两大类别:

(1)One-Stage(单阶段)目标检测算法,这类检测算法不需要Region Proposal阶段,可以通过一个Stage直接产生物体的类别概率和位置坐标值,比较典型的算法有YOLO、SSD和CornerNet;One-Stage目标检测算法可以在一个stage直接产生物体的类别概率和位置坐标值,相比于Two-Stage的目标检测算法不需要Region Proposal阶段,整体流程较为简单。如下图所示,在Testing的时候输入图片通过CNN网络产生输出,解码(后处理)生成对应检测框即可;在Training的时候则需要将Ground Truth编码成CNN输出对应的格式以便计算对应损失loss。

目前对于One-Stage算法的主要创新主要集中在如何设计CNN结构、如何构建网络目标以及如何设计损失函数上。 

(2)Two-Stage(双阶段)目标检测算法,这类检测算法将检测问题划分为两个阶段,第一个阶段首先产生候选区域(Region Proposals),包含目标大概的位置信息,然后第二个阶段对候选区域进行分类和位置精修,这类算法的典型代表有R-CNN,Fast R-CNN,Faster R-CNN等。目标检测模型的主要性能指标是检测准确度和速度,其中准确度主要考虑物体的定位以及分类准确度。一般情况下,Two-Stage算法在准确度上有优势,而One-Stage算法在速度上有优势。不过,随着研究的发展,两类算法都在两个方面做改进,均能在准确度以及速度上取得较好的结果。 

        Two-Stage目标检测算法流程如下图所示,在Testing的时候输入图片经过卷积神经网络产生第一阶段输出,对输出进行解码处理生成候选区域,然后获取对应候选区域的特征表示(ROIs),然后对ROIs进一步精化产生第二阶段的输出,解码(后处理)生成最终结果,解码生成对应检测框即可;在Training的时候需要将Ground Truth编码成CNN输出对应的格式以便计算对应损失loss。

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

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

相关文章

1.2章节input输入函数语法使用和示例

在Python中,input() 函数用于从用户获取输入。这个函数会等待用户输入一行文本,然后按回车键,最后将输入的文本作为字符串返回。 一、基本语法 当你运行上面的代码时,它会打印出 "请输入一些文字: ",然后等…

.idea文件夹里面iml文件有啥用

.idea文件夹和其中的.iml文件对于IntelliJ IDEA项目非常重要,它们共同构成了IDEA对项目理解的基础。让我们详细了解一下这两者的作用: .idea文件夹 .idea文件夹包含了IntelliJ IDEA项目的所有配置信息,包括但不限于: 编译器设置…

jmeter之接口数据与数据库数据检验!

前言 本文讲解使用jmeter测试接口,然后与数据库里面的数据进行校验对比。本节使用一个新增数据的接口,新增一条数据,然后在数据库里面进行查询,是否能够查询到此条数据。 一、接口环境搭建 1.1 新建一个http请求,写…

3d合并模型一直加载有哪些原因---模大狮模型网

当在3D软件中合并3d模型时,可能会遇到加载时间过长或持续加载的情况。这可能是由以下原因之一引起的: 一:模型复杂度 合并的模型可能非常复杂,包含大量的面片、顶点或纹理等。这会增加加载和处理的时间。解决方法是优化模型&…

希喂生骨肉冻干值得入手吗?拯救瘦弱、增强抵抗力最强主食测评!

希喂生骨肉冻干值得入手吗?很多小姐妹觉着自家猫咪太瘦了、体质不咋好,换季还敏感、掉毛、不吃东西,听说生骨肉冻干好吸收、营养好,可以改善体质、拯救瘦弱、增强抵抗力,为了图省事,开始盲入生骨肉冻干&…

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 I…

解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题

最近安装了最新版本的鲁大师,安装过程中不小心同时安装了捆绑软件TabX explorer。这个软件和系统自带的文件资源管理器很像,最后弹出会员到期才发现,这个不是系统文件资源管理器,是第三方的文件资源管理器,就按正常流程…

解锁高效运维新纪元:网络基础设施数字孪生管理工具

随着信息技术的飞速发展,网络基础设施的运维管理变得日益复杂。北京耐威迪科技股份有限公司凭借其创新技术,推出了nVisual网络基础设施数字孪生管理工具,这一革命性的解决方案不仅提升了运维效率,更在成本节约和项目进度上实现了突…

cad报错:由于找不到vcruntime140.dll无法继续执行代码

在现代的工程设计中,计算机辅助设计(CAD)软件已经成为了工程师们不可或缺的工具。然而,在使用CAD软件的过程中,有时我们会遇到一些问题,其中之一就是“找不到vcruntime140.dll”的错误提示。本文将详细介绍…

智慧校园-就业管理系统总体概述

在当代教育与信息技术深度融合的背景下,智慧校园就业管理系统成为了连接学生、高校与企业的重要纽带,它以创新的服务理念和技术手段,重塑了职业规划与就业服务的传统模式。这一系统致力于为即将步入社会的学生们提供全面、个性化的支持&#…

SaaS产品运营:维护四个不同类型的合作伙伴的实战指南

在SaaS(软件即服务)行业的竞争中,与合作伙伴建立并维护良好关系至关重要。不同类型的合作伙伴对于产品的推广、市场覆盖和用户增长都起着不同的作用。如何有效维护这四种类型合作伙伴?看个案例一起学习吧。 一、合作伙伴的四种类型…

使用sorted对字典排序

有时我们需要按照字典数据的键值对进行排序,这个时候就可以用到sorted函数。 import operator dic{"testA":3,"testC":1,"testB":4,"testD":2} dicnsorted(dic.items(),keyoperator.itemgetter(0)) print(dicn) 比如我们要…

DB-GPT Docker部署

感谢阅读 拉取镜像linux判断拉取是否成功的方法windows判断拉取是否成功的方法 模型以及启动容器模型启动容器 界面如下(0.56): 拉取镜像 docker pull eosphorosai/dbgpt:latestlinux判断拉取是否成功的方法 docker images | grep "eo…

IDEA 插件推荐【一】

好使的插件可以让工作事倍功半。下面就推荐一些常用的IDEA插件,如果你有其他好使的插件,欢迎评论区留言分享出来~ 1.Key Promoter X Key Promoter X 插件,IDEA 快捷键提示工具。 在每次我们使用鼠标进行 IDEA 的某个操作,Key Pr…

AGV叉车自动化存取货场景到底有哪些?

AGV 在各种新技术发展的今天,叉车越来越智能化,agv无人叉车作为工业自动化领域的不可或缺的搬运设备,被广泛应用于各个行业中,主要用来实现重复性搬运、搬运工作强度大、工作环境恶劣、环境要求高的领域,近些年&#x…

C# OpenCvSharp 入门

摘要 C# OpenCvSharp 是一个基于OpenCV(开源计算机视觉库)的C#封装库,它提供了一组功能强大的工具和函数,用于图像处理、计算机视觉和计算机图形学等领域。通过使用OpenCvSharp库,您可以在C#应用程序中轻松地实现各种图…

【Linux】线程id与互斥(线程三)

上一期我们进行了线程控制的了解与相关操作,但是扔就有一些问题没有解决 本章第一阶段就是解决tid的问题,第二阶段是进行模拟一个简易线程库(为了加深对于C库封装linux原生线程的理解),第三阶段就是互斥。 目录 线程id…

Simulink中三相PMSM配置及使用

1. 模块介绍 Simulink提供了专门用于电力系统仿真,包括电机的动态建模和控制的电机模型,其中,永磁同步电机模块 Permanent Magnet Synchronous Machine 支持实现三相或五相永磁同步电机模拟,电机绕组采用星型连接,在这…

10个实用的Python编程实例,助你快速掌握Python技巧!

作为一门简洁易学且强大的编程语言,Python广泛应用于各个领域。本文将向大家介绍10个实用的Python编程实例,通过详细的实例代码帮助读者快速掌握Python的基础知识和常用技巧。 1. 计算阶乘 def factorial(n):if n 0:return 1else:return n * factorial…

SysML之简单介绍

SysML简介 文章目录 SysML简介1. What is SysML?2. SysML方言与UML母语之间的关系3. SysML的9种图表类型及分配表1. SysML图分类2. 分配表1. 分配2. 分配表3. 目的 1. What is SysML? Systems Modeling Language (SysML): SysML is a general-purpose system architecture mo…