神经网络与深度学习 笔记(四)目标检测与YOLO

一、算法评估

混淆矩阵

预测值 = 1预测值 = 0
真实值 = 1TPTN
真实值 = 0FPFN
TP:真正例,被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数
FP:假正例,被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数
FN:假负例,被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数
TN:真负例,被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数

在这里插入图片描述
基于混淆矩阵可以计算出一系列评估分类模型性能的指标,包括:

  • 准确率(Accuracy):分类正确的样本数量占总样本数量的比例。计算公式为 (TP + TN) / (TP + FP + TN + FN)。
  • 精确率(Precision):模型预测为正类别的样本中,实际为正类别的比例。计算公式为 TP / (TP + FP)。标识“挑剔”的程度。
  • 召回率(Recall):实际为正类别的样本中,模型成功预测为正类别的比例。计算公式为 TP / (TP + FN)。召回率越高,准确度越低,代表标识“通过”的程度。
  • F1分数(F1 Score):精确率和召回率的调和平均值,用于综合评估模型的性能。计算公式为 2 * (Precision * Recall) / (Precision + Recall)。

阈值

在评估分类器性能时,"阈值"是指用于判断样本属于哪个类别的临界值。对于二分类问题,通常将模型输出的连续值与阈值进行比较,根据比较结果将样本分为正类别或负类别。阈值的选择对于评估分类器性能至关重要,特别是在涉及到精确率(Precision)和召回率(Recall)等指标时。阈值的变化会直接影响分类器的精确率和召回率,因为它决定了分类器在什么样的条件下将样本划分为正类别或负类别。具体来说:

  • 提高阈值:如果增加阈值,则分类器更加谨慎地将样本划分为正类别,这可能会导致更高的精确率但更低的召回率。因为分类器更加保守,只有在非常确信时才会将样本预测为正类别,从而减少了假正例(FT)的数量,但可能错过了一些真正例(TP),增加了假负例(FN)的数量。
  • 降低阈值:相反,如果降低阈值,则分类器更容易将样本划分为正类别,这可能会导致更高的召回率但更低的精确率。因为分类器更愿意将样本预测为正类别,会捕捉到更多的真正例(TP),但也会增加假正例(FP)的数量。

PR曲线

PR(Precision-Recall)曲线是评估二分类器性能的工具,它展示了在不同阈值下分类器的精确率(Precision)和召回率(Recall)之间的权衡关系。
~~缺图片~~

上图中:

  1. 横轴是召回率(Recall),纵轴是精确率(Precision)。在 PR 曲线中,每个点代表着模型在不同阈值下的性能表现。通常情况下,随着分类阈值的变化,模型的召回率和精确率会发生变化。当阈值较高时,模型可能会更注重提高精确率,而牺牲召回率;反之,当阈值较低时,模型可能会更注重提高召回率,而牺牲精确率。
  2. 理想状态是向右上角凸起,这表示模型在同时提高精确率和召回率。PR 曲线下的面积(Area Under the Curve,AUC-PR)通常被用来衡量模型的整体性能,AUC-PR 越接近于 1,表示模型性能越好。

AP和mAP

用于评估目标检测和物体识别等任务的性能指标。

  1. Average Precision (AP):
    在这里插入图片描述
    • AP是单个类别的平均精度指标。在目标检测任务中,它衡量了在不同的置信度阈值下,检测算法对于该类别的检测结果的准确性和召回率之间的权衡关系。
    • 在计算AP时,首先根据置信度对检测结果进行排序,然后计算在每个置信度下的精确率和召回率。最后,通过对召回率-精确率曲线下的面积(PR曲线下的面积)进行积分或插值计算,得到AP值。
    • 通常情况下,AP的值范围在0到1之间,值越高表示检测算法的性能越好。
  2. Mean Average Precision (mAP):
    • mAP是多个类别的AP的平均值。在多类别目标检测任务中,我们会计算每个类别的AP,然后将所有类别的AP取平均值得到mAP。
    • mAP是一种综合性能评估指标,能够全面地评估目标检测算法在不同类别上的表现。
    • 对于不同的任务和数据集,mAP的计算方法可能会有所不同,常见的方法包括对所有类别的AP进行简单平均或加权平均。

mAP是目标检测领域中最重要的性能指标之一,因为它能够全面评估检测算法在不同类别上的表现,并且对于各种应用和数据集都具有广泛的适用性。

