YOLOv5模型架构详解(三)

YOLOv5模型架构详解 - 从基础模块到完整推理

目录

  1. 模型基础模块介绍
  2. CBS模块详解
  3. SPPF模块详解
  4. C3模块详解
  5. 模型架构构建
  6. YAML配置文件说明
  7. 推理流程详解
  8. 论文写作指南

第一章 模型基础模块介绍

1.1 YOLOv5的核心模块

YOLOv5网络架构由以下几个基础模块组成:

  • CBS模块:卷积 + 批归一化 + 激活函数的基础构建块
  • SPPF模块:空间金字塔池化模块,用于多尺度特征提取
  • C3模块:YOLOv5中最复杂的模块,包含跳跃连接的结构

这三个模块的灵活组合构成了整个YOLOv5网络。

1.2 模块代码位置

所有模块相关的构建代码存放在项目的models文件夹中,包含各个模块的压缩文件和相应的实现代码。


第二章 CBS模块详解

2.1 CBS模块概述

CBS模块是YOLOv5的基础构建单元,由以下三部分组成:

  • Conv (卷积层):进行特征提取
  • BatchNorm (批归一化):加速训练,提高模型稳定性
  • SiLU (激活函数):引入非线性特征

2.2 CBS模块的实现

python 复制代码
class CBS(nn.Module):
    def __init__(self, c1, c2, k=1, s=1, p=None):
        """
        c1: 输入通道数
        c2: 输出通道数
        k: 卷积核大小
        s: 步长
        p: 填充
        """
        super().__init__()
        self.conv = nn.Conv2d(c1, c2, k, s, p, bias=False)
        self.bn = nn.BatchNorm2d(c2)
        self.act = nn.SiLU()
    
    def forward(self, x):
        return self.act(self.bn(self.conv(x)))

2.3 参数说明

  • 卷积核大小 (k):决定了感受野的大小
  • 步长 (s):默认值为1
  • 填充 §:根据卷积核大小自动计算,确保输出尺寸匹配

第三章 SPPF模块详解

3.1 SPPF模块概述

SPPF(Spatial Pyramid Pooling Fast)模块是YOLOv5中用于多尺度特征融合的关键组件。它通过多个不同大小的最大池化操作,在不改变特征图尺寸的情况下,提取多尺度特征。

3.2 SPPF模块的结构

SPPF模块包含以下步骤:

  1. 定义多个最大池化层(通常为3个),池化核大小为5×5
  2. 使用1×1卷积进行初始处理
  3. 分别对输入进行多次池化操作
  4. 将所有池化结果在通道维度上拼接
  5. 使用1×1卷积进行融合

3.3 SPPF模块的实现

python 复制代码
class SPPF(nn.Module):
    def __init__(self, c1, c2, k=5):
        super().__init__()
        self.cv1 = CBS(c1, c1 // 2, 1, 1)
        self.cv2 = CBS(c1 * 2, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
    
    def forward(self, x):
        x = self.cv1(x)
        y1 = self.m(x)
        y2 = self.m(y1)
        y3 = self.m(y2)
        return self.cv2(torch.cat([x, y1, y2, y3], 1))

3.4 前向传播过程

  • 输入X经过CBS模块处理
  • 对处理后的结果进行第一次最大池化,得到Y1
  • Y1再进行最大池化,得到Y2
  • Y2再进行最大池化,得到Y3
  • 将X、Y1、Y2、Y3在通道维度上进行拼接
  • 通过1×1卷积融合所有特征

3.5 感受野分析

  • 最大池化的核大小为5×5
  • 每次池化操作都能捕捉不同尺度的特征信息
  • 通过多尺度融合,增强模型对不同大小目标的感知能力

第四章 C3模块详解

4.1 C3模块概述

C3模块是YOLOv5中最复杂的模块,它通过并联的两条处理通道和可选的跳跃连接,实现了多路特征提取和融合。C3模块有两种变体:

  • C3-1:带有跳跃连接(Residual Connection)
  • C3-2:不带跳跃连接

4.2 C3模块的结构

C3模块包含:

  1. 两条并行的特征提取通道
  2. 上通道:先经过1×1卷积(CBS),再经过3×3卷积(CBS)
  3. 下通道:先经过1×1卷积(CBS),再经过1×1卷积(CBS)
  4. 可选的跳跃连接
  5. 通道融合:将两条通道的输出在通道维度拼接
  6. 最后通过1×1卷积进行融合处理

4.3 C3模块的代码实现

python 复制代码
class C3(nn.Module):
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
        """
        c1: 输入通道数
        c2: 输出通道数
        n: Bottleneck重复次数
        shortcut: 是否使用跳跃连接
        g: 分组卷积参数
        e: 扩展比例
        """
        super().__init__()
        c_ = int(c2 * e)
        self.cv1 = CBS(c1, c_, 1, 1)
        self.cv2 = CBS(c1, c_, 1, 1)
        self.cv3 = CBS(2 * c_, c2, 1, 1)
        self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))
    
    def forward(self, x):
        return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))

