零基础学yolo系列

1.目标检测算法分类

基于深度学习的主流目标检测算法根据有无候选框生成阶段,分为双阶段目标检
测算法和单阶段目标检测算法两类

双阶段检测模型 将检测问题划分为两个阶段,首先产生候选区域,然后对候选区域分类并对目标位置进行精修,如R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、Mask R-CNN等模型。
单阶段检测模型 不需要产生候选区域阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,因此它们的检测速度更快,如YOLO系列、SSD系列、Retina-Net等模型。

2.目标检测评价指标

目标检测效果的主要评价指标有mAP、IoU等,而评价检测速度的指标有FPS、 FLOPs等。

2.1 mAP

mAP(mean average precision) 是 各 类 别AP的 平 均 值, 其 中AP是PR (precision-recall)曲线和坐标围起来的面积组成,用于表示不同召回率下检测的平 均正确性,是对一个特定类别下目标检测器效果的评估。mAP值越高,表明该目标
检测模型在给定的数据集上的检测效果越好。

2.2 IoU

交并比(intersection over union,IoU):针对目标检测任务,IoU度量表示的是预测的边框和原图片标注的真实边框的交叠率,是两检测框的交集比上其并集。当IoU为 1的时候则说明预测的效果达到最佳。针对检测框P 和真实边框 G ,IoU的计算公式为

2.3 FPS(frame per second)和FLOPs(floating point operations)

是常用于度量 目标检测算法速度的评价指标。其中FPS代表检测器每秒可以处理的图片帧数,数值越大代表检测速度越快。FLOPs即浮点运算数是衡量算法与模型的复杂度的指标,模型FLOPs与许多因素有关,比如参数量、网络层数、选用的激活函数等。FLOPs值越大,表明神经网络所需要的浮点运算量越大,在同等硬件的条件下速度越慢

3. 目标检测常用损失函数

目标检测模型通常包含两类损失函数:
  • 一类是分类损失,例如交叉熵损失、 Focal Loss等;
  • 另一类是位置回归损失,例如L2损失、Smooth L1 loss、IoU loss 等。
这两类损失函数用于检测模型最后一部分,根据模型输出(类别和位置)和实际标注框(类别和位置)分别计算分类损失和位置回归损失。

3.1 交叉熵损失公式

式中, M 表示类别数量; y ic 表示符号函数(0或1),如果样本 i 的真实类别等于 c
取1,否则取0; p ic 表示观测样本 i 属于类别 c 的预测概率。

3.2Focal loss

是为了缓解样本的不平衡问题,在标准交叉熵损失基础上修改得到的。其可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。 Focal loss的公式如下:

3.3 回归损失

在目标检测任务中,更多的是对真实bounding box的回归。其中,L2 损失是指均方误差损失(mean square error, MSE),表示预测值和真实值之差的平 方的平均值,其计算公式如下

3.4 IoU损失类的损失函数(GIoU、DIoU、CIoU等)

都是基于预测框和真实框之间的IoU(交并比)进行计算的,记预测框为P ,真实框为 G ,则对应的IoU可表示:
即两个框的交集和并集的比值,对应的IoU损失可定义为:

4.锚框与非极大值抑制 

4.1  锚框

锚框(anchor box)是以每个像素为中心,生成多个缩放比和宽高比不同的边界框。在目标检测中,锚框是一种用于表示可能包含目标的矩形框,通过在图像上生成多个锚框,可以同时检测多个目标,并将它们作为候选框进行后续处理,帮助目标检测算法在图像中准确地检测和定位目标。锚框的功能和作用如下所述。
① 多尺度检测:锚框可以在不同尺度下进行目标检测。通过在图像上生成一组不同尺度和宽高比的锚框,可以有效地检测不同大小和形状的目标。
② 候选框生成:锚框充当候选框(也称为区域提议)的角色。通过在图像上生成大量的锚框,可以覆盖图像中的各个位置,并提供候选目标区域供后续的分类和定位。
③ 匹配目标:通过计算锚框与真实目标框之间的重叠程度(如交并比),可以将锚框与真实目标进行匹配。匹配的标准可以是与真实目标框具有最高重叠程度的锚框,或者与真实目标框的重叠程度超过一定阈值的锚框。
④ 目标定位:通过与匹配的锚框关联,可以确定目标的位置和尺寸。锚框提供了目标的初始位置和尺寸的估计,后续的目标定位算法可以根据锚框的位置和尺寸信息进行精确的目标定位。

4.2 非极大值抑制

