【深度学习项目】目标检测之YOLO系列详解(一)

news2024/12/18 3:17:28

介绍

YOLO(You Only Look Once)是一种实时目标检测算法,由Joseph Redmon等人提出。与传统的基于滑动窗口和区域提案的目标检测方法不同,YOLO将目标检测问题框架化为一个单一的回归问题,直接从图像像素预测边界框和类别概率。

以下是YOLO的一些关键特点:

  • 统一的检测过程:YOLO在单个网络中同时预测多个类别的边界框和对象概率。这使得它能够以非常高的速度运行,适用于实时应用。
  • 全局理解图像:由于YOLO是在整个图像上进行预测,因此它隐式地编码了关于类别的上下文信息。这意味着它可以在一定程度上理解图像中的对象是如何相互关联的。
  • 简单性:YOLO模型结构相对简单,训练和推理都很容易实现,并且不需要复杂的管道或额外的步骤来生成区域建议。
  • 速度与精度的平衡:虽然YOLO强调速度,但它也试图保持较高的检测精度。不同的YOLO版本在速度和准确性之间进行了优化。
  • 泛化能力:YOLO通常能够很好地泛化到新的、未见过的数据集,因为它在训练过程中学习到了广泛的特征。

YOLO有多个版本,如YOLOv2, YOLOv3, YOLOv4, YOLOv5到YOLO11,每个新版本都在尝试改进其前代产品的性能,提高检测精度和速度,同时减少错误类型,比如背景假阳性。YOLOv3引入了多尺度预测,增强了小物体的检测能力;而YOLOv4则进一步提高了检测的速度和精度,采用了更先进的激活函数和正则化技术。YOLOv5以后是由Ultralytics公司开发的,不是原始作者发布的,但是它在社区中广泛使用并且具有更好的优化和支持。

YOLOv1

YOLOv1,即原始的YOLO(You Only Look Once)模型,是2016年由Joseph Redmon等人在论文《You Only Look Once: Unified, Real-Time Object Detection》中首次提出的。YOLOv1引入了一种全新的目标检测方法,它将目标检测视为一个回归问题来解决,而不是像传统的两阶段方法(如R-CNN系列)那样依赖于区域提案。
在这里插入图片描述

以下是YOLOv1的主要特点和工作原理:

网络结构

YOLOv1使用了一个类似于GoogLeNet的卷积神经网络结构,但是简化了某些部分,并且没有采用Inception模块。这个网络包含了24个卷积层,用于特征提取,以及2个全连接层,用于预测输出。
在这里插入图片描述
在这里插入图片描述

输出表示

YOLOv1将输入图像划分为S×S个网格(grid cell)。如果一个对象的中心落到了某个网格内,那么该网格就负责预测这个对象。每个网格预测B个边界框(bounding box)和这些框的置信度分数(confidence score),以及C类条件概率(conditional class probabilities)。因此,对于每个网格单元,输出张量的形状为S×S×(B*5+C)。

  • 边界框:每个边界框包含5个预测值:x, y, w, h和置信度。其中,x和y是相对于网格单元边界的坐标,w和h是相对于整张图片的比例。
  • 置信度:置信度反映了模型对边界框内含有对象的信心程度,同时也编码了预测框与真实框之间的IoU(Intersection over Union)。
  • 类别概率:每个网格只预测一组类别概率,不论该网格预测多少个边界框。

损失函数

YOLOv1定义了一个多部分的损失函数,用来同时优化分类精度、定位误差以及边界框的置信度。损失函数由以下几个部分组成:

  • 坐标预测的平方和误差
  • 网格单元内有对象时的置信度误差
  • 网格单元内无对象时的置信度误差(权重较小)
  • 类别预测的平方和误差
    在这里插入图片描述

优点

  • 速度:YOLOv1可以在普通GPU上实现实时检测(约45帧每秒)。
  • 全局上下文信息:因为YOLOv1是在整个图像上做预测,所以它可以利用图像的全局信息来进行检测。