4.4 跳跃连接的作用

  • C3-1(shortcut=True):使用跳跃连接,允许梯度直接反向传播,加速训练
  • C3-2(shortcut=False):不使用跳跃连接,仅通过顺序的卷积操作处理特征

4.5 前向传播过程

  1. 输入X分别进入两条路径
  2. 上路径:X → CV1 → Bottleneck模块(重复n次)
  3. 下路径:X → CV2
  4. 两条路径的输出在通道维度拼接
  5. 经过CV3进行最终融合

第五章 模型架构构建

5.1 从YAML配置构建模型

YOLOv5的网络架构由YAML配置文件定义,包含以下信息:

  • 网络各层的参数配置
  • 每层的输入输出通道数
  • 重复次数和其他超参数

5.2 模型构建流程

python 复制代码
# 1. 读取YAML配置文件
# 2. 初始化各个模块(CBS, SPPF, C3等)
# 3. 根据配置串联各个模块
# 4. 完成整个网络构建

5.3 代码调用示例

使用ul.py文件调用YAML配置并构建模型:

python 复制代码
from models.ul import YOLOv5

# 指定配置文件
model = YOLOv5('models/yolov5s.yaml')  # 也可以是 yolov5m, yolov5l, yolov5x

第六章 YAML配置文件详解

6.1 不同规模的YAML文件

YOLOv5提供多个规模的模型变体:

  • yolov5s.yaml:Small模型,深度系数和宽度系数最小
  • yolov5m.yaml:Medium模型,参数适中
  • yolov5l.yaml:Large模型,深度宽度系数为1.0
  • yolov5x.yaml:Extra Large模型,最大的模型

6.2 配置文件参数说明

深度系数(depth_multiple)和宽度系数(width_multiple)控制模型大小:

模型 深度系数 宽度系数
S 0.33 0.50
M 0.67 0.75
L 1.0 1.0
X 1.33 1.25

6.3 配置文件的使用

通过调整这些系数,可以快速创建不同规模的模型,而不需要修改代码结构。


第七章 推理流程详解

7.1 输入图像预处理

图像缩放过程

假设输入图像尺寸为608×416,目标输入尺寸为608×608:

  1. 计算缩放比例:min(608/608, 416/608) = 0.591
  2. 缩放后图像尺寸:608×0.591 = 311, 416×0.591 ≈ 246
  3. 缩放到32的整数倍
  4. 填充空白区域:上下左右各填充相应像素

最终得到标准化的输入尺寸。

7.2 推理步骤

  1. 输入预处理:图像缩放、归一化
  2. 前向传播:通过各个模块逐层处理
  3. 特征提取:CBS、SPPF、C3等模块的组合处理
  4. 输出处理:解析网络输出,得到检测结果

7.3 推理输出

推理完成后,模型会输出:

  • 检测框的位置信息(x, y, w, h)
  • 置信度分数
  • 类别概率
相关推荐
B站计算机毕业设计之家3 小时前
计算机视觉:YOLO实现目标识别+目标跟踪技术 pyqt界面 OpenCV 计算机视觉 深度学习 计算机(建议收藏)✅
python·opencv·yolo·计算机视觉·目标跟踪·口罩识别
lxmyzzs4 小时前
【图像算法 - 31】基于深度学习的太阳能板缺陷检测系统:YOLOv12 + UI界面 + 数据集实现
人工智能·深度学习·算法·yolo·缺陷检测
lxmyzzs4 小时前
【图像算法 - 32】基于深度学习的风力发电设备缺陷检测系统:YOLOv12 + UI界面 + 数据集实现
深度学习·算法·yolo·计算机视觉
B站计算机毕业设计之家5 小时前
深度学习:YOLOv8人体行为动作识别检测系统 行为识别检测识系统 act-dataset数据集 pyqt5 机器学习✅
人工智能·python·深度学习·qt·yolo·机器学习·计算机视觉
深度学习lover6 小时前
<数据集>yolo煤矿安全帽识别数据集<目标检测>
人工智能·python·深度学习·yolo·目标检测·计算机视觉·煤矿安全帽识别
创思通信16 小时前
树莓派的YOLO智能AI识别系统,识别ESP32还是STM32
人工智能·stm32·yolo
I'm a winner2 天前
基于YOLO算法的医疗应用专题:第一章 计算机视觉与深度学习概述
算法·yolo·计算机视觉
java1234_小锋2 天前
[免费]基于Python的YOLO深度学习垃圾分类目标检测系统【论文+源码】
python·深度学习·yolo·垃圾分类·垃圾分类检测
AI棒棒牛2 天前
论文精读系列:Retinanet——目标检测领域中的SCI对比实验算法介绍!可一键跑通的对比实验,极大节省小伙伴的时间!!!
yolo·目标检测·计算机视觉·对比实验·1024程序员节·创新·rtdter