菜单

构建模块

相关源文件

本文档提供了对构成 YOLOv5 架构的基本神经网络组件的详细解释。这些构建模块是实现 YOLOv5 对象检测功能的基本要素。有关不同模型变体(YOLOv5s、YOLOv5m 等)的信息,请参阅模型变体

1. 构建模块概述

YOLOv5 的架构建立在一系列精心设计的神经网络组件之上,每个组件在检测流程中都有特定的用途。这些构建模块是模块化的,可以以不同的方式组合以创建各种模型配置。

来源:models/common.py73-1123

2. 基本卷积模块

YOLOv5 架构的基础由几种卷积模块变体组成,每种都针对特征提取过程中的特定目的而设计。

2.1 标准卷积 (Conv)

Conv 类实现了一个标准的卷积,带有批标准化和激活函数(默认为 SiLU)。这是网络中最常用的构建模块。

主要功能

  • 可配置的核大小、步幅、填充和组数
  • 默认使用批标准化
  • 支持不同的激活函数
  • 包含高效的 forward_fuse 方法以优化推理

来源:models/common.py73-92

2.2 深度卷积 (DWConv)

DWConv 类通过分别对每个输入通道应用滤波器来扩展标准卷积,这大大降低了计算量。

主要功能

  • 通过将滤波器独立应用于每个通道来降低计算成本
  • 使用输入和输出通道的最大公约数 (GCD) 进行分组
  • 继承自标准 Conv

来源:models/common.py94-101

2.3 Focus 模块

Focus 模块通过切片和重新排列输入张量,将空间信息高效地转换为通道空间,从而在减小空间尺寸的同时增加通道维度。

主要功能

  • 高效地将空间维度(h,w)缩小 2 倍,同时将通道增加 4 倍
  • 通过重新排列像素而不是池化来保留信息
  • 后面跟着一个卷积层来处理重新排列的特征

来源:models/common.py343-357

2.4 Ghost 卷积 (GhostConv)

GhostConv 通过使用廉价操作创建“幽灵”特征,以更少的参数生成更多特征图。

主要功能

来源:models/common.py360-375

3. 瓶颈和 CSP 模块

瓶颈和交叉阶段部分 (CSP) 模块对于 YOLOv5 中高效的深度特征提取至关重要。

3.1 瓶颈模块

Bottleneck 模块实现了标准的瓶颈结构,包含两个卷积和一个可选的残差连接。

主要功能

  • 使用 1×1 卷积减小通道数,使用 3×3 卷积进行处理
  • 可选的快捷连接(当输入和输出通道匹配时)
  • 在模型中广泛使用,用于高效的特征处理

来源:models/common.py164-181

3.2 交叉阶段部分 (CSP) 架构

YOLOv5 在许多模块中使用了交叉阶段部分 (CSP) 模式,该模式将输入分成两部分,仅处理一部分通过密集块。

主要功能

  • 通过对部分瓶颈进行处理来降低计算成本
  • 增强梯度流和特征重用
  • 在降低计算成本的同时保持表征能力

来源:models/common.py184-207

3.3 C3 模块及其变体

C3 模块是 YOLOv5 对带有三个卷积的 CSP 瓶颈的实现。它有几个专门的变体用于不同的目的。

C3 变体

  • C3x:使用交叉卷积进行增强特征提取
  • C3TR:集成 Transformer 块以进行基于注意力的特征处理
  • C3SPP:集成空间金字塔池化以进行多尺度特征提取
  • C3Ghost:使用 Ghost 瓶颈进行参数高效处理

来源:models/common.py231-293

4. 空间金字塔池化

空间金字塔池化模块通过在不同核大小下进行池化来提取多尺度特征。

4.1 SPP 模块

SPP (空间金字塔池化) 模块将不同大小的最大池化操作应用于输入并连接结果。

主要功能

  • 使网络能够“看到”多尺度的特征
  • 使用不同核大小的最大池化(默认:5、9、13)
  • 所有池化操作都保持空间维度(填充 = 核/2)

来源:models/common.py296-314

4.2 SPPF 模块 (快速 SPP)

SPPF (快速 SPP) 模块通过顺序池化操作实现与 SPP 相同的功能,从而降低了计算成本。

主要功能

  • 比 SPP 更高效,功能相同
  • 顺序应用最大池化而不是并行应用
  • 显著降低计算复杂度
  • 默认核大小为 5

来源:models/common.py317-340

5. 注意力和 Transformer 模块

YOLOv5 采用了基于 Transformer 的注意力机制,以增强特征提取。

5.1 TransformerLayer

TransformerLayer 实现了一个修改版的 Transformer 编码器,具有多头自注意力机制和前馈网络。

主要功能

  • 多头自注意力机制
  • 简化设计,无 LayerNorm 以提高性能
  • 带残差连接的前馈网络

来源:models/common.py114-135

5.2 TransformerBlock

TransformerBlock 将 Transformer 层集成到 YOLOv5 架构中,并进行适当的维度处理。

主要功能

  • 可选的输入卷积以调整通道数
  • 可学习的位置嵌入
  • 一系列 Transformer 层
  • 将输入张量重塑为序列格式和从序列格式重塑

来源:models/common.py138-161

6. 实用模块

YOLOv5 包含各种用于张量操作和任务特定操作的实用模块。

6.1 维度操作

ContractExpand 模块在不丢失信息的情况下操作空间和通道维度。

主要功能

  • Contract:减小空间维度,同时增加通道数
  • Expand:增大空间维度,同时减小通道数
  • 两者都通过重塑操作来保留信息

来源:models/common.py399-441

6.2 任务特定模块

YOLOv5 包含用于检测、分割和分类任务的专用模块。

6.2.1 Proto 模块(用于分割)

Proto 模块生成用于实例分割的原型掩模。

主要功能

  • 通过上采样以更高分辨率生成掩模
  • 使用三个不同用途的卷积层
  • 输出通道维度(c2)通常代表掩模原型的数量

来源:models/common.py1087-1100

6.2.2 Classify 模块(用于分类)

Classify 模块将特征图转换为类别预测。

主要功能

  • 全局平均池化以减小空间维度
  • 可选的 dropout 用于正则化
  • 用于最终分类的线性层
  • 可以处理和连接多个输入特征图

来源:models/common.py1103-1123

7. 多后端支持

YOLOv5 提供了 DetectMultiBackend 类,以支持模型在各种框架和硬件上的部署。

主要功能

  • 多种部署后端的单一统一接口
  • 自动格式检测和适当初始化
  • 支持 PyTorch、TorchScript、ONNX、TensorRT、TensorFlow、CoreML 等
  • 处理特定格式的预处理和后处理

来源:models/common.py459-813

总结

YOLOv5 的架构建立在一组精心设计的构建模块之上,这些模块实现了高效的特征提取、多尺度处理和任务特定的输出。这些组件的模块化特性允许通过各种尺寸和性能权衡来实现灵活的模型构建。

主要构建模块包括:

  • 基本卷积模块(Conv、DWConv、Focus、GhostConv)
  • 特征提取模块(Bottleneck、C3 及其变体)
  • 多尺度特征模块(SPP、SPPF)
  • 注意力机制(TransformerLayer、TransformerBlock)
  • 任务特定模块(Proto、Classify)

这些组件可以根据模型配置进行组合和排列,以创建不同的 YOLOv5 变体。有关这些变体及其性能特征的详细信息,请参阅模型变体。有关将这些模型导出为不同格式以进行部署的信息,请参阅模型导出

来源: models/common.py73-1123 export.py1-1547