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

YOLO!!

一、common.py:基础网络组件定义

该文件包含 YOLO 模型中常用的基础神经网络模块,是构建网络的 "积木"。

1. 卷积相关模块

Conv 层:基础卷积模块,包含conv + bn + 激活函数(代码中通过forward方法实现:self.act(self.bn(self.conv(x))))。

DWConv:深度可分离卷积,通过g=math.gcd(c1, c2)设置分组卷积,减少参数量。

2. 特征提取模块
  • Bottleneck:标准瓶颈结构,由 1x1 卷积(降维)+ 3x3 卷积(升维)组成,支持残差连接(add参数控制)。

    • forward 逻辑:若启用残差(add=True且输入输出通道相同),则输出为x + 3x3卷积结果,否则直接输出 3x3 卷积结果。
  • BottleneckCSP:跨阶段部分网络结构,融合两条支路特征:

    支路 1:1x1 卷积 + 多个 Bottleneck 堆叠 + 1x1 卷积;                                                          支路 2:直接 1x1 卷积;最终通过BN + 激活函数 + 1x1卷积融合两条支路(torch.cat拼接后处理)。                                                                                                                              Focus:将空间信息聚焦到通道维度,输入(b,c,w,h)通过切片(x[..., ::2, ::2]等 4 种切片方式)拼接为(b,4c,w/2,h/2),再通过卷积降维。
  • SPP:空间金字塔池化,用于融合多尺度特征:
    • 先通过 1x1 卷积降维;
    • 对降维后特征分别应用不同 kernel 的最大池化(如 5,9,13);
    • 拼接原始特征与池化结果,再通过 1x1 卷积输出。
3. 后处理模块
  • Concat:特征拼接模块,通过torch.cat(x, self.d)在指定维度(d)拼接输入特征列表。

  • Classify:分类头,将特征图转换为分类结果:

    • 先通过自适应平均池化(AdaptiveAvgPool2d(1))将特征图压缩为(b,c1,1,1)
    • 卷积降维至类别数,再通过Flatten展平为(b,c2)
  • NMS:非极大值抑制模块,调用non_max_suppression函数过滤冗余检测框,参数包括置信度阈值(conf=0.3)和 IoU 阈值(iou=0.6)。

二、yolo.py:YOLO 模型结构与核心逻辑

该文件定义了 YOLO 模型的整体结构、检测头、前向传播及模型工具函数。

1. Detect:检测头
  • 功能:将多尺度特征图转换为检测结果(边界框 + 类别)。
  • 核心参数:nc(类别数)、anchors(锚框)、stride(各层下采样率)。
  • 前向传播(forward):
    • 训练模式:直接返回各尺度特征图的卷积结果;
    • 推理模式:对特征图进行解码(坐标转换):
      • 边界框坐标:(sigmoid(xy) * 2 - 0.5 + grid) * stride(xy 坐标);(sigmoid(wh) * 2)^2 * anchor_grid(wh 坐标);
      • 拼接所有尺度的检测结果(torch.cat(z, 1))。
2. Model:整体模型
  • 初始化(__init__):通过解析配置文件(yaml),调用parse_model构建网络层,初始化锚框和 stride。

  • 前向传播(forward):

    • 支持单尺度推理(forward_once)和多尺度数据增强推理(augment=True,通过缩放、翻转输入提升鲁棒性)。
    • forward_once:按顺序执行各网络层,保存需要的中间特征(save列表控制)。
  • 模型工具函数:

    • fuse:融合 Conv 层和 BN 层(fuse_conv_and_bn),减少推理耗时;
    • add_nms:在模型末尾添加 NMS 模块,方便端到端推理;
    • _initialize_biases:初始化检测头的偏置,提升训练稳定性。
3. parse_model:网络构建函数
  • 功能:根据配置文件(backbone + head)解析并构建网络层。
  • 流程:
    • 解析深度因子(gd)和宽度因子(gw),调整层数量和通道数;
    • 对每个层,根据类型(如 Conv、Bottleneck、Detect 等)初始化参数,计算输出通道;
    • 记录需要保存的中间特征索引(save列表)。

三、train.py:训练流程实现

该文件定义了 YOLO 模型的训练逻辑,包含数据加载、参数优化、训练循环、评估与保存等。

1. 核心流程
  • 初始化:加载配置(超参数hyp、数据配置data_dict)、创建模型(支持预训练权重加载)、设置优化器(Adam/SGD)和学习率调度器(余弦退火)。
  • 数据处理:通过create_dataloader加载训练 / 验证数据,支持多尺度训练(随机调整输入尺寸)、图像权重采样(难例优先)。
  • 训练循环
    • 热身训练(warmup):初始阶段缓慢提升学习率和动量,稳定训练;
    • 前向传播:计算预测结果和损失(compute_loss);
    • 反向传播:使用混合精度训练(amp)加速,累计梯度(accumulate)等效扩大 batch size;
    • 参数更新:通过优化器更新权重,使用 EMA(指数移动平均)平滑参数。
  • 评估与保存:每个 epoch 结束后在验证集计算 mAP,保存最优模型(best.pt)和最新模型(last.pt),记录训练指标(损失、精度、mAP 等)。
