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

YOLO 目标检测:YOLOv5网络结构、Focus、CSP、自适应Anchor、激活函数SiLU、SPPF、C3

文章目录

YOLOv5

YOLOv5 有 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 五个版本。这几个模型的结构基本一样,不同的是depth_multiple 模型深度和 width_multiple 模型宽度这两个参数。YOLOv5n 网络是 YOLOv5系列中深度最小、特征图的宽度最小的网络。其他三种都是在此基础上不断加深,不断加宽其参数量依次上升,其效果也越来越好

在这里插入图片描述

1. YOLOv5 改进点

YOLOv5 相较于早期的 YOLO 版本进行了一系列关键改进,目的是提高模型的性能、训练效率以及推理速度。这些改进主要体现在以下几个方面:

1.1 轻量化设计

YOLOv5 采用了 轻量化设计,通过以下几种方法实现:

  • 减少模型参数:与 YOLOv4 和其他版本相比,YOLOv5 在参数量上进行了优化,通过高效的卷积结构(如 CSPNet、Bottleneck)来降低计算复杂度。
  • 更少的计算量:通过减少冗余的计算,YOLOv5 提高了处理速度,尤其是在资源有限的设备(如嵌入式设备)上表现优秀。
1.2 自动化训练流程

YOLOv5 提供了 自动化的训练流程,包括自动调整学习率、批量大小和其他训练超参数。这使得训练过程更加简单且无需进行过多手动调节。

  • 学习率自动调整:YOLOv5 使用了 OneCycleLR 调度策略,这种方法能够在训练过程中根据当前训练状态自动调整学习率,从而提高模型的收敛速度并避免过拟合。
  • 数据增强:YOLOv5 内置了丰富的数据增强策略,包括图像翻转、旋转、剪裁、亮度调整等,这些策略有助于增加训练数据的多样性,提高模型的鲁棒性。
1.3 更高效的推理

YOLOv5 在推理速度方面也进行了优化,特别是在 推理速度内存占用 上:

  • TensorRT优化:YOLOv5 支持在推理阶段使用 TensorRT 进行加速,可以显著提高模型在 NVIDIA GPU 上的运行效率。
  • ONNX 支持:YOLOv5 可以导出为 ONNX 格式,这样就可以在不同硬件平台上运行(如移动端、嵌入式设备等)。

2. Focus 模块

Focus 模块在 YOLOv5 中的作用是高效地提取输入图像中的高频特征,并降低计算量。传统的卷积神经网络通常对图像进行整个卷积处理,而 Focus 模块通过切分输入图像并进行局部卷积,原理与 Yolov2 的 passthrough 层类似,采用切片操作把高分辨率的图片(特征图)拆分成多个低分辨率的图片(特征图),即隔列采样+拼接,从而减少了计算量。

工作原理

Focus 模块将输入图像按通道进行分组,然后通过卷积操作进行特征提取。假设输入图像的大小为 H×W×CH \times W \times CH×W×C,其中 HHHWWW 是图像的高度和宽度,CCC 是通道数。Focus 模块将输入图像切分成多个小块,并通过卷积将这些块合并为更小的特征图。

具体来说,Focus 模块的处理流程如下:

  1. 图像切分:输入图像被切分成多个小块,通常通过按通道进行分组。
  2. 卷积处理:每个小块通过卷积层进行特征提取,得到更精细的局部特征。
  3. 合并特征:将每个卷积处理后的特征图合并,形成最终的输出。

具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了 4 张图片,4 张图片互补,但是没有信息丢失,这样一来,将空间信息就集中到了通道空间,输入通道扩充了 4 倍,即拼接起来的图片相对于原先的 RGB 3 通道模式变成了 12 个通道,最后将得到的新图片再经过卷积操作,最终得到了没有信息丢失情况下的二倍下采样特征图

【案例】:假设输入一张图像大小为 640x640x3

  • 第一步:640 x 640 x 3的图像输入 Focus 结构,采用切片操作

在这里插入图片描述

  • 第二步:然后进行一个连接(concat),变成 320 x 320 x 12 的特征图

  • 第三步:经过一次 32 个卷积核的卷积操作,最终输出 320 x 320 x 32 的特征图

