小易的yolo学习笔记1
1. 目标检测基础概念
1.1 什么是目标检测
目标检测(Object Detection)是计算机视觉中的一个重要任务,通常用于多个物体的识别,可以同时处理图像中的多个实例,并为每个实例提供一个边界框和类别标签。
它的核心目标是:
- 识别图像中的物体是什么类别
- 定位这些物体在图像中的具体位置
💡 通俗理解:想象你在看一张照片,目标检测就是让计算机像人一样,不仅知道照片里有什么东西,还要知道这些东西在照片的哪个位置。
(1)目标检测面临的挑战
挑战类型 | 具体问题 | 举例说明 |
---|---|---|
目标种类和数量 | 一张图片中可能有多种不同的物体 | 一张街景照片中同时有行人、汽车、自行车、交通灯等 |
目标尺度问题 | 同一类物体在不同距离下大小差异很大 | 近处的汽车很大,远处的汽车很小 |
环境干扰问题 | 光照、遮挡、角度等因素影响检测 | 夜晚光线暗、物体被部分遮挡等 |
1.2 标注
- 在目标检测任务中,标注主要涉及的是边界框标注,即为图像中的每一个需要检测的目标物体画出一个边界框,并给定类别标签
- 在训练目标检测模型的时候,我们就需要先为数据集做标注
1.3 目标检测的核心问题
目标检测主要解决两个核心问题:
- 目标在哪里?(Where) - 位置定位
- 目标是什么?(What) - 类别识别
🎯 类比理解:就像你在人群中寻找朋友,你需要:
- 确定朋友在人群中的位置(Where)
- 确认那个人确实是你的朋友(What)
1.4 目标检测 vs 图像分类 vs 图像分割
这三种技术虽然都涉及图像理解,但各有侧重:
技术类型 | 主要任务 | 输出结果 | 应用场景 |
---|---|---|---|
图像分类 | 识别图像的主要类别 | 类别标签 | 照片分类、垃圾邮件识别 |
目标检测 | 识别并定位图像中的多个物体 | 边界框+类别 | 自动驾驶、安防监控 |
图像分割 | 像素级别的物体识别,精确地描绘物体的轮廓 | 像素级标签 | 医学影像、自动驾驶 |
更多应用场景:
- 【https://blog.csdn.net/wcl291121957/article/details/138313404】
- 【https://blog.csdn.net/wcl291121957/article/details/138318995】
(1)图像分割的两种类型
语义分割(Semantic Segmentation)
- 只识别物体类别,不区分不同实例
- 例如:所有的人都标记为"人",不区分张三李四
实例分割(Instance Segmentation)
- 不仅识别类别,还区分不同实例
- 例如:用不同颜色标记不同的人
(2)目标检测和目标分割的区别图示
- 目标检测:识别图像中存在的内容和检测其位置,如下图,以识别和检测人(person)为例
- 语义分割:对图像中的每个像素打上类别标签,如下图,把图像分为人(红色)、树木(深绿)、草地(浅绿)、天空(蓝色)标签
- 实例分割:目标检测和语义分割的结合,在图像中将目标检测出来(目标检测),然后对每个像素打上标签(语义分割)。对比上图、下图,如以人(person)为目标,语义分割不区分属于相同类别的不同实例(所有人都标为红色),实例分割区分同类的不同实例(使用不同颜色区分不同的人)
2. 目标检测的技术架构
2.1 两阶段检测方法(Two-stage)
两阶段检测开始于 2014 年左右,是目标检测领域中非常重要的一类方法,这类方法通常因为其高检测精度和可靠性而被广泛应用于各种复杂的目标检测任务中
两阶段检测将目标检测分为两个连续的步骤:
第一阶段:候选区域生成
- 使用区域提议网络(RPN)生成可能包含目标的区域
- 对图像进行初步扫描,找出"可疑"的区域
第二阶段:精确检测
- 对候选区域进行分类和边界框回归
- 确定物体的具体类别和精确位置
🔍 工作流程:
- Input:输入图像
- Conv&pooling:使用卷积神经网络(通过称这个卷积神经网络为主干神经网)做深度特征提取
- Conv-proposal:使用 RPN 网络生成候选区域,并对这些区域进行初步的分类(区分背景和目标)以及位置预测
- roi pooling:ROI池化处理,候选区域进一步精确进行位置回归和修正,对不同大小的候选区域提取固定尺寸的特征图
- fc:全连接层对候选区域的特征进行分类
- Lcls、Lreg:输出检测结果,通过分类和回归来分别完成对候选目标的类别的预测以及候选目标位置的优化,这里的类别不同于 RPN 网络的类别,这里通常会得到物体真实的类别,回归主要得到当前目标具体的坐标位置,通常表示为一个矩形框,即四个值(x,y,w,h)
代表算法:R-CNN、Fast R-CNN、Faster R-CNN
2.2 单阶段检测方法(One-stage)
单阶段检测开始于 2016 年左右,没有像 two-stage 那样先生成候选框
单阶段检测直接回归物体的类别概率和位置坐标值,无需生成候选区域:
⚡ 核心特点:
- 端到端训练
- 实时检测能力
- 速度更快
🔍 工作流程:
- Input:输入图像
- CNN:使用卷积神经网络(通过称这个卷积神经网络为主干神经网)做深度特征提取
- Lcls、Lreg:输出检测结果,通过分类和回归来分别完成对候选目标的类别的预测以及候选目标位置的优化
代表算法:YOLO系列、SSD
2.3 两种方法的对比
比如猫狗混合图:
特性 | 两阶段检测 | 单阶段检测 |
---|---|---|
主要算法 | R-CNN系列 | YOLO系列、SSD |
检测精度 | 较高 | 较低(但版本更新后不断提升) |
检测速度 | 较慢 | 较快(达到视频流检测级别) |
适用场景 | 高精度要求 | 实时应用 |
💡 选择建议:
- 需要高精度:选择两阶段方法
- 需要实时性:选择单阶段方法(如YOLO)
3. 评估指标详解
3.1 边界框(Bounding Box)
边界框是用来定位图像中检测到的物体位置的矩形框。每个检测出的物体都会被分配一个边界框,用来表示该物体在图像中的位置和大小
(1)边界框包含的信息
- 类别标签(Class Label):物体是什么(如"猫"、“车”、“人”)
- 置信度分数(Confidence Score):模型对检测结果的置信(信心)程度(0-1之间)
- 边界框坐标(Bounding Box Coordinates):矩形框的位置和大小
3.2 交并比(IoU)
IoU(Intersection over Union)是衡量模型预测框与真实框重合程度的关键评估指标
(1)IoU计算公式
两个边界框的交集面积除以它们的并集面积,公式如下:
IoU=Area of OverlapArea of Union=A∩BA∪BIoU = \frac{Area\,of\,Overlap}{Area\,of\,Union} = \frac{A∩B}{A∪B}IoU=AreaofUnionAreaofOverlap=A∪BA∩B
(2)IoU值含义
IoU值 | 含义说明 | 检测效果 |
---|---|---|
IoU = 0 | 完全不重合 | 预测失败 |
0 < IoU < 0.5 | 有一定重合但较低 | 效果一般 |
0.5 ≤ IoU < 1 | 重合度较高 | 效果较好 |
IoU = 1 | 完全重合 | 理想情况或存在过拟合风险 |
🎯 通俗理解:IoU就像两个框的"重叠程度",重叠越多,IoU越大,检测越准确。
3.3 置信度(Confidence Score)
置信度是模型对预测结果(是否包含目标物体、以及框的位置是否准确)的"信心值",取值范围0到1。
在一些经典的目标检测模型中(如 YOLO),置信度通常由两个部分组成:置信度 = Pr(Object) × 预测的 IOU
- Pr(Object)=1:边界框内有对象;Pr(Object)=0:边界框内没有对象
- 预测的 IoU:不是真实计算出来的,而是模型自己“估计”的,表示它认为这个框和真实框有多接近
在深度学习的目标检测任务中,置信度是由网络的输出层(通常包括卷积层、池化层和全连接层等)共同作用的结果
(1)置信度的组成
- 目标存在置信度:框内是否有物体的概率
- 类别置信度:物体属于某个类别的概率
- 综合置信度 = 目标存在置信度 × 类别置信度
🧠 类比理解:就像你在人群中寻找朋友,当你看到一个人时,你会给出一个"这个人是我朋友"的置信度分数。
总结:
阶段 | 置信度的计算方式 | 说明 |
---|---|---|
训练阶段 | 使用真实框(Ground Truth)计算 IoU | 模型通过对比预测框与真实框,学习如何提升置信度 |
预测阶段 | 模型无法访问真实框,置信度完全由网络直接输出 | 通过设置置信度阈值(如 0.5)过滤低质量预测框,再通过 NMS 去除重复框 |
3.4 混淆矩阵
混淆矩阵基础
混淆矩阵是一种用于评估分类模型性能的表格形式,特别适用于监督学习中的分类任务。它通过将模型的预测结果与真实标签进行对比,帮助我们直观地理解模型在各个类别上的表现
在混淆矩阵中:
列(Columns):表示真实类别(True Labels)
行(Rows):表示预测类别(Predicted Labels)
单元格中的数值:表示在该真实类别与预测类别组合下的样本数量
在目标检测任务中,混淆矩阵的构建依赖于 IoU 阈值,因为 IoU 决定了哪些预测被认为是“正确检测”,从而影响 TP、FP、FN 的统计,最终影响混淆矩阵的结构和数值
实际为正类 | 实际为负类 | |
---|---|---|
预测为正类 | TP(真正例) | FP(假正例) |
预测为负类 | FN(假反例) | TN(真反例) |
- 混淆矩阵在目标检测中的 TP、FP、FN、TN 的含义:
类型 | 定义 | 通俗解释 | 示例 |
---|---|---|---|
TP(True Positive)真正例 | 预测类别正确,且预测框与真实框的 IoU ≥ 阈值 | 模型正确识别了目标,位置也大致准确 | 模型预测这是一个“猫”,IoU=0.85,确实是一只猫 |
FP(False Positive)假正例 | 两种情况:1. 类别错误:预测类别错误,即使 IoU ≥ 阈值2. 类别正确,但 IoU < 阈值 | 模型误以为检测到了目标,但实际上错了 | 模型预测该物体为“猫”,且预测框与真实框的 IoU 为 0.4,但实际类别为“狗”;或者模型预测为“猫”,IoU 为 0.3,类别虽然正确,但定位精度未达到设定的阈值 |
FN(False Negative)假反例 | 真实存在目标,但模型没有检测出来 | 模型漏掉了真实目标 | 图片里有一只猫,但模型没检测到 |
TN(True Negative)真反例 | 图像背景区域被正确识别为“无目标” | 模型没有把背景误认为是目标 | 图像背景区域没有预测框,模型正确识别为“无物体” |
3.5 精确度和召回率
(1)核心指标
精确度(Precision)/查准率:在所有预测为正类的样本中,预测正确的比例
Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}Precision=TP+FPTP召回率(Recall)/查全率:在所有实际为正类的样本中,预测正确的比例
Recall=TPTP+FNRecall = \frac{TP}{TP + FN}Recall=TP+FNTP准确度、精确度、召回率、F1 分数定义和公式如下图:
💡 通俗理解:
- 精确度:我预测的"朋友"中,有多少真的是朋友
- 召回率:我的朋友中,有多少被我找到了
3.6 mAP(平均平均精度)
(1)PR 曲线
- PR 曲线,即精确率(Precision)- 召回率(Recall)曲线,是类别不平衡问题中评估分类模型性能的重要工具。它通过展示不同阈值下精确率与召回率的关系,帮助理解模型在不同决策边界的表现。
- PR 曲线的生成过程:
- 模型为每个样本输出预测分数或置信度,代表其属于某一类别的概率
- 设定一系列置信度阈值(如 0 到 1 每隔 0.1 一个),用于界定 “正例” 和 “负例”
- 针对每个阈值,计算对应的精确率和召回率
- 以召回率为横轴、精确率为纵轴,将各阈值下的(召回率,精确率)作为坐标点绘图,形成 PR 曲线
(2)AP
- PR 曲线上每个点表示对应召回率下的最大精确率,P=R 时为平衡点(BEP),BEP 越大或曲线越靠近右上角,模型性能越好,曲线面积也越大
- AP(Average Precision,平均精度)通过计算每个类别在不同置信度阈值下的 Precision(查准率)和 Recall(查全率)的平均值(即 PR 曲线下的面积),来综合评估模型在不同置信度阈值下的性能,值越接近 1 越好,是计算 mAP(平均平均精度)的基础
- 它衡量模型识别单个类别的表现,AP 越高,模型在该类别上的识别能力越强
(3)AP 计算
11 点插值法:只需要选取当 Recall >= 0, 0.1, 0.2, …, 1 共11个点,找到所有大于等于该 Recall 值的点,并选取这些点中最大的 Precision 值作为该 Recall 下的代表值,然后 AP 就是这 11 个 Precision 的平均值
AP=111∑r∈{0,0.1,...,1}pinterp(r)pinterp(r)=maxr~:r~≥rp(r~)r~表示大于或等于r实际召回率,并选择这些召回率对应的精确率中的最大值作为插值精确率 \mathrm{AP}=\frac{1}{11}\sum_{r\in\{0,0.1,...,1\}}p_{interp(r)}\\ p_{interp(r)}=\max_{\tilde{r}:\tilde{r}\geq r}p(\tilde{r}) \\ \tilde{r}表示大于或等于r实际召回率,并选择这些召回率对应的精确率中的最大值作为插值精确率 AP=111r∈{0,0.1,...,1}∑pinterp(r)pinterp(r)=r~:r~≥rmaxp(r~)r~表示大于或等于r实际召回率,并选择这些召回率对应的精确率中的最大值作为插值精确率
面积法:需要针对每一个不同的Recall值(包括0和1),取 ≥ 该值的最大 Precision,然后计算 PR 曲线下面积作为 AP 值,假设真实目标数为 M,recall 取样间隔为 [0, 1/M, …, M/M]
假设有 8 个目标,recall 取值 = [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]
把各块面积加起来就是 AP 值
(4)绘制图形
- 绘制 PR 曲线,计算 AP 值
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve, average_precision_score
# 真实标签与预测概率
y_true = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1, 1])
probas_pred = np.array([0.9, 0.8, 0.7, 0.6, 0.55, 0.54, 0.53, 0.52, 0.51, 0.50])
# 计算精确率、召回率和AP
precision, recall, thresholds = precision_recall_curve(y_true, probas_pred)
AP = average_precision_score(y_true, probas_pred)
print("平均精确度:", AP)
# 绘制PR曲线
plt.figure(figsize=(8, 6))
plt.plot(recall, precision, marker='o', label='PR curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend()
plt.grid(True)
plt.show()
- 运行结果:
(5)mAP
- mAP(mean Average Precision,平均平均精度) 是多个类别 AP 的平均值,用于衡量模型整体性能。
名称 | 含义 | 说明 |
---|---|---|
AP(Average Precision) | 衡量模型在单个类别上的性能 | 由 PR 曲线下面积计算,值越高性能越好 |
mAP(mean Average Precision) | 衡量模型在所有类别上的平均性能 | 所有类别 AP 的平均值,值越高整体表现越好 |
- mAP 计算步骤:
- 计算每个类别的 AP
- 对所有类别的 AP 取平均值,得到 mAP
📊 mAP的意义:mAP越高,模型在所有类别上的平均表现越好。
4. 图像分类与数据集
4.1 图像分类基础
图像分类是计算机视觉的基本任务,目标是确定图像属于预定义的哪个类别。
(1)应用场景
- 拍照识别应用
- 以图搜图检索引擎
- 自动驾驶
- 医学图像分析
- 农业监测
- 安全监控
4.2 图像分类的粒度
图像分类它的目标是将不同的图像,划分到不同的类别,实现最小的分类误差。
图像分类可以分为三个层次
分类粒度 | 特点 | 举例 |
---|---|---|
跨物种语义级别 | 识别大类别 | 区分猫、狗、汽车、飞机 |
子类细粒度 | 区分同一大类的子类 | 区分不同品种的狗、不同款式的车 |
实例级 | 识别同一物种的不同个体 | 区分不同的人脸 |
4.3 经典数据集介绍
(1)MNIST数据集
- 用途:手写数字识别
- 规模:60,000训练 + 10,000测试,28×28灰度图
- 特点:相对简单,适合初学者入门计算机视觉项目的第一个练习数据集
- 网址:【https://yann.lecun.com/exdb/mnist/?spm=5176.28103460.0.0.359a5d27w8mrLv】
(2)CIFAR-10数据集
- 用途:图像分类
- 规模:50,000训练 + 10,000测试,32x32彩色图像
- 特点:涵盖了飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、船、卡车 10 个类别物体
- 网址:【http://host.robots.ox.ac.uk/pascal/VOC/?spm=5176.28103460.0.0.359a5d27w8mrLv】
(3)CIFAR100数据集
- 用途:图像分类
- 规模:50,000训练 + 10,000测试,32x32彩色图像
- 特点:有 100 个类别(细分为 20 个超类,每个超类中有 5 个子类),每个类别下包含 600 张图像
- 网址:【http://host.robots.ox.ac.uk/pascal/VOC/?spm=5176.28103460.0.0.359a5d27w8mrLv】
(4)PASCAL VOC数据集【重点】
- 用途:目标检测、图像分割、物体分类
- 规模:20个类别
- 特点:除了图像分类之外,还包括了物体边界框的标注,YOLO系列实验大量使用
- 网址:【http://host.robots.ox.ac.uk/pascal/VOC/?spm=5176.28103460.0.0.359a5d27w8mrLv】
(5)MS COCO数据集【重点】
- 用途:图像识别、目标检测、图像分割
- 规模:80个类别,20万图像,超50万目标标注
- 特点:数据集分为训练集、验证集和测试集,YOLO系列性能验证的标准数据集
- 网站:【https://www.kaggle.com/datasets/awsaf49/coco-2017-dataset】
(6)ImageNet数据集
- 用途:大规模图像分类
- 规模:超1400万图像,21841个类别
- 特点:计算机视觉领域最大、最著名的公开图像分类数据集之一,涵盖了极为广泛的物体类别
- 网站:【https://image-net.org/】
4.4 其他数据集
(1)开源数据集
- PyTorch:【https://pytorch.org/vision/stable/datasets.html】
- Hugging Face 数据集:【https://huggingface.co/datasets】
- kaggle 数据集下载网址:【https://www.kaggle.com/datasets】
- 其他网站:
- 【https://public.roboflow.com/】
- 【https://zhuanlan.zhihu.com/p/648720525】
- 【https://www.cvmart.net/dataSets】
- 如果明确自己的项目需要使用的数据集是什么,可以直接百度关于这个数据集的百度硬盘下载
(2)外包平台
- 外包平台,比如 Amazon Mechanical Turk、阿里众包、百度数据众包、京东微工等
(3)自己采集和标注
- 通过爬虫获取数据集,然后使用 labelimg工具标注数据集
📚 数据集获取建议:
- 初学者:从MNIST、CIFAR-10开始
- 目标检测:使用PASCAL VOC、MS COCO
- 大规模训练:考虑ImageNet
5. YOLO系列发展史
5.1 YOLO的诞生背景
在YOLO出现之前,目标检测主要依赖两阶段方法(如R-CNN系列),虽然精度较高,但速度较慢,无法满足实时检测的需求。
YOLO(You Only Look Once) 是一种革命性的单阶段目标检测方法,它将目标检测视为一个回归问题,直接从完整图像中预测边界框及其对应的类别概率。与传统的两阶段目标检测器(如 R-CNN 系列)不同,YOLO 在一次评估过程中即可完成所有任务,因此具有显著的速度优势,能够实现实时检测
🚀 YOLO的突破:将目标检测从"两阶段"简化为"单阶段",实现了速度与精度的平衡。
5.2 YOLO的核心思想
YOLO的核心思想包括:
- 回归框架:将目标检测任务视为一个单一的回归问题,直接从输入图像中预测边界框的位置和类别
- 端到端优化:单一神经网络完成整个检测流程
- 实时检测:在一次前向传播中同时预测多个边界框及其对应的类别
🎯 核心优势:速度快、端到端、实时检测
5.3 YOLO系列发展历程
版本 | 发布时间 | 主要贡献者 | 核心改进 |
---|---|---|---|
YOLOv1 | 2016 | Joseph Redmon等 | 首次提出单阶段检测 |
YOLOv2 | 2017 | Joseph Redmon等 | 引入锚框、多尺度训练 |
YOLOv3 | 2018 | Joseph Redmon等 | 多尺度预测、更好的骨干网络 |
YOLOv4 | 2020 | Alexey Bochkovskiy等 | 数据增强、损失函数优化 |
YOLOv5 | 2020 | Ultralytics团队 | 工程化改进、易用性提升 |
YOLOv6 | 2022 | 美团团队 | 自蒸馏、量化优化 |
YOLOv7 | 2022 | I-Hau Yeh等 | 辅助头部、动态标签分配 |
YOLOv8 | 2023 | Ultralytics团队 | 统一框架、多任务支持 |
YOLOv9 | 2024 | Alexey Bochkovskiy等 | 可逆特征金字塔 |
YOLOv10 | 2024 | 清华大学团队 | 轻量化设计 |
YOLO11 | 2024.9.30 | Ultralytics团队 | 最新版本,覆盖YOLOv8 |
YOLO12 | 2025.2.18 | 田运杰等 | 持续优化 |
YOLO13 | 2025.6.26 | 清华大学等 | 最新发布 |
📈 发展趋势:
- 精度不断提升
- 速度持续优化
- 应用场景扩展
- 工程化程度提高
6. YOLO网络结构解析
6.1 整体架构
YOLO(You Only Look Once)是一类单阶段目标检测器(One-stage Detector),其核心特点是速度快、端到端推理。
YOLO的网络结构通常由三个主要模块组成:
输入图像 → Backbone(主干网络)→ Neck(颈部网络)→ Detection Head(检测头) → 输出结果
🏗️ 架构特点:模块化设计,每个模块职责明确
6.2 三大核心模块
(1)Backbone network(主干网络)
描述:目标检测网络最为核心的部分,主要是使用不同的卷积神经网络构建
任务:特征提取:从输入图像中提取丰富的特征信息,帮助后续模块进行目标检测
常见骨干网络:
- Darknet系列(YOLOv1-v4)
- CSP网络(YOLOv5+)
- 其他预训练网络
(2)Neck network(颈部网络)
描述:主要对主干网络输出的特征进行整合
任务:特征融合:将主干网络提取的多尺度特征进行融合,增强特征的表达能力和鲁棒性
常见颈部网络:
- FPN(特征金字塔网络)
- PAN(路径聚合网络)
- CSP-FPN、CSP-PAN
(3)Detection Head(检测头)
描述:在特征之上进行预测,包括物体的类别和位置
任务:目标检测:基于融合后的特征图,通过回归任务预测边界框的坐标,通过分类任务预测目标的类别,生成最终的检测结果,包括边界框和类别
(4)各版本网络结构对比
版本 | Backbone | Neck | Head |
---|---|---|---|
v1 | GoogLeNet | None | FC → 7×7×(2×5+20) |
v2 | Darknet19 | Passthrough | 13×13×5×(5+20) |
v3 | Darknet53 | FPN | 多尺度预测 |
v4 | Darknet53_CSP | SPP、FPN、PAN | 多尺度预测 |
v5 | Darknet53_CSP | SPP、CSP-FPN、CSP-PAN | 多尺度预测 |
🔧 学习建议:
- YOLOv1-v4:学习理论思路和优化方式
- YOLOv5+:学习实际应用和工程化
7. 实战应用与性能指标
7.1 检测速度指标
(1)前向传播耗时
前向传播耗时是指从输入图像到输出最终检测结果所消耗的总时间(单位:毫秒 ms)
检测速度包括三个阶段:
- 前处理耗时(Preprocessing):
- 图像归一化(如 0~255 → 0~1)
- 图像缩放、填充、通道转换(BGR→RGB)
- 张量格式转换(如 NHWC → NCHW)
- 网络前向传播耗时(Forward Pass):
- 模型推理过程,即从输入图像经过网络各层计算得到输出结果的时间
- 后处理耗时(Postprocessing):
- 应用非极大值抑制(NMS)
- 置信度过滤、类别筛选等
(2)FPS(每秒帧数)
FPS是指模型每秒钟可以处理的图像帧数,是衡量实时性的重要指标
FPS计算公式:
FPS=1TotalInferenceTime(s)FPS = \frac{1}{Total \quad Inference \quad Time(s)}FPS=TotalInferenceTime(s)1
实时性要求:
- 实时检测:FPS ≥ 30
- 低延迟场景:FPS ≥ 60(如无人机、自动驾驶)
- 移动端/嵌入式设备:15~25 FPS
(3)FLOPS(浮点运算次数)
FLOPS(Floating Point Operations Per Second,每秒浮点运算次数)是衡量计算设备性能的一个重要指标,特别是在高性能计算和深度学习领域。它表示设备在一秒内可以执行的浮点运算次数
单位 | 全称 | 中文含义 | 数值表示 |
---|---|---|---|
KFLOPS | Kilo FLOPS | 千次浮点运算每秒 | 10310^3103FLOPS |
MFLOPS | Mega FLOPS | 百万次浮点运算每秒 | 10610^6106FLOPS |
GFLOPS | Giga FLOPS(常用单位) | 十亿次浮点运算每秒 | 10910^9109FLOPS |
TFLOPS | Tera FLOPS | 万亿次浮点运算每秒 | 101210^{12}1012FLOPS |
PFLOPS | Peta FLOPS | 千万亿次浮点运算每秒 | 101510^{15}1015FLOPS |
⚡ 性能优化目标:在保证精度的前提下,尽可能提高FPS,降低FLOPS。
7.2 NMS后处理技术
(1)NMS(非极大值抑制)
非极大值抑制(Non-Maximum Suppression,NMS)是目标检测中常用的后处理技术,用于去除冗余的边界框,保留最有可能的检测结果
在目标检测中,模型通常会对同一目标生成多个边界框(预测框),这些边界框之间可能高度重叠。NMS 的作用就是筛选出置信度高、位置准确的边界框,抑制其他冗余的预测框
NMS 的基本思想是:对于每一个预测的类别,按照预测边界框的置信度(Confidence Score)对所有边界框进行排序,然后依次考虑每个边界框,将其与之前的边界框进行比较,如果重叠度过高,则丢弃当前边界框,保留置信度更高的那个,对于每个类别会独立进行操作
NMS步骤:
- 设定置信度阈值(通常0.5),小于阈值的目标框被过滤掉
- 将所有预测的满足置信度范围的边界框按置信度从高到低排序
- 选取最高置信度的框(不同类型分开处理)添加到输出列表,并将其从候选框列表中删除
- 对于当前正在考虑的边界框,计算其与前面已选定的边界框的重叠程度(IoU),如果当前边界框与已选定边界框的 IoU 大于某个阈值(如 0.5),则将其抑制(即不保留,重合度过高);否则保留当前边界框,并继续处理下一个边界框
- 重复上述步骤,直到所有边界框都被处理完毕
- 输出列表就是最后留下来的目标框
🎯 NMS的作用:保留最准确的检测结果,去除重复框。
8. 总结
8.1 核心要点回顾
(1)目标检测基础:
- ✅ 理解目标检测的核心任务(定位+识别)
- ✅ 掌握两种技术架构(两阶段vs单阶段)
- ✅ 熟悉关键评估指标(IoU、mAP、FPS)
(2)YOLO系列特点:
- ✅ 单阶段检测,速度快
- ✅ 端到端训练
- ✅ 实时检测能力
- ✅ 持续迭代优化
(3)实战应用:
- ✅ 选择合适的评估指标
- ✅ 理解网络结构设计
- ✅ 掌握后处理技术
🚀 结语:YOLO系列作为目标检测领域的里程碑技术,不仅推动了计算机视觉的发展,更为实际应用提供了强大的工具。通过系统学习,我们可以更好地理解目标检测技术,并在实际项目中发挥其价值。