2. 关键技巧
  • 混合精度训练:通过GradScaler在不损失精度的前提下,使用 FP16 加速训练;
  • 多尺度训练:随机调整输入图像尺寸(0.5~1.5倍原始尺寸),提升模型对不同尺度目标的适应性;
  • EMA:维护模型参数的移动平均,提升模型泛化能力;
  • 余弦学习率调度:学习率随 epoch 按余弦曲线衰减,平衡前期探索和后期收敛。

总结

  • common.py是基础组件库,提供了 YOLO 所需的各类网络层;
  • yolo.py构建了 YOLO 的整体网络结构,实现了特征提取、检测头解码等核心逻辑;
  • train.py实现了完整的训练流程,包含数据处理、参数优化、模型评估等,支持多种训练技巧以提升模型性能。

三者协同工作,从网络组件到模型构建,再到训练部署,形成了 YOLO 目标检测的完整 pipeline。以下是基于提供的common.pyyolo.pytrain.py代码片段的笔记总结,主要涵盖 YOLO 相关模型组件、网络结构及训练流程:

一、common.py:基础网络组件定义

该文件包含 YOLO 模型中常用的基础神经网络模块,是构建网络的 "积木"。

1. 卷积相关模块
  • Conv 层:基础卷积模块,包含conv + bn + 激活函数(代码中通过forward方法实现:self.act(self.bn(self.conv(x))))。
  • DWConv:深度可分离卷积,通过g=math.gcd(c1, c2)设置分组卷积,减少参数量。
2. 特征提取模块
  • Bottleneck:标准瓶颈结构,由 1x1 卷积(降维)+ 3x3 卷积(升维)组成,支持残差连接(add参数控制)。

    • forward 逻辑:若启用残差(add=True且输入输出通道相同),则输出为x + 3x3卷积结果,否则直接输出 3x3 卷积结果。
  • BottleneckCSP:跨阶段部分网络结构,融合两条支路特征:

    • 支路 1:1x1 卷积 + 多个 Bottleneck 堆叠 + 1x1 卷积;
    • 支路 2:直接 1x1 卷积;
    • 最终通过BN + 激活函数 + 1x1卷积融合两条支路(torch.cat拼接后处理)。
  • Focus:将空间信息聚焦到通道维度,输入(b,c,w,h)通过切片(x[..., ::2, ::2]等 4 种切片方式)拼接为(b,4c,w/2,h/2),再通过卷积降维。

  • SPP:空间金字塔池化,用于融合多尺度特征:

    • 先通过 1x1 卷积降维;
    • 对降维后特征分别应用不同 kernel 的最大池化(如 5,9,13);
    • 拼接原始特征与池化结果,再通过 1x1 卷积输出。
3. 后处理模块
  • Concat:特征拼接模块,通过torch.cat(x, self.d)在指定维度(d)拼接输入特征列表。

  • Classify:分类头,将特征图转换为分类结果:

    • 先通过自适应平均池化(AdaptiveAvgPool2d(1))将特征图压缩为(b,c1,1,1)
    • 卷积降维至类别数,再通过Flatten展平为(b,c2)
  • NMS:非极大值抑制模块,调用non_max_suppression函数过滤冗余检测框,参数包括置信度阈值(conf=0.3)和 IoU 阈值(iou=0.6)。

二、yolo.py:YOLO 模型结构与核心逻辑

该文件定义了 YOLO 模型的整体结构、检测头、前向传播及模型工具函数。

1. Detect:检测头
  • 功能:将多尺度特征图转换为检测结果(边界框 + 类别)。
  • 核心参数:nc(类别数)、anchors(锚框)、stride(各层下采样率)。
  • 前向传播(forward):
    • 训练模式:直接返回各尺度特征图的卷积结果;
    • 推理模式:对特征图进行解码(坐标转换):
      • 边界框坐标:(sigmoid(xy) * 2 - 0.5 + grid) * stride(xy 坐标);(sigmoid(wh) * 2)^2 * anchor_grid(wh 坐标);
      • 拼接所有尺度的检测结果(torch.cat(z, 1))。
2. Model:整体模型
  • 初始化(__init__):通过解析配置文件(yaml),调用parse_model构建网络层,初始化锚框和 stride。

  • 前向传播(forward):

    • 支持单尺度推理(forward_once)和多尺度数据增强推理(augment=True,通过缩放、翻转输入提升鲁棒性)。
    • forward_once:按顺序执行各网络层,保存需要的中间特征(save列表控制)。
  • 模型工具函数:

    • fuse:融合 Conv 层和 BN 层(fuse_conv_and_bn),减少推理耗时;
    • add_nms:在模型末尾添加 NMS 模块,方便端到端推理;
    • _initialize_biases:初始化检测头的偏置,提升训练稳定性。
