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

YOLO--目标检测基础

一、基本认知

1.1目标检测的定义

        目标检测(Object Detection):在图像或视频中检测出目标图像的位置,并进行分类和识别的相关任务。

        主要是解决图像是什么,在哪里的两个具体问题。

1.2使用场景

        目标检测的使用场景众多,比如疫情期间有是否带口罩的目标检测,现在十分火爆的智能驾驶、安防监控、人脸检测等都用到了目标检测。

1.3目标识别与标注

        目标识别包含了分类标签信息和图像坐标信息(x,y,w,h),其中(x,y)是中心点的位置坐标,w为宽度,h为高度。

        目标标注可以选择使用labelimg或者labelme ,但是常用的是labelimg,它可以直接生成txt文件,直接用在YOLO算法中。

        labelimg下载指令:

#创建虚拟环境
conda create -n labelenv python=3.9 -y
#激活虚拟环境
conda activate labelenv
#下载pyqt和sip
conda install -c conda-forge pyqt=5.15.4 sip=6.5.1 -y
#阿里云下载labelimg,注释的内容是降低Set的版本的,根据实际情况查看是否需要
#pip install setuptools==65.5.0 -i https://mirrors.aliyun.com/pypi/simple/
pip install labelimg==1.8.6 -i https://mirrors.aliyun.com/pypi/simple/
#启动labelimg开始进行图像标注
labelimg

二、网络基础

2.1目标检测方法

        这里主要介绍一步到位法:one-stage

one-stage是单阶段,一步到位,特点如下:

(1)直接从图像中提取特征并进行分类和回归,即同时进行目标分类、位置回归;

(2)计算速度快,适合实时使用;

(3)经典算法:YOLO系列、SSD。

        注意:NMS 是 Non-Maximum Suppression(非极大值抑制) 的缩写,是一种用于去除冗余检测框的关键后处理技术。 

2.2目标检测指标

2.2.1目标框指标

        目标框(Bounding Box):检测目标物体时,会带有的一个标注框,用于表示目标的位置和大小。

IoU

IoU:预选框正确性的度量指标,其中A通常表示真实框,B表示预测框。计算公式如下:

confidence

confidence:置信度,表示该框包含目标的概率以及预测框的定位准确性。

计算公式:

2.2.2精度和召回率

        在了解精度和召回率之前,我们要了解的是混淆矩阵:

         注意:这里的正类和负类不能按照平常认知来区分,只要是根据目标任务的要求来,若要求检测的是工厂里的残次品,那么此刻这里的正类就是残次品。

        准确度:预测正确的样本数与总数的比例

A = TP+TN/(TP+TN+FP+FN)

        精确度:正类中预测正确的比例

P = TP/(TP+FP)

        召回率:目标检测中找到的正类的比例

R = TP/(TP+FN)

        F1分数:精确度和召回率的平均数

F = 2*(P * R)/(P + R)

2.2.3mAP的计算

        mAP是评估模型的综合指标,主要是根据召回率和精确度进行计算的。但是暂时只记录AP的计算方法。

Top-N: 返回前N个框计算指标

AP(平均精度):

(1)根据公式计算,直接求平均值得到AP值

(2)还是会利用公式,然后根据最大值所在高度的矩形面积相加得到AP值

 

三、NMS

3.1简单介绍

        NMS(Non-Maxmum suppression)非极大值抑制:是目标检测目标库后处理的方法。

它的出现主要是为了解决对同一个检测目标出现多个目标框的问题。

如图,在最后的结果中,我们往往只需要一个最终的,最准确的目标框,所以NMS就发挥了很大的作用。

3.2运算流程

(1)设置IoU(目标框置信度阈值),一般设为0.5,小于这个值的框会被过滤,一般是用来过滤网格中心Bounding Box中没有预测到目标的目标框;

(2)根据置信度进行降序排列候选框;

(3)将置信度最大的框添加到输出列表,并将这个框从候选框中删除;

(4)候选框中的所有框与输出列表的框计算IoU,删除大于IoU阈值的框(这是因为大于阈值的框可能与目标框相似,预测的是同一个目标,这就有一个去重的意思在的感觉)

(5)重复三、四步骤,直到候选框列表为空;

(6)输出列表就是最后的目标框。

3.3 API

pred = non_max_suppression(pred,conf_thres=0.25,iou_thres=0.45,classes,agnostic_nms,max_det=max_det)

参数解释:

classes

  • 类别限制(Classes):这个参数用于指定只对特定类别的目标进行NMS操作。如果它是一个整数(例如classes=0),则仅对类别0的目标进行NMS;如果它是一个列表(例如classes=[0, 2, 3]),则仅对类别0、2、3的目标进行NMS。如果不传递该参数,NMS会对所有类别进行操作。