缺点

  • 召回率较低:由于每个网格只能预测两个边界框,所以当多个小物体位于同一个网格中时,YOLOv1可能会错过一些检测。
  • 定位误差较大:相比于其他方法,YOLOv1的定位准确性略差,特别是在预测边界框的位置时。
  • 泛化能力有限:当遇到训练集中未见过的物体排列或比例时,YOLOv1的表现可能不如预期。

尽管YOLOv1存在上述缺点,但它开创了单阶段目标检测算法的先河,并且启发了后续版本的发展,比如YOLOv2, YOLOv3等,这些版本在保持YOLO速度优势的同时,不断改进其准确性和鲁棒性。

论文思想

  1. 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
  2. 每个网格要预测B个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测C个类别的分数。
    在这里插入图片描述
    在这里插入图片描述

YOLOv2

YOLOv2,也被称为YOLO9000,是YOLO系列目标检测算法的第二个重要版本。它由Joseph Redmon和Ali Farhadi在2017年的论文《YOLO9000: Better, Faster, Stronger》中提出。相较于YOLOv1,YOLOv2进行了多项改进,提升了检测速度、精度以及模型的泛化能力。以下是YOLOv2的主要特点和改进:

改进点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 更好的准确性
  • Batch Normalization:为所有卷积层添加了批量归一化(Batch Normalization),这不仅加快了训练过程,还减少了对其他正则化方法的需求,并且提高了模型的稳定性。
  • 高分辨率分类器:YOLOv2首先在ImageNet数据集上以448x448的分辨率预训练了一个分类网络10个epoch,然后再微调到检测任务上。这样可以更好地适应高分辨率输入。
  1. 更快的速度
  • Anchor Boxes:引入了类似于Faster R-CNN的先验框(Anchor Boxes)的概念,替换了YOLOv1中的手工设计的边界框预测方式。Anchor Boxes允许每个网格单元预测多个边界框,从而提高了召回率。
  • Dimension Clusters:通过K-means聚类在训练数据集上找到最适合的Anchor Boxes尺寸,而不是随机选择,这有助于提高定位的准确性。
  • Direct location prediction:为了保持模型的稳健性,YOLOv2直接预测边界框的位置偏移量,而不是使用log-space预测。
  1. 更强的泛化能力
  • Fine-grained features:为了更好地捕捉小物体,YOLOv2从早期的卷积层中提取细粒度特征,并与最终的特征图相结合。
  • Multi-scale training:YOLOv2采用了多尺度训练策略,在不同的迭代中随机改变网络的输入图像大小,使得模型能够处理各种不同分辨率的输入图像。
  1. 更多类别支持
  • Joint classification and detection:YOLOv2通过结合WordTree结构将COCO数据集的目标检测和ImageNet数据集的分类结合起来,使得模型可以同时识别超过9000种不同类型的对象。

网络架构

YOLOv2采用了一种新的基础网络叫做Darknet-19,它由19个卷积层和5个最大池化层组成。这个网络比原来的YOLOv1更加轻量化但性能更强大。Darknet-19的设计灵感来自于VGG16,但是通过一系列优化如减少滤波器数量和增加批标准化等手段来提升效率。

在这里插入图片描述
在这里插入图片描述

Darknet-19

Darknet-19(224x224) only requires 5.58 billion operations to process an image yet achieves 72.9% top-1 accuracy and 91.2%top-5 accuracy on ImageNet.
在这里插入图片描述

YOLOv3

YOLOv3(You Only Look Once v3)是YOLO系列目标检测算法的第三个主要版本,由Joseph Redmon和Ali Farhadi在2018年的论文《YOLOv3: An Incremental Improvement》中提出。相较于之前的版本,YOLOv3引入了多项改进以提高模型的准确性和鲁棒性,同时保持了实时检测的速度优势。以下是YOLOv3的主要特点和改进:
在这里插入图片描述