非极大值抑制(non-maximum suppression,NMS)是一种用于图像处理和
计算机视觉中的技术,用于在局部极大值点中选择最大值,并抑制其他非最大值点。
在目标检测中,非极大值抑制(NMS)被广泛应用于选择最可能的目标区域,并去
除重叠的候选框。非极大值抑制在目标检测中主要经过下面几个步骤:
  • 提取候选框、
  • 计算置信度得分、
  • 对置信度得分进行排序、
  • 选择最高得分的候选框、
  • 非极大值抑制、
  • 去除重叠的候选框。
直到所有候选框都被处理完毕,最终剩下的候选框就是经过非极大值抑制后的目标检测结果,它们具有高置信度得分且不会有明显的重叠。其功能效果示意图如图4-2所示。

5.YOLO

5.1 工作原理

1. 输入图像预处理

  • 将输入图像调整到统一的大小(448×448像素)。

2. 特征提取

  • 将预处理后的图像送入卷积神经网络(CNN),提取图像的特征表示。CNN通过卷积层、池化层等操作,将图像映射为高维特征图。

3. 图像划分与网格化

  • 将特征图划分为S×S个单元网格(grid cell)。每个网格负责预测该区域内可能出现的目标。

4. 边界框预测

  • 每个网格单元预测B个锚框(box),每个锚框预测以下五个回归值:

    • 边框位置:(x, y, w, h),分别表示边界框的中心点坐标(x, y)和边界框的宽度(w)与高度(h)。

    • 置信度:表示边界框包含目标的概率以及边界框的准确度。置信度的计算公式为:

      置信度 = Pr(Object) × IOU(bbox, Truth)

      其中,Pr(Object)表示边界框中包含目标的概率;IOU(bbox, Truth)表示边界框与真实标注框的交并比(Intersection over Union)。

5. 类别预测

  • 每个网格单元还会预测C个类别概率值,表示该网格中目标属于各个类别的概率。这些类别概率与边界框的置信度无关,是针对整个网格单元的预测。

6. 预测值整合

  • 每个网格单元最终预测的值为:

    5B + C

    其中:

    • 5B表示B个边界框的预测值(每个边界框5个值:x, y, w, h, 置信度)。

    • C表示类别概率值。

7. 非极大抑制(Non-Maximum Suppression, NMS)

  • 对于每个类别,使用非极大抑制算法过滤预测框:

    • 首先根据置信度对所有预测框进行排序。

    • 选择置信度最高的预测框作为当前的最优框。

    • 计算该最优框与剩余预测框的交并比(IOU),如果IOU超过设定的阈值(如0.5),则将这些预测框抑制(即移除)。

    • 重复上述过程,直到所有预测框处理完毕。

  • NMS的作用是去除重复的预测框,保留最准确的边界框。

8. 输出最终预测结果

  • 经过NMS处理后,得到每个类别的最终预测框,包括边界框的位置、类别和置信度。

5.2 yolov3 主要改进

  1. 5.2.1 多尺度预测

    • YOLOv3引入了多尺度预测机制,通过不同分辨率的特征图(13×13、26×26、52×26)来预测不同大小的物体边框:

      • 13×13:负责预测大物体。

      • 26×26:负责预测中等大小的物体。

      • 52×52:负责预测小物体。

    • 每种尺度的特征图上,每个单元格预测3个锚框(共9个锚框)。这种多尺度预测机制显著提升了对小物体的检测能力。

 

5.2.2 基础网络Darknet-53

YOLOv3采用了Darknet-53作为基础网络,结合了残差思想:

  • Darknet-53通过残差模块(Residual Blocks)避免了深层网络训练中的梯度消失问题。

  • 与ResNet相比,Darknet-53对ResNet模块进行了简化:

    • 去掉了ResNet模块的最后一层(1×1×256)。

    • 将倒数第二层(3×3×64)改为3×3×128。

5.2.3 二分类交叉熵损失

  • YOLOv3在类别预测中使用二分类交叉熵损失函数(Binary Cross-Entropy Loss),而不是YOLOv2中的Softmax损失。

  • 这种改进使得YOLOv3能够更好地处理多标签分类问题(即一个物体可能属于多个类别的情况)

5.3 Yolov5

5.4 yolov8

6.添加模块

6.1 efficientViT替换YOLOV8主干网络结构

6.1.1 effivientvit EfficientViT 的架构特点

EfficientViT 是一种结合了 Transformer 和卷积网络优点的轻量级模型,它的设计目标是高效地提取图像特征,同时减少计算量。以下是它的关键组成部分:

(1)Transformer 编码器-解码器结构

  • 原理:EfficientViT 使用了 Transformer 的编码器-解码器结构。简单来说,它通过一种特殊的机制(自注意力机制)来捕捉图像中长距离的依赖关系,比如图片中远处的物体和近处的物体之间的关系。

  • 好处:这种结构可以让模型更好地理解全局信息,而不仅仅是局部的细节。