通过这种方式,Focus 模块在不牺牲信息质量的情况下,减少了计算量。


3. 网络结构

CSP 是一种通过分段处理特征图来改善梯度流的技术。在 YOLOv5 中,CSP 被用于减少深层网络中的梯度消失问题,并增强特征提取的效率。

在这里插入图片描述

3.1 CSP 的基本原理

它的基本做法是:把输入特征划分成两部分,一部分走 残差/卷积模块,另一部分走 捷径 (shortcut),最后再合并。这样可以有效增强梯度流,并降低网络中的信息丢失。

CSP 网络的结构可以表示为:
CSP(x)=f1(x)⊕f2(x)\text{CSP}(x) = f_1(x) \oplus f_2(x) CSP(x)=f1(x)f2(x)
其中,xxx 是输入特征图,f1f_1f1f2f_2f2 是两个子网络,通过某种合并方式(如加法、拼接)得到最终结果。通过这种方式,CSP 网络在处理深层特征时能够有效避免梯度消失,增强了网络的表达能力。

3.2 CSP1_X

CSP1_X 主要用于 Backbone(主干网络),即特征提取阶段。

定义:带 shortcut(残差连接)的 CSP 模块

结构特点:

  1. 输入特征被分成两支:一支直接通过捷径;另一支进入 Bottleneck 堆叠
  2. Bottleneck 堆叠的数量为 XXX,因此记为 CSP1_X
  3. 两支在输出时进行 concat 拼接,然后再过一次卷积进行融合。

3.3 CSP2_X

CSP2_X 主要用于 Neck/Head(检测头部分),即特征融合与输出阶段。

定义:不带 shortcut 的 CSP 模块

结构特点:

  1. 输入特征同样被分成两支,但此时 Bottleneck 堆叠更轻量。
  2. 输出时采用 加法融合或拼接,但 Bottleneck 的数量和复杂度通常比 CSP1_X 少。
  3. 适合在检测头中快速融合特征,而不增加太多计算量。

4. 自适应 Anchor

YOLOv5 采用了 自适应 anchor 的策略,以提高对目标的检测能力。传统的 YOLO 模型采用的是手动设置的锚框,这些锚框可能无法适应不同数据集中的目标形状和大小。

  • 有些不用锚框计算例如yolov5u

自适应 anchor 的基本思想是根据数据集中的目标尺寸、比例等信息动态调整锚框。这意味着模型在训练过程中可以自动调整锚框的尺寸和形状,以适应不同目标的检测需求。

自适应 anchor 机制的步骤如下:

  1. 生成候选锚框:在训练开始前,YOLOv5 会自动加载训练集中的标注框。根据训练数据中目标的宽高比,自动生成候选锚框。
  2. 调整锚框:根据生成的候选锚框,使用 K-means 聚类算法对锚框进行优化,使得锚框尽量接近目标的真实大小和形状。
  3. 动态更新:在训练过程中,锚框会随着网络的学习不断进行调整,从而提高检测精度。

自适应锚框的优势是能够根据实际数据集的特点进行优化,从而提高检测精度,尤其是对于目标尺寸分布不均的数据集。


5. 激活函数

5.1 SiLU

YOLOv5 使用了 SiLU(Sigmoid-weighted Linear Unit)作为主要的激活函数。SiLU 函数的优点是相比传统的 ReLU 函数,它在训练过程中能够更好地避免梯度消失问题。

SiLU 函数的定义如下:
SiLU(x)=x⋅σ(x){SiLU}(x) = x \cdot \sigma(x) SiLU(x)=xσ(x)
在这里插入图片描述

其中,σ(x)\sigma(x)σ(x) 是 Sigmoid 函数,定义为:
σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
SiLU 函数的特点是它结合了线性和 Sigmoid 函数的优势,在训练时能够更平滑地传播梯度,从而加速收敛并提高模型性能。

5.2 Swish
  • Swish 激活函数是一个近似于 SiLU 函数的非线性激活函数,具有以下形式:
    • β\betaβ是一个可调节的参数,通常设定为 1

在这里插入图片描述

在这里插入图片描述

6. Bottleneck 结构

