实战应用 · YOLOv5 架构与模块
核心概念
- YOLOv5:YOLO 系列的工程化实现,结构更简洁,代码更易读。
- 配置文件解析:通过
.yaml
/.cfg
文件逐层定义网络结构。 - Focus 模块:将输入图像切片重组,降低空间分辨率的同时增加通道数。
- BottleneckCSP:CSPNet 改进模块,采用分支卷积 + 拼接方式提升特征表达。
- SPP (Spatial Pyramid Pooling):多尺度池化操作,扩展感受野并保持输出维度一致。
- PAN (Path Aggregation Network):双向特征金字塔,增强不同层级特征融合。
- 检测头 (Head):在不同尺度特征图上进行预测,支持多目标检测。
提出问题
- 如何通过模块化设计简化 YOLOv5 的网络结构实现?
- 如何利用配置文件快速修改和扩展模型?
- 如何在多尺度特征上完成目标检测?
论点与解决方案
- 配置文件驱动:
- 网络结构由配置文件定义,解析后逐层构建。
- 每一层包含输入通道、输出通道、卷积核大小、步长等参数。
- 模块化设计:
- Focus 模块:切分 + 拼接 → 降采样并扩展通道。
- BottleneckCSP:残差与拼接结合,降低计算量。
- SPP:池化层并行处理,增强多尺度感知。
- PAN:引入上采样和拼接,融合深浅层特征。
- 前向传播:
- 遍历配置文件解析出的模型层。
- 每一层调用对应模块的 forward 方法。
- 特征图在卷积、残差、SPP、PAN 等结构中逐层传递。
- 检测头设计:
- 在 3 个不同尺度特征图上预测目标。
- 每个 anchor 输出
(4+1+num_classes)
个参数(坐标 + 置信度 + 类别概率)。
关键机制 / 细节
- Focus 模块:输入图像划分成 4 份 → 拼接 → 通道数变 4 倍,尺寸减半。
- BottleneckCSP:输入分为两支,一支卷积+残差模块,另一支直连,最后拼接。
- SPP 层:对输入分别执行 5×5、9×9、13×13 最大池化 → 拼接 → 卷积降维。
- 上采样与拼接:将低分辨率特征上采样,与高分辨率特征拼接 → 融合多层信息。
- Head 层:在不同尺度输出特征上进行卷积 → 预测检测框。