(2)MobileViT 模块

  • 原理:在 Transformer 的编码器和解码器中,EfficientViT 使用了 MobileViT 模块。这是一种轻量级的设计,可以让模型在保持高效的同时,减少计算量。

  • 好处:它使得模型在处理高分辨率图像时不会变得特别慢。

(3)深度可分离卷积

  • 原理:EfficientViT 用深度可分离卷积代替了传统的卷积操作。这种卷积方式将标准卷积分解为两个更简单的操作,大大减少了计算量。

  • 好处:它让模型在保持性能的同时,变得更轻量化。

(4)多尺度线性注意力机制

  • 原理:EfficientViT 引入了多尺度线性注意力机制,这种机制可以在不同尺度上捕捉图像的全局上下文信息。

  • 好处:它让模型能够更好地处理不同大小的目标,同时减少计算成本

6.1.2 将 EfficientViT 替换为 YOLOv8 主干网络的优势

(1)更强的全局特征提取能力

  • 原因:EfficientViT 的 Transformer 结构可以捕捉图像中的全局信息,而传统的卷积网络(如 CSPDarknet)更擅长局部特征提取。

  • 好处:在目标检测中,全局信息可以帮助模型更好地理解场景,从而提高检测精度。

(2)更高的效率和轻量化

  • 原因:EfficientViT 使用了深度可分离卷积和线性注意力机制,这些设计大幅减少了计算量和参数量。

  • 好处:替换后的模型可以在保持高性能的同时,运行得更快,更适合在资源受限的设备上部署。

(3)更好的泛化能力

  • 原因:EfficientViT 的多尺度线性注意力机制可以让模型更好地处理不同大小的目标,而 YOLOv8 的主干网络在处理小目标时可能稍显不足。

  • 好处:替换后的模型在复杂场景下(如小目标检测)表现更好

6.1.3 如何替换 

第一步:首先,在yolov8官网下载代码并解压,地址如下:

https://github.com/ultralytics/ultralytics

第二步:

添加efficientVit.py文件,并导入

ultralytics/nn/backbone目录下,新建backbone网络文件efficientVit.py,部分内容如下:

第三步:在ultralytics/nn/tasks.py中导入刚才的efficientVit模块:

from ultralytics.nn.backbone.efficientViT import *

 

 

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

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

相关文章

本智慧监考系统

本智慧监考系统共分为4个部分,分别为:展示层、业务层、算法层和数据库。 本系统的展示层基于Vue.js框架和Ant Design Vue UI框架编写。用户通过浏览器访问前端界面来实现与系统的交互。 业务层是基于SpringBoot框架编写的Java后台服务器。该层负责本系…

从开发到部署:EasyRTC嵌入式视频通话SDK如何简化实时音视频通信的集成与应用

嵌入式设备和视频综合管理平台均支持B/S架构。在B/S架构下,传统的视频观看方式依赖于微软的OCX控件,然而OCX控件的使用正面临越来越多的挑战: 首先,用户需要安装浏览器插件、调整浏览器安全级别,并允许ActiveX控件弹出…

如何查看 Linux 服务器的 MAC 地址:深入解析与实践指南

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

RabbitMQ 3.12.2:单节点与集群部署实战指南

前言:在当今的分布式系统架构中,消息队列已经成为不可或缺的组件之一。它不仅能够实现服务之间的解耦,还能有效提升系统的可扩展性和可靠性。RabbitMQ 作为一款功能强大且广泛使用的开源消息中间件,凭借其高可用性、灵活的路由策略…

Ubuntu22.04配置cuda/cudnn/pytorch

Ubuntu22.04配置cuda/cudnn/pytorch 安装cuda官网下载.run文件并且安装/etc/profile中配置cuda环境变量 cudnn安装官网找cuda版本对应的cudnn版本下载复制相应文件到系统文件中 安装pytorch官网找cuda对应版本的pytorchpython代码测试pytorch-GPU版本安装情况 安装cuda 官网下…

动态规划算法篇:枚举的艺术

那么本篇文章就正式进入了动态规划的算法的学习,那么动态规划算法也可谓是算法内容中的一座大山,那么在大厂算法笔试乃至算法比赛中出现的频率也逐渐变高,那么可见学习好动态规划算法的一个重要性,那么对于动态规划最难理解的&…

从入门到精通:Postman 实用指南