3. parse_model:网络构建函数
  • 功能:根据配置文件(backbone + head)解析并构建网络层。
  • 流程:
    • 解析深度因子(gd)和宽度因子(gw),调整层数量和通道数;
    • 对每个层,根据类型(如 Conv、Bottleneck、Detect 等)初始化参数,计算输出通道;
    • 记录需要保存的中间特征索引(save列表)。

三、train.py:训练流程实现

该文件定义了 YOLO 模型的训练逻辑,包含数据加载、参数优化、训练循环、评估与保存等。

1. 核心流程
  • 初始化:加载配置(超参数hyp、数据配置data_dict)、创建模型(支持预训练权重加载)、设置优化器(Adam/SGD)和学习率调度器(余弦退火)。
  • 数据处理:通过create_dataloader加载训练 / 验证数据,支持多尺度训练(随机调整输入尺寸)、图像权重采样(难例优先)。
  • 训练循环
    • 热身训练(warmup):初始阶段缓慢提升学习率和动量,稳定训练;
    • 前向传播:计算预测结果和损失(compute_loss);
    • 反向传播:使用混合精度训练(amp)加速,累计梯度(accumulate)等效扩大 batch size;
    • 参数更新:通过优化器更新权重,使用 EMA(指数移动平均)平滑参数。
  • 评估与保存:每个 epoch 结束后在验证集计算 mAP,保存最优模型(best.pt)和最新模型(last.pt),记录训练指标(损失、精度、mAP 等)。
2. 关键技巧
  • 混合精度训练:通过GradScaler在不损失精度的前提下,使用 FP16 加速训练;
  • 多尺度训练:随机调整输入图像尺寸(0.5~1.5倍原始尺寸),提升模型对不同尺度目标的适应性;
  • EMA:维护模型参数的移动平均,提升模型泛化能力;
  • 余弦学习率调度:学习率随 epoch 按余弦曲线衰减,平衡前期探索和后期收敛。

总结

  • common.py是基础组件库,提供了 YOLO 所需的各类网络层;
  • yolo.py构建了 YOLO 的整体网络结构,实现了特征提取、检测头解码等核心逻辑;
  • train.py实现了完整的训练流程,包含数据处理、参数优化、模型评估等,支持多种训练技巧以提升模型性能。

三者协同工作,从网络组件到模型构建,再到训练部署,形成了 YOLO 目标检测的完整 pipeline。

http://www.dtcms.com/a/535725.html

相关文章:

  • 电子电气架构 --- 汽车座舱行业背景综述
  • C++(23):通过print和printIn进行输出
  • 获取网站访客qq号成都网站建设优点
  • 做一个同城便民信息网站怎么做公司给别人做的网站违法吗
  • 微算法科技(NASDAQ MLGO)探索自适应差分隐私机制(如AdaDP),根据任务复杂度动态调整噪声
  • 入选大模型一体机产业图谱,云从科技以全栈能力推动AI落地新范式
  • 十六、STM32的TIM(七)(PWM直流电机)
  • TCP与UDP深度理解
  • 万界星空科技MES系统功能介绍及实施指南
  • 中国软件出海,为何优选亚马逊云科技Marketplace?
  • StarRocks Community Monthly Newsletter (Sep)
  • HarmonyOS 微服务与 OpenHarmony 开发:构建模块化与开源生态应用
  • autojs----2025淘宝淘金币跳一跳自动化
  • 什么网站可以做兼职赚钱吗互联网商城建设
  • 地方网站系统建模素材免费网站
  • 东莞百度网站快速排名怎么用.net做网站
  • IP5306 2.4A放电 2.1A充电 高集成度移动电源SOC
  • Qt5与Qt6的详细区别
  • Sui 主网升级至 V1.58.3
  • [优选算法专题五.位运算——NO.35~36 只出现一次的数字 II、消失的两个数字]
  • 晶台光耦KL101X:光伏发电系统的安全卫士与效率引擎
  • 普诚PT5139深度解析:功能特性、应用场景与技术优势
  • MCoT在医疗AI工程化编程的实践手册(下)
  • Qwen系列模型:WAN介绍
  • HarmonyOS大型项目架构与模块化开发指南
  • 怎呀做网站网站超级外链
  • 做游戏模型参考的网站保定网站建设制作开发平台
  • 【IoTDB】时序数据库选型迷茫?Apache IoTDB 为何成工业场景优选?
  • Linux系统编程—线程概念与控制
  • (122页PPT)华为初级项目管理培训(附下载方式)