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

news2024/11/25 15:36:54

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 nn

class 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好难,万事开头难,一点点做起来吧.想多了都是问题,做多了都是答案,加油.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android CCodec Codec2 (五)C2Param - Ⅲ

这一节我们来看看简单参数的定义方式 1、C2SimpleValueStruct Codec2框架提供了模板类C2SimpleValueStruct来帮助我们定义非灵活数组的简单参数。C2SimpleValueStruct的定义如下&#xff1a; template<typename T> struct C2SimpleValueStruct {T value; ///< simpl…

阿里 “通义灵码” 真的 “灵吗”,全保姆级实操

最近很多朋友&#xff0c;都在关注阿里公测的“通义灵码”&#xff0c;我索性也安装了&#xff0c;准备看看它真的有说的那么“灵吗”&#xff1f; 一、安装 官网&#xff1a;https://tongyi.aliyun.com/lingma/ 安装方式&#xff1a;https://tongyi.aliyun.com/lingma/downl…

Redis 集群:引领企业级 NoSQL 数据库新潮流

一 、关系型数据库和 NoSQL 数据库 在当今的数据库领域&#xff0c;关系型数据库和非关系型数据库都占据着重要的地位。 关系型数据库 关系型数据库是建立在关系模型基础上的数据库&#xff0c;它通过表与表之间的关系来存储和管理数据。 特点 数据结构清晰&#xff1a;以二…

“微服务革命”之后...

曾几何时&#xff0c;我记得我的手指疯狂地敲打键盘&#xff0c;与庞大而杂乱的代码库搏斗。那是巨石的时代&#xff0c;代码就像古老的城堡一样&#xff0c;由一块块石头砌成一个令人印象深刻的庞然大物。 几年过去了&#xff0c;时代变了。开发人员口中的流行语变成了“微服…

基于STM32校车安全监控系统的设计(论文+源码+实物)

1 方案设计 根据设计要求&#xff0c;本设计校车安全监控系统的设计以STM32F103单片机作为主控制器&#xff0c;通过MQ传感器实现异常气体的检测&#xff0c;当异常气体浓度异常时会通过继电器打开车窗进行通风&#xff0c;以保证舒适的环境&#xff0c;通过红外传感器用于监…

EXO:StandardNode _process_tensor