二、目标检测

是什么

目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
在这里插入图片描述

目标检测和分类问题的区别

  • 目的
    在这里插入图片描述
  • 数据集输出表达
    1. 分类
      • 是否有目标?
        • 有/无
      • 有什么目标?
        • C1/C2/C3
    2. 定位(检测)
      • 定位方式1
        • 对角线顶点坐标1
        • 对角线顶点坐标2
      • 定位方式2
        • 中心点坐标/长/宽

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

目标检测技术的发展

  • 解决方案
    在这里插入图片描述
  • YOLO家族发展
    一步法(two-stage):无需候选框,直接出最终结果。
    突出优点:快!
    在这里插入图片描述
  • YOLO v9性能
    在这里插入图片描述
    在这里插入图片描述

三、目标检测基本思想

1. 滑动窗口

  • 基本原理
    滑动窗口(Sliding Window)是一种在目标检测中常用的技术。它的基本思想是通过在输入图像上以固定步长和尺度移动的窗口,对图像的不同位置和尺度进行检测或识别。
    在这里插入图片描述
  • 问题
    1. 计算成本高、搜索空间大:假设图片为𝑤宽,ℎ高,识别一幅图片需要𝑇时间,则需要:𝑤 ∗ ℎ ∗ 𝑇的总时间。
      例如:图片大小448 × 448,识别一个目标需要0.05s,则:总时间= 448 ∗ 448 ∗ 0.05 ≈ 10000𝑠,约3小时!
    2. 固定窗口大小:由于目标可能存在不同的尺度,固定大小的窗口可能无法有效地检测或识别不同尺度的目标。
    3. 窗口重叠问题:为了提高检测或识别的准确性,通常需要设置较小的窗口步长,以增加窗口之间的重叠程度。但是较小的步长会导致窗口之间存在大量的重叠,增加了计算量和冗余计算。
    4. 对目标形状和姿态敏感:滑动窗口方法通常使用简单的特征描述符来表示图像中的目标,这可能导致对目标形状和姿态的敏感性较高。面对存在大量形变或姿态变化的情况,滑动窗口方法可能无法有效地检测或识别目标。
  • 滑动窗口的改进
    1. 一般图片中,大多数位置都不存在目标。可以确定那些更有可能出现目标的位置,再有针对性的用CNN进行检测——两步法(Region Proposal)。
    2. 两步法依然很费时。进一步减少出现目标的位置,将目标分类检测和定位问题合在一个网络里,即一步法(one-stage,如YOLO和SSD)。

2. 一步法基本思想

YOLO(You Only Look Once)将目标检测问题视为一个单一的回归问题,而不是将其拆分为分类和回归两个独立的问题。它的特点包括:

  1. 单网络架构:YOLO使用单个神经网络来处理整个图像,并直接输出目标的位置和类别信息。这个网络在输入图像上进行前向传播,同时在固定的网格单元上产生目标的位置和类别的预测结果。
  2. 密集预测:YOLO在图像的每个网格单元上进行密集的预测,即使目标跨越多个单元也可以一次性进行检测。这种密集预测的方式使得YOLO能够更有效地捕捉到目标的全局信息,并提高检测的准确性。
  3. 位置回归:YOLO通过在每个网格单元上预测边界框的坐标信息来实现位置回归。它直接预测边界框的中心坐标、宽度和高度,而不是预测偏移量或者边界框的位置。
  4. 多标签分类:YOLO将目标检测问题转化为一个多标签分类问题,每个网格单元预测的是一个或多个目标的类别概率。这种多标签分类的方式使得YOLO能够同时检测多个类别的目标,而不需要使用复杂的类别互斥逻辑。
  • 问题
    1. 有一个框里有多个目标,或者多个框里有一个目标,怎么办?
      多个框里有一个目标,取目标中心点所在框做检测
      一个框里有多个,暂不能解决
    2. 多类目标怎么办?
      使用独热编码扩展类别数

3. YOLO网络结构

  • YOLO网络结构概略图
    在这里插入图片描述
  • YOLO官方的模型结构图
    网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层。
    在这里插入图片描述
  • YOLO网络结构概略图
    在这里插入图片描述

