概述
主要模块分析
- 参数解析与初始化
- 功能:解析命令行参数,设置训练配置
- 项目经理制定详细的施工计划和资源分配
- 日志记录与监控
- 功能:初始化日志记录器,配置监控系统
- 项目经理使用监控和记录工具,实时跟踪施工进度和质量
- 模型与数据加载
- 功能:加载模型权重和配置文件,准备训练数据
- 项目经理选择建筑设计方案,准备施工材料和组织施工队伍
- 优化器与学习率调度器设置
- 功能:设置优化器和学习率调度器,指导模型参数更新
- 项目经理分配施工资源,制定施工进度计划
- 训练循环
- 功能:执行模型的前向传播、损失计算、反向传播和参数更新
- 施工队每日执行施工任务,项目经理监控进度和质量
- 验证与评估
- 功能:定期验证模型性能,评估训练效果
- 项目经理进行阶段性质量检查,评估施工质量和进度
- 模型保存与早停机制
- 功能:保存模型状态,应用早停机制优化训练过程
- 项目经理记录施工进度和质量,决定是否调整或终止施工计划
主要模块
参数解析与初始化
一般在训练模型的时候,需要在这里调整相应的参数,这类似于建筑项目经理制定详细的施工计划和资源分配
常用设置参数
- --weights:模型初始权重路径,通常设置为预训练模型路径,例如YOLOve.pt
- --cfg:模型结构的 YAML 配置文件路径,例如yolov3.yaml
- --data:数据集配置文件路径,定义训练/验证数据集的路径和类别等信息
- --hyp:超参数配置文件路径,控制训练的优化器、学习率等超参数
- --epochs:训练的总轮数,决定训练时长
- --batch-size:批量大小,影响内存占用和训练速度
- --imgsz:输入图像的尺寸
- --device:指定使用的设备,0就表示GPU0
- --adam:是否使用 Adam 优化器(默认使用 SGD)
W&B 参数(类似项目中的监控和记录工具)
- --entity:设置 W&B 的实体名称,用于项目关联
- --upload_dataset:是否将数据集上传到 W&B Artifact Table
- --bbox_interval:控制目标框日志记录的间隔
def parse_opt(known=False):
"""
函数功能:
用于解析命令行参数,设置训练、验证和测试时的超参数及其他相关配置。
参数:
known (bool): 是否只解析已知的命令行参数。如果为 True,则返回已知参数,忽略其他参数。
返回:
argparse.Namespace: 包含解析后参数的命名空间对象 `opt`。
"""
import argparse
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser()
# ---------------------------- 常用参数配置 ----------------------------------
# 权重文件路径
parser.add_argument('--weights', type=str, default=ROOT / 'weight/yolov3.pt',
help='initial weights path (初始权重文件路径)')
# 模型配置文件路径
parser.add_argument('--cfg', type=str, default='models/yolov3.yaml',
help='model.yaml path (模型结构配置文件路径)')
# 数据集配置文件路径
parser.add_argument('--data', type=str, default=ROOT / 'data/you.yaml',
help='dataset.yaml path (数据集配置文件路径)')
# 超参数配置文件路径
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml',
help='hyperparameters path (超参数配置文件路径)')
# 训练周期数
parser.add_argument('--epochs', type=int, default=20,
help='Number of epochs to train (训练的总轮数)')
# 批量大小
parser.add_argument('--batch-size', type=int, default=4,
help='Total batch size for all GPUs, -1 for autobatch (总的批量大小)')
# 图像大小
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=416,
help='train, val image size (pixels) (训练和验证时图像的输入尺寸)')
# 是否使用矩形训练
parser.add_argument('--rect', action='store_true', default=True,
help='rectangular training (是否使用矩形训练)')
# 是否恢复最近一次的训练
parser.add_argument('--resume', nargs='?', const=True, default="",
help='resume most recent training (恢复最近的训练检查点)')
# 仅保存最终的检查点
parser.add_argument('--nosave', action='store_true',
help='only save final checkpoint (只保存最终检查点)')
# 仅验证最终周期
parser.add_argument('--noval', action='store_true',
help='only validate final epoch (只在最后一轮进行验证)')
# 是否禁用自动生成 anchors
parser.add_argument('--noautoanchor', action='store_true',
help='disable autoanchor check (禁用自动生成 anchor 的功能)')
# 超参数进化
parser.add_argument('--evolve', type=int, nargs='?', const=300,
help='evolve hyperparameters for x generations (超参数进化代数)')
# Google Cloud Bucket
parser.add_argument('--bucket', type=str, default='',
help='gsutil bucket (Google 云存储桶路径)')
# 是否缓存数据集到 RAM 或磁盘
parser.add_argument('--cache', type=str, nargs='?', const='ram', default=True,
help='--cache images in "ram" (default) or "disk" (缓存数据集)')
# 是否使用加权的图像选择训练
parser.add_argument('--image-weights', action='store_true',
help='use weighted image selection for training (训练时使用加权图像选择)')
# 指定训练的设备
parser.add_argument('--de