agnostic_nms

  • 类别无关的NMS(Class-Agnostic NMS):如果该参数设置为True,NMS会忽略目标的类别信息,所有的框会一起进行NMS处理,不论它们属于哪个类别。如果设置为False(默认值),则会分别对每个类别进行NMS操作,意味着同一类别的框才会相互抑制,而不同类别的框不会相互影响。

max_det=max_det

  • 最大检测数量(Maximum Detection):这个参数控制NMS后返回的最大框数。它限制了每张图片中最多保留多少个框(目标)。例如,max_det=100表示每张图片最多保留100个框,超出这个数量的框会被删除。

四、检测速度

4.1前传耗时

        从输入图像到输出结果所消耗的时间。单位毫秒。

4.2FPS

        FPS(frames per second),每秒钟能处理的图像数量。YOLO目标检测中要求实时监测的最低要求就是一秒钟处理30张图像。

4.3FLOPs

        浮点运算量,处理一张图像所需要的浮点运算数量。

五、整体网络结构

5.1网络结构图

简单理解: 

  • 输入图像input

    • 模型的输入是图像,图像经过后续的处理,生成预测结果。

  • 单阶段检测器(One-Stage Detector)

    • Backbone:负责提取图像的特征,通常使用卷积神经网络(CNN)来获取图像的特征表示。

    • Neck:通常由额外的网络层(如FPN,特征金字塔网络)组成,用于进一步处理特征图并增强不同尺度的信息。

    • Dense Prediction:在这个阶段,模型对图像进行密集的预测,通常会生成大量的候选框,并为每个候选框预测类别和边界框回归。

    • Detection Head:最后,模型的检测头会处理预测结果,选择最优的边界框并进行分类。

  • 双阶段检测器(Two-Stage Detector)

    • Backbone & Neck:与单阶段检测器类似,特征提取和处理。

    • Sparse Prediction:与单阶段检测器的密集预测不同,双阶段检测器会在第一阶段产生少量候选框(即稀疏预测),然后通过第二阶段(如RPN, 区域提议网络)对这些候选框进行精细调整。

5.2YOLO网络结构

        该图展示了目标检测模型的架构,模型主要是YOLOv1-v5。参数部分要注意:

FC → 7×7×(5+5+20)(v1):这是一个全连接层(Fully Connected)到7×7的输出,5表示边界框的4个坐标(x,y,h,w)加一个置信度值,20表示类别数(即分类任务中的类别数)。

13×13×5×(5+20)(v2):通过卷积层进行目标检测,每个特征图位置有5个锚框(Anchor boxes),每个锚框有5个参数(4个坐标(这四个坐标主要是预测参数----边界框回归参数(t_x, t_y, t_w, t_h))和1个置信度)和20个类别预测。

13×13×3×(5+80)(v3-v5):这个结构表示输出为3个尺度的特征图,每个尺度对应一个不同大小的特征图,预测5个锚框的坐标和80个类别。不同版本的模型在Head的结构上略有差异。

http://www.lryc.cn/news/603387.html

相关文章:

  • 计算机视觉-图像基础处理
  • TailWindCss安装使用教程
  • eudev是什么东西,有什么作用
  • 1768. 交替合并字符串
  • 无线网络优化实践
  • [学习记录]URP流程解析(2)--初始化阶段
  • 虚拟机网络修复
  • 充电宝自燃隐患引发关注:如何确保充电宝安全?
  • 门控激活函数:GLU/GTU/Swish/HSwish/Mish/SwiGLU
  • 机器学习sklearn:泰坦尼克幸存预测(决策树、网格搜索找最佳参数)
  • 【深度学习新浪潮】什么是世界模型?
  • fastApi中的ocr
  • 译 | 介绍PyTabKit:一个试图超越 Scikit-Learn的新机器学习库
  • 如何查询并访问路由器的默认网关(IP地址)?
  • 主应用严格模式下,子应用组件el-date-picker点击无效
  • 【Dify】-进阶14- 用 Dify 搭建法律文档解析助手
  • Vue.js 指令系统完全指南:深入理解 v- 指令
  • 智能图书馆管理系统开发实战系列(一):项目架构设计与技术选型
  • Ubuntu上开通Samba网络共享
  • Ambari 3.0.0 全网首发支持 Ubuntu 22!
  • Kafka——消费者组重平衡全流程解析
  • cpolar 内网穿透 ubuntu 使用石
  • Spark SQL 数组函数合集:array_agg、array_contains、array_sort…详解
  • 【MySQL】从连接数据库开始:JDBC 编程入门指南
  • Vim与VS Code
  • 【CodeTop】每日练习 2025.7.29
  • LibTorch使用-基础版
  • Jetpack - Room(Room 引入、Room 优化)
  • Spring Boot 自动配置:从 2.x 到 3.x 的进化之路
  • 牛顿拉夫逊法PQ分解法计算潮流MATLAB程序计算模型。