4. YOLO模型处理

  • 模型输入
    YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。
    实际中,如果图片为其它尺寸,则需要resize或切割成要求尺寸。
  • YOLO模型处理:𝟕 × 𝟕网格划分
    • 将图片分割为 𝑆^2个grid(𝑆 = 7),每个grid cell的大小都是相等的
    • 每个格子都可以检测是否包含目标
    • YOLO v1中,每个格子只能检测一种物体(但可以是不同大小)
  • 模型输出
    • 输出是一个7 × 7 × 30的张量。对应7 × 7个cell
    • 每个cell对应2个包围框(bounding box, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(𝑥, 𝑦),它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度。

在下图中,每个框代表1个预测的bb,粗细代表不同的置信度,边框线越粗说明预测的置信度越高。由于图片被分成了49个框,每个框预测2个bb,因此图中有98个bb。
在这里插入图片描述
在这里插入图片描述

四、包围框与置信度

YOLO包围框

YOLO的检测中使用了 𝑠^2个框,每个框的bounding box个数为𝐵,分类器可以识别出𝐶种不同的物体,那么整个ground truth(即YOLO输出的参数量)的长度为𝑆 × 𝑆 × (𝐵 × 5 + 𝐶)
YOLO v1中,这个数量是7×7×(5×2+20) = 1470
YOLO v2和以后版本使用了自聚类的anchor box为bb,v2版本为𝐵 = 5,v3中为𝐵 = 9

处理细节

  • 归一化
    四个关于位置的值,分别是𝑥, 𝑦, ℎ和𝑤,均为整数,实际预测中收敛慢。因此,需要对数据进行归一化,使其分布在0-1之间。
    在这里插入图片描述
    本例是一个448448的图片,有33的grid,每个cell是149。目标中心点是(220,190)
  • 置信度
    置信度计算公式:
    在这里插入图片描述
    Pr(𝑜𝑏𝑗)是一个grid cell有物体的概率,IOU是预测的bb和真实的物体位置的交并比,也可以说是目标位置预测的准确度,其计算过程如下:
    在这里插入图片描述
    𝐼𝑂𝑈:下图中绿框为真实标注,其余五个颜色框为预测值,可计算对应𝐼𝑂𝑈
    在这里插入图片描述
  • 训练值(ground truth)
    Pr(𝑜𝑏𝑗)的ground truth:三个目标中红色点对应格子为1,其它不存在待检测物体中心点则为0
    在这里插入图片描述
  • 训练数据与网络输出
    在这里插入图片描述

五、YOLO的损失函数

在这里插入图片描述

  • 边界框Bounding Box对应的损失项
    在这里插入图片描述
    公式中,第二项开根号的原因是为了让误差更加显著,保证回归的精度
    在这里插入图片描述
  • 分类部分的损失
    在这里插入图片描述
  • 权重参数𝝀的取值
    YOLO的论文中给出的方案是,λcoord= 5 和 λnoobj = 0.5,也就是放大第一项和第二项的损失函数,缩小第四项的损失函数。这样做的原因是让梯度更稳定,如果grid中不含有物体,它对1,2,3,5项没有影响,如果调节第四项,会让含有物体的grid的confidence发生改变,这可能使其他项的梯度剧烈变化,从而带来模型上的不稳定。因此需要放大第一项和第二项,缩小第四项。

六、训练与NMS

非极大值抑制NMS

保留了这么多边界框,预测中一个物体可能被多个边界框包围;实际物体只对应一个边界框,如何解决个问题呢?答:NMS

  • 非极大值抑制(Non-Maximum Suppression,NMS)是一种常用的目标检测后处理技术,用于消除检测结果中的重叠较多的边界框,保留置信度最高的边界框,并过滤掉其他重叠边界框。其基本思想是在检测结果中找到具有最高置信度的边界框,然后删除与该边界框具有较大重叠区域的其他边界框。

NMS算法步骤

  1. 首先丢弃概率小于预定IOU阈值(例如0.5)的所有边界框;
  2. 对于剩余的边界框,选择具有最高概率的边界框并将其作为输出预测;
  3. 计算 “作为输出预测的边界框”,与其他边界框的相关联IoU值,舍去IoU大于阈值的边界框,其实就是舍弃与 “作为输出预测的边界框” 很相近的框;
  4. 重复步骤2,直到所有边界框都被视为输出预测或被舍弃。

NMS示例

在这里插入图片描述

  1. 首先查看与每次检测相关的概率并取最大的概率。图中选概率为0.9的方框;
  2. 进一步查看图像中的所有其他框。与当前边界框较高的IoU的边界框将被抑制。因此图中0.6和0.7概率的边界框将被抑制。(此时面包车已经只剩一个边界框)
  3. 从概率最高的所有边界框中选择下一个,在例子中为0.8的边界框;
  4. 再次计算与该边界框相连边界框的IoU,去掉较高IoU值的边界框。
  5. 重复这些步骤,得到最后的边界框0.8和0.9。

数据集训练

  • YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练和预测。
  • 训练中采用了drop out和数据增强来防止过拟合。
  • YOLO的最后一层采用线性激活函数(因为要回归bb的位置),其它层都是采用Leaky ReLU激活函数:
    在这里插入图片描述
  • YOLO v1模型的效果
    在这里插入图片描述

七、YOLO v3和v5

YOLO v3

1. 网络结构

  • 骨干网络结构DarkNet-53
    在这里插入图片描述
  • 整体网络结构
    在这里插入图片描述
  • 预测框
    每个cell生成三个预测框(anchor),维数为85 = 5 + 80
    对一个图像产生3×(13×13+26×26+52×52) = 10647个预测框
    在这里插入图片描述

2. 训练过程

  • 损失函数
    类似v1, 分为正样本回归、正样本置信度+分类和负样本置信度三部分
    在这里插入图片描述
  • 训练
    在这里插入图片描述

3. 模型结果

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

4. YOLO v3的实现

基于OpenCV和CPU

在这里插入代码片

YOLO v5

1. 网络结构

  • 新引入了CSP结构
    YOLOv5 引入了 CSPNet(Cross Stage Partial Network)结构,用于改善模型的性能和效率,CSP模块是一种特殊的网络模块,用于加强特征的跨阶段连接和信息传递。其基本思想是将特征图沿深度方向分成两部分,并在这两部分之间引入跨阶段连接,以加强特征图之间的信息交流和共享。这种结构可以有效地减轻特征图的信息丢失和梯度消失问题,并且能够更好地捕获特征图中的多尺度和多层次信息。
    在这里插入图片描述
    CSPNet 的具体结构如下:
    1. CSP模块:CSP模块由两个子模块组成,即主干网络的一部分和副干网络(Residual Path)的一部分。首先,输入特征图被分成两部分,一部分作为主干网络的输入,另一部分作为副干网络的输入。然后,这两部分特征图分别经过一系列卷积操作和残差连接,最后再通过特定的连接方式进行融合。
    2. 跨阶段连接:CSP模块中引入了跨阶段连接,即将副干网络的输出与主干网络的输出进行连接。这样,副干网络中的特征图就可以与主干网络中的特征图进行交流和共享信息,从而增强了特征的表达能力和区分度。
  • 预测框
    对一个图像产生25200个预测框:3 × (20 × 20 + 40 × 40 + 80 × 80)
    根据不同的数据集来自适应计算不同训练集中的最佳锚框值。
    在这里插入图片描述
  • 标签与anchor的分配
    网络有三层输出层,每层输出层有3个anchor,如何将每个标签分配到具体的位置上进行loss的计算呢?使用anchor和目标框的高宽比进行筛选,具体的分配规则如下:
    在这里插入图片描述
    其中𝑎𝑛𝑐ℎ𝑜𝑟𝑡 在yolov5中默认设置为4。这代表着在grid cell中预测的框的大小为对应anchor的1/4或者4倍。通过上面的方式,就可确定了哪一层的哪一个anchor对应的输出channel
    在这里插入图片描述
    2和3面积比小于4,匹配

2. 训练过程

  • 损失函数,类似于v3,分为三类
  • 回归损失采用CIOU计算
    在这里插入图片描述

3. 数据预处理

  • 数据增强
    𝑌𝑜𝑙𝑜𝑣5的输入端采用了和𝑌𝑜𝑙𝑜𝑣4一样的𝑀𝑜𝑠𝑎𝑖𝑐数据增强的方式,采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接,使模型在更小的范围内识别目标。
    在这里插入图片描述
  • Focus结构
    进入Backbone前,对图片进行切片操作,具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了四张图片(4个通道),一共12个通道(RGB)
    在这里插入图片描述

4. 模型效果

在这里插入图片描述

5. 模型实现

在这里插入代码片
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值