YOLO缺陷检测学习笔记(2)

2024-09-01 01:20
文章标签 学习 笔记 检测 yolo 缺陷

本文主要是介绍YOLO缺陷检测学习笔记(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

YOLO缺陷检测学习笔记(2)

    • 残差连接
      • 1. **YOLO 的残差连接结构**
      • 2. **YOLO 使用残差连接的目的**
      • 3. **YOLO 中的残差块**
      • 4. **YOLOv3 和 YOLOv4 的残差连接架构**
    • YOLO网络架构概述
      • 1. 特征提取网络
      • 2. 预测头(Detection Head)
      • 3. 后处理(Post-processing)
      • YOLOv3/v4的改进
        • YOLOv3
        • YOLOv4
    • Softmax
      • Softmax 的性质:
      • Softmax 在多分类中的应用:
      • 举例:
    • Bag of Freebies (BOF)
    • Bag of Specials (BOS)
    • PAN(Path Aggregation Network)
      • 工作原理
      • 优势
      • 应用
    • MISH
      • MISH 激活函数
      • MISH 激活函数的特点
      • 性能比较
      • 应用示例

残差连接

在 YOLO(You Only Look Once)网络的后续版本(如 YOLOv3、YOLOv4)中,残差连接(Residual Connection)被引入以改进网络的深度和性能。残差连接最初由 ResNet 提出,旨在解决深度网络的梯度消失问题,同时提高网络的训练效率和性能。在 YOLO 中使用残差连接的主要目的是增强特征提取能力并保持稳定的梯度传播,尤其是在处理复杂场景时。

1. YOLO 的残差连接结构

在 YOLO 中,残差连接的作用类似于 ResNet,它通过在某些层之间跳过连接输入,直接将输入信息传递到后面的层。这可以避免信息在深层网络中丢失。对于 YOLOv3 及之后的版本,通常在每一个卷积层后引入残差块(Residual Block)。残差块的结构如下:

y = f ( x ) + x y = f(x) + x y=f(x)+x

其中:

  • x x x 是输入特征,
  • f ( x ) f(x) f(x) 是经过一系列卷积、Batch Normalization(BN)和激活函数(Leaky ReLU)后的输出,
  • y y y 是残差块的输出,通过将输入 x x x 和卷积变换后的特征 f ( x ) f(x) f(x) 相加得到。

2. YOLO 使用残差连接的目的

引入残差连接的主要目的有以下几点:

  • 改善梯度传播:在深层神经网络中,梯度随着网络深度的增加可能会逐渐变得非常小(即梯度消失问题)。残差连接允许梯度更稳定地从网络后层反向传播回前层,减轻了这一问题。

  • 提升模型性能:YOLO 的残差块帮助模型保留更多的低层特征,使得网络在处理不同尺度和复杂性的目标时更有效。尤其是对于小目标,残差连接可以让模型保留更多的细节信息。

  • 简化训练过程:残差连接使得网络的训练更加稳定,允许模型使用更深的网络架构(如 YOLOv3 中引入了 53 层深的 Darknet-53 作为特征提取器),而不会导致性能下降或训练困难。

3. YOLO 中的残差块

在 YOLOv3 和 YOLOv4 中,残差块的结构与 ResNet 中的残差块非常相似,通常包括两个卷积层、Batch Normalization 和 Leaky ReLU 激活函数。具体步骤如下:

  1. 输入特征 x x x 进入第一个卷积层,进行卷积操作。
  2. 卷积后的特征通过 Batch Normalization 和 Leaky ReLU 激活函数进行非线性变换。
  3. 经过第二个卷积层后,再次通过 Batch Normalization 和 Leaky ReLU 激活。
  4. 最后,将输入 x x x 与变换后的特征 f ( x ) f(x) f(x) 相加,得到残差块的输出。

这种结构允许网络在进行非线性变换的同时,保留原始输入的信息。

4. YOLOv3 和 YOLOv4 的残差连接架构

  • YOLOv3 使用了 Darknet-53 作为骨干网络,Darknet-53 是由 53 层卷积组成的深度网络,其中多个残差块相互堆叠而成。每个残差块可以帮助模型在深层次上提取更丰富的特征,同时保持输入信息的完整性。

  • YOLOv4 继续优化了残差连接,并结合了 CSPNet(Cross Stage Partial Network)结构,在保持性能的同时减少计算复杂度。这使得 YOLOv4 的推理速度更快,但检测效果更好。

  • YOLO(You Only Look Once)是一种实时目标检测算法,它通过将整个图像作为输入,并在一次前向传播中同时进行分类和定位。YOLO的网络架构简洁高效,能够在保持较高准确率的同时,实现实时检测。

YOLO网络架构概述

YOLO的网络架构可以分为三个主要部分:

  1. 特征提取网络:用于提取输入图像中的特征。
  2. 预测头(Detection Head):基于提取的特征,预测目标的边界框和类别。
  3. 后处理(Post-processing):将预测结果进行筛选和优化,得到最终的检测结果。

1. 特征提取网络

YOLO的特征提取网络是一个卷积神经网络(CNN),通常基于经典的网络架构(如Darknet、ResNet等)。这个部分的主要任务是从输入的图像中提取高级特征。

  • 输入尺寸:YOLO通常接受尺寸固定的图像输入,如 $416 \times 416$
  • 卷积层和池化层:通过堆叠卷积层和池化层,逐步提取图像的不同层次特征。卷积层使用不同的卷积核大小来捕捉不同尺度的特征。
  • 残差连接:从YOLOv3开始,网络引入了残差连接,灵感来自ResNet。这种结构有助于缓解深度网络中的梯度消失问题。

特征提取部分的输出是一个特征图,它总结了输入图像中的信息,并传递到预测头进行进一步处理。

2. 预测头(Detection Head)

YOLO的关键在于其创新的检测头设计,它通过回归来同时预测每个区域的边界框和类别。每个位置预测的内容包括:

  • 边界框坐标:中心点 (x, y) 和宽高 (w, h)
  • 置信度(Confidence):边界框内是否包含物体的概率。
  • 类别概率(Class Probability):目标属于每个类别的概率。

具体的步骤为:

  • 将特征图划分为 $S \times S$ 个网格,每个网格预测多个边界框。
  • 每个边界框包含预测的 (x, y),宽高 (w, h),以及一个置信度分数。
  • 置信度分数反映该框中包含物体的概率和边界框的精度。
  • 每个边界框同时预测多个类别的概率,用于确定目标的类别。

3. 后处理(Post-processing)

YOLO的后处理步骤包括:

  • Non-Maximum Suppression(NMS):在同一目标的多个重叠边界框中,保留置信度最高的框,并去除冗余框。
  • Thresholding:根据置信度阈值,筛选掉置信度较低的预测结果。

YOLO使用的是一种全局的框架来检测目标,它在一次前向传播中完成所有的目标预测。这种架构让YOLO相比其他目标检测算法,如R-CNN、Faster R-CNN,具有更快的检测速度。

YOLOv3/v4的改进

YOLOv3
  • 多尺度预测:YOLOv3在不同尺度上进行检测,适应不同大小的目标。这是通过使用FPN(特征金字塔网络)的思想来提高对小目标的检测效果。
  • 残差网络(ResNet):YOLOv3引入了残差连接,使得更深的网络更容易训练,提升了检测效果。
YOLOv4
  • CSPDarknet53 Backbone:YOLOv4使用了CSPNet(Cross Stage Partial Network)架构,进一步提升了模型的准确率和速度。
  • Bag of Freebies (BoF):YOLOv4在训练过程中使用了一些免费的增强技巧,如Mosaic数据增强、DropBlock正则化等。

Softmax

Softmax 是一种常用于多分类问题的激活函数,通常出现在深度学习模型的输出层。它的作用是将一个包含未归一化数值(即 logits)的向量转换为概率分布,即每个输出值的范围都在 [ 0 , 1 ] [0, 1] [0,1] 之间,并且这些输出值的和为 1。这样就可以表示每个类别的预测概率。

Softmax 函数的定义如下:

σ ( z i ) = e z i ∑ j = 1 N e z j \sigma(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{N} e^{z_j}} σ(zi)=j=1Nezjezi

其中:

  • z i z_i zi 是输入向量中的第 i i i 个元素,
  • N N N 是输出类别的数量,
  • e e e 是自然常数。

Softmax 的性质:

  1. 归一化:输出的概率总和为 1,因此可以直接用作分类问题中的概率。
  2. 数值稳定性:计算过程中可能会出现数值溢出问题,尤其是在 logits 非常大的情况下。通常通过减去输入中的最大值来避免这种情况,公式改写为:

σ ( z i ) = e z i − max ⁡ ( z ) ∑ j = 1 N e z j − max ⁡ ( z ) \sigma(z_i) = \frac{e^{z_i - \max(z)}}{\sum_{j=1}^{N} e^{z_j - \max(z)}} σ(zi)=j=1Nezjmax(z)ezimax(z)

Softmax 在多分类中的应用:

Softmax 通常用于多分类问题的输出层,比如在分类任务中,将模型的最终输出通过 Softmax 转换为各个类别的概率,然后根据概率的大小来决定最终的分类结果。

举例:

假设我们有一个 3 类分类问题,模型的输出 logits 为:
z = [ 2.0 , 1.0 , 0.1 ] z = [2.0, 1.0, 0.1] z=[2.0,1.0,0.1]

经过 Softmax 转换后的结果为:
σ ( z ) = [ e 2.0 e 2.0 + e 1.0 + e 0.1 , e 1.0 e 2.0 + e 1.0 + e 0.1 , e 0.1 e 2.0 + e 1.0 + e 0.1 ] \sigma(z) = \left[ \frac{e^{2.0}}{e^{2.0} + e^{1.0} + e^{0.1}}, \frac{e^{1.0}}{e^{2.0} + e^{1.0} + e^{0.1}}, \frac{e^{0.1}}{e^{2.0} + e^{1.0} + e^{0.1}} \right] σ(z)=[e2.0+e1.0+e0.1e2.0,e2.0+e1.0+e0.1e1.0,e2.0+e1.0+e0.1e0.1]

Bag of Freebies (BOF)

BOF指的是一种通过改进模型训练过程或数据增强技术来提升模型性能的方法,而无需增加推理时的计算量或模型复杂度。BOF 主要集中在优化训练流程和提升模型鲁棒性,而不改变推理时的架构或计算成本。

Bag of Freebies 的例子包括:

  1. 数据增强:例如随机裁剪、旋转、平移等方法,使得模型在训练时能够看到更多的变体,提高模型的泛化能力。
  2. 正则化技术:像 Dropout、Label Smoothing 等,能够在训练过程中防止过拟合。
  3. 损失函数的改进:例如 Focal Loss、IoU-based 损失等,能够帮助模型更好地优化目标检测任务。

通过这些“免费”的技术,可以在不增加推理时的开销的情况下,提高模型的准确性和鲁棒性。

Bag of Specials (BOS)

是目标检测算法中的一种技术,类似于 Bag of Freebies (BOF),其目标是通过在训练过程中不增加推理时间的情况下提升模型性能。与 BOF 强调优化已有数据的使用方式不同,BOS 更注重特征提取或网络结构的调整。具体来说,它可以通过设计特定的网络结构、增加有效的层次等方式来优化性能。

BOS 常被用于卷积神经网络(CNN)和 YOLO 等目标检测算法中,以提高检测精度而不增加计算开销。这些“specials”通常包括创新的激活函数、归一化层、或者注意力机制,帮助模型更好地学习目标特征。
PAN(Path Aggregation Network)是一种用于目标检测任务的网络架构,旨在增强特征图的表达能力和上下文信息。PAN 主要通过路径聚合机制来结合不同层次的特征信息,从而提高检测精度。以下是 PAN 的核心概念和工作原理:

PAN(Path Aggregation Network)

PAN(Path Aggregation Network)是一种用于目标检测任务的网络架构,旨在增强特征图的表达能力和上下文信息。PAN 主要通过路径聚合机制来结合不同层次的特征信息,从而提高检测精度。以下是 PAN 的核心概念和工作原理:

  1. 路径聚合
    – PAN 通过将不同层次的特征图进行融合,以利用不同层次的语义信息。这种机制能够捕捉到更加丰富的上下文信息,并且加强了特征图的表达能力。

  2. 特征融合
    – PAN 通过多种方式将高层特征(语义信息更丰富)与低层特征(包含更多的空间细节)进行融合。这样的融合使得检测器可以更好地处理不同尺度的目标。

工作原理

  1. 特征提取
    – 从图像中提取不同层次的特征图。高层特征通常语义信息丰富但空间分辨率低,低层特征则空间分辨率高但语义信息较少。

  2. 特征融合
    – 使用路径聚合网络将这些不同层次的特征进行融合。常见的融合方式包括自底向上的路径聚合和自顶向下的路径聚合。

  3. 自底向上聚合
    – 从低层特征图开始,通过卷积和上采样等操作,将低层特征逐步向高层特征图传递,直到达到目标分辨率。

  4. 自顶向下聚合
    – 从高层特征图开始,通过卷积和下采样等操作,将高层特征逐步向低层特征图传递。这有助于融合高层的语义信息。

  5. 特征融合和预测
    – 将融合后的特征图用于目标检测模型进行预测。通过这种特征融合机制,PAN 可以提高模型对不同尺度和复杂背景目标的检测能力。

优势

  • 增强特征表达能力:通过融合不同层次的特征,PAN 能够更好地捕捉目标的多尺度信息。
  • 提高检测精度:路径聚合机制可以提升对不同尺寸和背景复杂度目标的检测效果。
  • 适应性强:适用于各种目标检测任务,包括目标定位和分类。

应用

PAN 主要用于目标检测任务中的特征图增强,例如在像 YOLO 和 Faster R-CNN 等目标检测模型中,PAN 可以作为一种有效的特征融合策略,提升模型的检测精度和鲁棒性。

MISH

MISH(Monotonic Inverted-Swish)是一种激活函数,用于提升深度神经网络的性能。它是 Swish 函数的改进版,具有更好的性能和稳定性。

MISH 激活函数

MISH 函数定义为:
MISH ( x ) = x ⋅ tanh ⁡ ( softplus ( x ) ) \text{MISH}(x) = x \cdot \tanh(\text{softplus}(x)) MISH(x)=xtanh(softplus(x))

其中:

  • softplus ( x ) \text{softplus}(x) softplus(x) 是一个平滑的修正线性单元(ReLU)函数,定义为:
    softplus ( x ) = log ⁡ ( 1 + e x ) \text{softplus}(x) = \log(1 + e^x) softplus(x)=log(1+ex)
  • tanh ⁡ ( x ) \tanh(x) tanh(x) 是双曲正切函数,定义为:
    tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex

MISH 激活函数的特点

  1. 平滑性

    • MISH 函数是光滑且连续的,有助于减少梯度消失和梯度爆炸的问题。
  2. 单调性

    • 由于 softplus \text{softplus} softplus 函数和 tanh ⁡ \tanh tanh 函数都是单调递增的,MISH 函数也具备单调性,这有助于保持网络的稳定性。
  3. 非线性

    • MISH 函数在输入为负时表现出不同于 ReLU 的非线性行为,这有助于增强网络的表达能力。
  4. 自适应性

    • MISH 可以在不同的输入范围内自适应地调整激活值,提供更多的信息和更好的特征表示。

性能比较

与传统的 ReLU 激活函数相比,MISH 在多个任务上(如图像分类、目标检测)通常能够提供更好的性能。这是因为 MISH 在处理负值和较小值时比 ReLU 更加柔和,从而能够更好地保留有用的信息。

应用示例

在深度学习框架中,MISH 激活函数可以通过自定义层或函数来实现。例如,在 PyTorch 中,可以自定义 MISH 激活函数如下:

import torch
import torch.nn as nnclass Mish(nn.Module):def forward(self, x):return x * torch.tanh(torch.nn.functional.softplus(x))# 使用 MISH 激活函数的示例
mish = Mish()
input_tensor = torch.tensor([1.0, -1.0, 0.0])
output_tensor = mish(input_tensor)
print(output_tensor)

在这里插入图片描述

感觉YOLO好难,万事开头难,一点点做起来吧.想多了都是问题,做多了都是答案,加油.

这篇关于YOLO缺陷检测学习笔记(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125546

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识