Postman 是一款超棒的 API 开发工具,能用来测试、调试和管理 API,大大提升开发效率。下面就给大家详细讲讲它的安装、使用方法,再分享些实用技巧。 一、安装 Postman 你能在 Postman 官网(https://www.postman.com )下…

Android平台基于SmartPlayer实现多实例RTSP|RTMP播放器

在 Android开发中,实现多实例的RTSP或RTMP直播播放器是一个常见的需求,本文将介绍如何利用大牛直播SDK的SmartPlayer模块接口,快速实现Android平台上的多实例播放器。通过合理的架构设计和 API 调用,我们可以轻松地管理多个播放实…

Linux中进程的状态3 进程的优先级1

目录 X(dead) && Z(zombie) 僵尸进程 && 孤儿进程 进程的优先级 如何修改进程的优先级 我们至此还剩两种状态没有查看,X和Z状态。 X(dead) && Z(zombie) X状态是进程死亡状态,Z状态依照这个词可知是进程处于僵死状态&…

基于语音的阿尔茨海默病检测识别

摘要 阿尔茨海默病 (AD) 是一种进行性神经退行性疾病,会严重损害认知功能,导致记忆力减退和其他行为改变。它是全球第七大死因,有数百万人受到影响。早期准确检测 AD 对于改善患者预后和减缓疾病进展至关重要。机器学习…

Ubuntu添加桌面快捷方式

以idea为例 一. 背景 在ubuntu中,很多时候是自己解压的文件并没有桌面快捷方式,需要自己找到对应的目录的执行文件手动打开,很麻烦 而只需要在 /usr/share/applications 中创建自定义的desktop文件就能自动复制到桌面 二. 添加方法 创建desk…

pycharm社区版虚拟环境如何配置、如何验证配置成功

1、无配置直接新建按照以下步骤: 新建——自定义环境——类型确定为虚拟 2、以前设置过的只需要将虚拟环境配置上就行了 选择文件——设置——对应文件下的解释器——选择带.ven的解释器 如何检查安装成功? 看终端开头是否显示.venv

【有啥问啥】DeepSeek 技术原理详解

DeepSeek 技术原理详解 DeepSeek 是一款具有突破性技术的大型语言模型,其背后的技术原理涵盖了多个方面,以下是对其主要技术原理的详细介绍: 架构创新 多头潜在注意力机制(MLA) 传送门链接: DeepSeek V3中的Multi-…

Java通过ollama平台接入DeepSeek

1、配置适配jdk8的依赖 <dependency><groupId>io.github.lnyo-cly</groupId><artifactId>ai4j-spring-boot-stater</artifactId><version>0.7.0</version> </dependency>2、配置bootstrap.yml ai:ollama:api-host: http://loc…

【Ai】使用AnythingLLM访问DeepSeek,界面友好,API调用

本文假设已经安装好Ollama 如果还没安装可以看见这个https://blog.csdn.net/wlddhj/article/details/145418880 AnythingLLM是Mintplex Labs推出的一款功能强大的全栈AI应用程序&#xff1a; 功能特点 支持多种LLM和数据库&#xff1a;支持OpenAI、Azure OpenAI、AWS Bedrock…

猿大师播放器与其他网页播放RTSP方案对比有哪些优势?

1. 超低延迟播放&#xff08;300毫秒级&#xff09; - 基于VLC/FFPLAY引擎直接调用本地硬件解码&#xff0c;无需服务器转码&#xff0c;延迟低至300毫秒&#xff0c;远低于传统转码方案&#xff08;通常1-3秒&#xff09;。在消防、安防等场景中&#xff0c;毫秒级延迟可显著…

Breakout Tool

思科 CML 使用起来还是很麻烦的&#xff0c;很多操作对于习惯了 secure crt 或者 putty 等工具的网络工程师都不友好。 Breakout Tool 提供对远程实验室中虚拟机控制台与图形界面的本地化接入能力&#xff0c;其核心特性如下&#xff1a; Console 访问&#xff1a;基于 Telnet…

c语言易错题(选择)

这里给大家讲一下c语言部分遗留的选择题&#xff0c;用来巩固知识&#xff0c;一共13道题 1 答案解析 A&#xff1a;正确 不同的函数属于不同的作用域&#xff0c;因此不同的函数中定义相同名字的变量不会冲突 B&#xff1a;正确 在C语言中&#xff0c;函数的形参一般都是通过参…

《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用

专栏简介 《Python实战进阶》专栏共68集&#xff0c;分为 模块1&#xff1a;Web开发与API设计&#xff08;共10集&#xff09;&#xff1b;模块2&#xff1a;数据处理与分析&#xff08;共10集&#xff09;&#xff1b;模块3&#xff1a;自动化与脚本开发&#xff08;共8集&am…

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…