Bottleneck 结构是一种常用于卷积神经网络中的设计模式,目的是通过减少网络中某一层的通道数,从而降低计算量,并加快训练速度。

Bottleneck 结构通常由三个部分组成:

  1. 1x1 卷积:首先使用 1x1 卷积对输入特征图进行降维,将通道数减少。
  2. 3x3 卷积:然后使用 3x3 卷积进行特征提取,得到压缩后的特征图。
  3. 1x1 卷积:最后,使用另一个 1x1 卷积将特征图的通道数恢复到原始尺寸。
  4. 跳跃连接(Shortcut):将输入直接加到输出上,以形成残差连接

在这里插入图片描述

Bottleneck 结构的优势在于,它通过减少中间层的通道数,降低了计算复杂度,同时保留了网络的表达能力。


7. C3 模块

C3 模块是 YOLOv5 中为提高网络表达能力而设计的模块。它结合了卷积、残差连接和深度可分离卷积的优点,通过多种方式对特征图进行增强。

C3 模块包含以下几个部分:

  1. 卷积层:通过常规的卷积操作提取特征。
  2. 残差连接:通过残差连接,允许梯度更有效地反向传播,增强网络学习能力。
  3. 深度可分离卷积:减少计算量,提高特征提取的效率。
7.1 BottleneckCSP
  • 结构特点:
    • 包含多个带 shortcut 的 Bottleneck(shortcut残差连接的线)
    • 输入通道被划分,一部分直接传递,一部分经过 Bottleneck 块
  • 激活函数:LeakyReLU
  • 用途:主要用于早期 YOLOv5 的 backbone

在这里插入图片描述

7.2 C3
  • 结构特点:
    • 不再使用 shortcut(即 Bottleneck 不带残差连接)
    • 更加简洁,更适合部署
  • 激活函数:SiLU
  • 用途:广泛用于 backbone 和 neck(如 PANet)

在这里插入图片描述


8. SPPF(Spatial Pyramid Pooling Fusion)

在 YOLOv4 中,SPP 模块大概是这样:

  • 输入特征图 FFF
  • 分别通过 1×1, 5×5, 9×9, 13×13 的最大池化层;
  • 把这些池化后的结果拼接(concat),再卷积融合。

公式表示:

Fspp(1)=MaxPool1×1(F)F_{spp}^{(1)} = \text{MaxPool}_{1\times1}(F)Fspp(1)=MaxPool1×1(F)

Fspp(2)=MaxPool5×5(F)F_{spp}^{(2)} = \text{MaxPool}_{5\times5}(F)Fspp(2)=MaxPool5×5(F)

Fspp(3)=MaxPool9×9(F)F_{spp}^{(3)} = \text{MaxPool}_{9\times9}(F)Fspp(3)=MaxPool9×9(F)

Fspp(4)=MaxPool13×13(F)F_{spp}^{(4)} = \text{MaxPool}_{13\times13}(F)Fspp(4)=MaxPool13×13(F)

Fspp=Concat(Fspp(1),Fspp(2),Fspp(3),Fspp(4))F_{spp} = \text{Concat}(F_{spp}^{(1)}, F_{spp}^{(2)}, F_{spp}^{(3)}, F_{spp}^{(4)})Fspp=Concat(Fspp(1),Fspp(2),Fspp(3),Fspp(4))

问题:大核池化(如 13×13)计算量大,推理速度下降。

YOLOv5 作者对 SPP 进行优化,提出了 SPPF(SPP-Fast)

关键思想:
不用直接做大核池化,而是 重复叠加 5×5 池化,等价实现大感受野。

比如:

  • 一次 5×5 最大池化 → 感受野扩大到 5×55\times55×5
  • 两次叠加 → 等价于 9×99\times99×9
  • 三次叠加 → 等价于 13×1313\times1313×13

这样,只需要写一层 5×5 的池化,循环叠加三次,就能得到 13×13 的效果,大大减少计算。

公式:

F1=MaxPool5×5(F)F_1 = \text{MaxPool}_{5\times5}(F)F1=MaxPool5×5(F)

F2=MaxPool5×5(F1)F_2 = \text{MaxPool}_{5\times5}(F_1)F2=MaxPool5×5(F1)