目录 EXO:StandardNode _process_tensor EXO:StandardNode _process_tensor 这段代码是在处理某种分片(sharding)逻辑时使用的,特别是在处理大型模型或数据处理任务时,这些任务被分割成多个较小的部分(即分片)来并行处理。这里,代码片段关注于根据特定的调试级别(DEBU…

大数据处理从零开始————1.Hadoop介绍

1. 大数据时代背景 1.1 大数据时代到来 在微信上&#xff0c;随手点的一个赞&#xff1b;在百度上&#xff0c;随手输入的搜素关键词&#xff1b;在健康记录应用上&#xff0c;每天所产生的微信步数这些都是数据。我们每人每天都在产生大量数据。人类近些年所产生的数据比过去…

【设计模式】创建型模式——简单工厂模式

文章目录 一、创建型模式1. 包含模式1.1 工厂模式1.2 建造者模式1.3 原型模式1.4 单例模式 二、工厂模式1. 概要1.1 意图1.2 主要解决问题1.3 何时使用1.4 如何解决1.5 关键代码1.6 使用场景1.7 优点1.8 缺点1.9 简单工厂实现 2. 简单工厂模式2.1 模式结构2.2 实例2.3 模式定义…

Charles激活

简介 Charles激活码计算 激活 Help -> Register Charles 添加 Registered Name 和计算出的 License key 点击 Register Java import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Random; import java.util.Scanner;/*** program: ZK* descriptio…

开关二极管损坏如何判断

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1. 外观检查2. 测量正向压降3. 反向电阻测量4. 电路功能测试5. 高压测试6. 加热测试 前言 送给大学毕业后找不到奋…

【Java】 为什么是split 方法按点号分割是用 “ \\. “ ?

前言&#xff1a; 小知识&#xff0c;记录自用and分享。 原因分析&#xff1a; 字符串的很多方法是可以使用正则表达式的&#xff0c;这里就包括了split这个方法。 . 在正则表达式里的意思是通配符&#xff0c;表示&#xff1a;匹配任意单个字符。那么&#xff0c;当使用split…

参加 帆软 BI 上海城市 课堂(08-30培训)

参加 帆软 BI 城市 课堂&#xff08;0830&#xff09;&#xff1a; 由于目前是自由职业&#xff0c;也想学习一下新的知识 。所以参加本次的培训&#xff0c;总的来说还是比较专业。 培训在 上海 帆软的总部 环球港进行。时间是 13:30~17&#xff1a;00 老师很专业。学习中 课…

家具大卖nouhaus独立站拆解丨出海笔记

今天我们分析下一家传统外贸起家的大卖独立站&#xff1a;www.nouhaus.com 品牌背景是恒林股份&#xff08;A股603661&#xff09;旗下&#xff0c;算是有上市公司支持了。据资料显示&#xff1a;恒林股份成立于1998年&#xff0c;一年能卖出1000万件的办公椅和沙发&#xff0…

合并多个rtf文件

合并多个rtf文件&#xff0c;有2个细节&#xff1a; 1、不同文件之间加分页 2、编号的处理 选择一个目录 private void BtnImportingDirectoryBrowse_Click(object sender, EventArgs e){if (FbdlgDirectory.ShowDialog() DialogResult.OK){textBox1.Text FbdlgDirectory.S…

Linux---文件(1)---初识文件

目录 预备知识 文件操作接口 打开文件接口 重定向与文件操作关系 "w"方式与重定向 “a”方式与追加重定向 写入文件接口 读取文件接口 系统调用接口 参数解析 预备知识 我们知道&#xff0c;创建出一个空文件也要在内存中占空间。 文件文件内容文件属性 操…

raw.githubusercontent.com未能解析” 解决方案

1.操作场景 通过windows11 powershell 下载依赖包 2.报错信息如下 irm : 未能解析此远程名称: raw.githubusercontent.com 所在位置 行:1 字符: 27 & ([scriptblock]::Create((irm "https://win11debloat.raphi.re/"))) ~~~~~~~~~…

C++知识点总结(54):复杂模拟综合

复杂模拟综合 例题1. 玩具谜题2. 猴子兄弟爬山3. 浇水4. 数组旋转5. 石头剪刀布6. 巨石滚滚 例题 1. 玩具谜题 小南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈&#xff0c…

llm 是泡沫?

这篇文章不谈技术&#xff0c;只想聊聊自己这两年从事 llm 工作的一些感悟。 我个人对 llm 是一种很复杂的态度。毕竟&#xff0c;它真的击碎了我 2023 年之前所有的技术积累&#xff0c;以前在 nlp 苦心钻研的训练经验、模型结构、不同任务类型的不同处理技巧&#xff0c;好像…

个微管理撤回删除的消息都可以查看

有没有经历过误删微信消息的尴尬时刻&#xff1f;&#x1f605;或者想知道撤回的消息到底是什么内容&#xff1f;今天&#xff0c;我要向大家推荐一个多功能微管理神器&#xff0c;帮你轻松解决这些问题&#xff01;&#x1f4aa;&#x1f48c; 1️⃣ 多个账号同时在线 &#x…

nefu暑假集训3 并查集与最小生成树 个人模板+例题汇总

前言&#xff1a; 并查集与最小生成树的训练。 正文&#xff1a; 链接&#xff1a;并查集与最小生成树 - Virtual Judge (vjudge.net) 题目&#xff1a; A - 关押罪犯&#xff1a; #include <bits/stdc.h> using namespace std; const int N200005; int fa[N],d[N]; …