主要改进

  1. 多尺度预测
    YOLOv3采用了多尺度预测的方式,在三个不同的特征层上进行边界框预测:高分辨率、中等分辨率和低分辨率。这种设计使得模型能够更好地检测不同大小的目标,特别是小物体的检测能力得到了显著提升。
  2. 特征提取网络
    使用了Darknet-53作为特征提取网络,这是一个更深的卷积神经网络,包含了53个卷积层。Darknet-53借鉴了ResNet的设计理念,通过残差块(residual blocks)来构建,这有助于缓解深层网络中的梯度消失问题,并且提高了特征提取的效果。
  3. Anchor Boxes优化
    在YOLOv3中,Anchor Boxes是基于训练数据集上的边界框尺寸使用K-means聚类算法计算得出的。与YOLOv2相比,它为每个尺度设置了9个Anchor Boxes(3个尺度,每个尺度3个),从而更加精确地适应不同尺寸的对象。
  4. 分类机制
    YOLOv3不再采用softmax函数来做类别预测,而是对于每一个边界框都独立地预测一组对象存在与否的概率以及该对象属于各个类别的概率。这种方式允许模型处理单个边界框内包含多个类别的情况,并且避免了类别不平衡的问题。
  5. 损失函数调整
    YOLOv3对损失函数进行了微调,采用了二值交叉熵损失(binary cross-entropy loss)来替代之前版本中的均方误差(mean squared error)。此外,它还分别针对分类、置信度和边界框坐标定义了不同的损失部分。
  6. 数据预处理
    YOLOv3采用了随机缩放和平移的数据增强方法,确保输入图像的尺寸变化,增强了模型的泛化能力。

网络架构

  • Darknet-53:YOLOv3的基础网络,利用残差连接(skip connections)来促进信息流动,防止梯度消失,同时也增加了网络深度。
  • 路径聚合网络(PANet):虽然不是原版YOLOv3的一部分,但在许多实现中被采纳,用于加强特征融合,从高层语义信息到低层空间信息的传递。

Darknet-53

在这里插入图片描述
在这里插入图片描述

性能提升

YOLOv3在COCO数据集上的性能表现优异,达到了更高的平均精度(mAP),并且仍然保持了实时检测的速度。它在小物体检测方面尤其有了显著进步,这是由于其多尺度预测的能力和更强大的特征提取网络所致。
在这里插入图片描述
在这里插入图片描述

损失函数调整

在这里插入图片描述
在这里插入图片描述

置信度损失

在这里插入图片描述

类别损失

在这里插入图片描述
在这里插入图片描述

定位损失

在这里插入图片描述

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

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

相关文章

SpringBoot + minio + kkfile 实现文件预览

1、容器安装kkfileviewer 1.1 下载文件 这里以kkfile 4.4.0-beta版本为例 下载kkfile安装包及Dockerfile: https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git 1.2、构建镜像 git clone https://codeup.aliyun.com/6254dee9a923b68581caaf50…

HCIE之OSPF基础(十九)

OSPF理论 一、OSPF基本原理(回顾)1. 邻居建立1.1(411)HELLO包影响邻居建立的因素。1.2 其它影响邻居建立的因素:1.3 基本配置1.4 验证命令 2 DR选举2.1 为什么选?2.2 在哪选?2.3 怎么选&#xf…

python 基于 docx 文件模板生成 docx 或 PDF 文件

需求背景 提供一个Word文档模板,使用python程序替换里边的占位符,替换内容包括文本和图片,然后输出docx或者PDF文件。 功能演示 输入示例 输出示例 实现程序 import os import shutil import subprocess import timefrom docx import Doc…

CSS 实现带tooltip的slider

现代 CSS 强大的令人难以置信 这次我们来用 CSS 实现一个全功能的滑动输入器,也就是各大组件库都有的slider,效果如下 还可以改变一下样式,像这样 特别是在拖动时,tooltip还能跟随拖动的方向和速度呈现不同的倾斜角度&#xff0c…

MybatisPlus-扩展功能

代码生成 在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。 这里…

中后台管理信息系统:Axure12套高效原型设计框架模板全解析

中后台管理信息系统作为企业内部管理的核心支撑,其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求,一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…