F3=MaxPool5×5(F2)F_3 = \text{MaxPool}_{5\times5}(F_2)F3=MaxPool5×5(F2)

Fsppf=Concat(F,F1,F2,F3)F_{sppf} = \text{Concat}(F, F_1, F_2, F_3)Fsppf=Concat(F,F1,F2,F3)

最后再经过 1×11\times11×1 卷积进行通道融合。

在这里插入图片描述

SPP 和 SPPF 区别

在这里插入图片描述


9. 输出头(Output Heads)

YOLOv5 的输出头负责最终的检测任务,包括目标框的回归、目标类别的预测和置信度评分的生成。

  1. 类别预测:每个预测框会输出一个类别概率,表示该框属于某个类别的概率。
  2. 边界框回归:对于每个预测框,输出其位置和尺寸信息。
  3. 置信度评分:为每个预测框生成一个置信度分数,表示框内是否有目标以及目标的预测准确性。

YOLOv5 的 Backbone(CSPDarknet) 提取特征后,Neck(PAN-FPN)进一步融合多层信息,最后在 三个尺度上预测目标

  • 输入图像尺寸:通常为 640x640(或者其它尺寸,如 416x416 等)

    • 输出特征图:YOLOv5 使用大、中、小三个尺寸

    • 输出尺寸:

      • 大目标: 通常是输入图像尺寸的 1/32

      • 中目标: 通常是输入图像尺寸的 1/16

      • 小目标: 通常是输入图像尺寸的 1/8

  • 假设输入图像尺寸为640x640,具体的特征图尺寸如下:

大目标:64032×64032=20×20\text{大目标:}\frac{640}{32}\times\frac{640}{32}=20\times20\\ 大目标:32640×32640=20×20
中目标:64016×64016=40×40\text{中目标:}\frac{640}{16}\times\frac{640}{16}=40\times40\\ 中目标:16640×16640=40×40
小目标:6408×6408=80×80\text{小目标:}\frac{640}8\times\frac{640}8=80\times80 小目标:8640×8640=80×80

http://www.xdnf.cn/news/19581.html

相关文章:

  • 还在用Excel?Pandas数据处理效率翻倍
  • 好起来了!又一地公布5月软考合格人员名单!高级通过率上升2.28%!
  • 蓝桥杯算法之基础知识(4)
  • 一款为开发者而生的开源全栈LLMOps平台
  • CMake构建学习笔记23-SQLite库的构建
  • 基于Django的论坛系统设计与实现(代码+数据库+LW)
  • 国内外商用版权音乐授权平台大盘点:核心优势与选择指南
  • UniApp 实现搜索页逻辑详解
  • 基本IP保护 Swagger UI 的中间件
  • 解决Elasticsearch高亮显示被横线截断的问题
  • 【音视频】WebRTC-NACK
  • sql执行过程
  • WordPress.com 和 WordPress.org 之间的区别说明
  • 大批量文件管理操作的linux与windows系统命令行终端命令
  • SpringMVC —— Spring集成web环境和SpringMVC快速入门
  • 腾讯混元翻译模型Hunyuan-MT-7B开源:小参数量大能量,获得30项国际冠军
  • Windows---DWORD与IPVOID
  • Sentinel vs Resilience4j vs Bucket4j:分布式限流方案对比与实战
  • 【音视频】VP8 与 VP9 技术详解及与 H.264 H.265 的对比
  • 扩散模型驱动的智能设计与制造:下一场工业革命?
  • idea创建类时自动添加文档注释
  • 【技术教程】如何将文档编辑器集成至基于Node.js的网页应用程序中
  • ESLint 相关
  • 单北斗GNSS位移监测技术解析
  • 网络通信IP细节
  • 企业级架构师综合能力项目案例二(项目性能优化方案JVM+数据库+缓存+代码JUC+消息中间件架构+服务熔断降级)
  • 想找Gamma的平替?这几款AI PPT工具值得试试
  • 设计模式:命令模式(Command Pattern)
  • 从 “容器保姆” 到 “云原生王者”:K8s 全方位指南
  • 并发编程——13 线程池ThreadPoolExecutor实战及其原理分析