40 基于单片机的温湿度检测判断系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用dht11温湿度传感器检测温湿度, 通过lcd1602显示屏各个参数,四个按键分别可以增加温湿度的阈值, 如果超过阈值,则…

SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期

SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期 在SAP内部用 YYYYMMDD没有问题 外部传入参数

深度学习——激活函数、损失函数、优化器

深度学习——激活函数、损失函数、优化器 1、激活函数1.1、一些常见的激活函数1.1.1、sigmoid1.1.2、softmax1.1.3、tanh1.1.4、ReLU1.1.5、Leaky ReLU1.1.6、PReLU1.1.7、GeLU1.1.8、ELU 1.2、激活函数的特点1.2.1、非线性1.2.2、几乎处处可微1.2.3、计算简单1.2.4、非饱和性1…

YOLOv5-7.0训练过程中出现报错Example: export GIT_PYTHON_REFRESH=quiet

出现报错: This initial message can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silence|s|silent|none|n|0: for no message or exception - warn…

发布/部署WebApi服务器(IIS+.NET8+ASP.NETCore)

CS软件授权注册系统-发布/部署WebApi服务器(IIS.NET8ASP.NETCore) 目录 本文摘要VS2022配置发布VS2022发布WebApiIIS服务器部署WebApi 将程序文件复制到云服务器添加网站配置应用程序池配置dns域名配置端口阿里云ECS服务器配置19980端口配置https协议 (申请ssl证书)测试WebAp…

从零开始:如何在.NET Core Web API中完美配置Swagger文档

目录 新建项目 RestFul Swagger配置 注释展示 版本控制 Token传值 方法封装 新建项目 打开visual studio创建新项目,这里我们选择.net core web api模板,然后输入项目名称及其解决方案创建新项目 这里使用配置一些其他信息,根据自己情…

零基础开始学习鸿蒙开发-基础页面的设计

目录 1.样例图 2.逐项分析 2.1 头顶布局分析:首先我们要把第一行的图标绘制出来,一个左一个右,很明显,需要放在一个Row容器中,具体代码如下: 2.2 和头像同一行的布局,需要注意的是&#xff0c…

vscode借助插件调试OpenFoam的正确的.vscode配置文件

正确的备份文件位置: /home/jie/桌面/理解openfoam/正确的调试爆轰单进程案例/mydebugblastFoam 调试爆轰案例流体 并且工作区和用户区都是openfoam-7版本 问题:F5以debug模式启动后不停在断点 解决方法: 这里备份一下.vsode正确的配置&…

【小白包会的】使用supervisor 管理docker内多进程

使用supervisor 管理docker内多进程 一般情况下,一个docker是仅仅运行一个服务的 但是有的情况中,希望一个docker中运行多个进程,运行多个服务,也就是一个docker容器执行多个服务。 调研了一下,发现可以通过**super…

day11 性能测试(3)——Jmeter 断言+关联

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、复习 2、查看结果树 多个http请求原因分析 3、作业 4、Jmeter断言 4.1 响应断言 4.1.1 案例 4.1.2 小结 4.2 json断言 4.2.1 案例 4.2.2 小结 4.3 断言持续时间 4.3.1 案例 4.3.2 小结 4.…

热更新解决方案3 —— xLua

概述 xLua框架导入和AB包相关准备 xLua导入 其它的导入 C#调用Lua 1.Lua解析器 using System.Collections; using System.Collections.Generic; using UnityEngine; //引用命名空间 using XLua;public class Lesson1_LuaEnv : MonoBehaviour {// Start is called before the fi…

Rk3588 FFmpeg 拉流 RTSP, 硬解码转RGB

RK3588 ,基于FFmpeg, 拉取RTSP,使用 h264_rkmpp 实现硬解码. ⚡️ RK3588 编译ffmpeg参考: Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mpp Code RTSPvoid hardwave_init(AVCo

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…

OpenCV圆形标定板检测算法findGrid原理详解

OpenCV的findGrid函数检测圆形标定板的流程如下: class CirclesGridClusterFinder {CirclesGridClusterFinder(const CirclesGridClusterFinder&); public:CirclesGridClusterFinder