☰
AI-Aimbot 基于 YOLOv5 的 Weights Biases 训练日志集成:从首次配置到数据集版本化与断点恢复
2026/10/5 6:35:22 网站建设 项目流程
  • 人工智能
  • 计算机视觉

【免费下载链接】AI-Aimbot

World's Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game

项目地址:https://gitcode.com/gh_mirrors/ai/AI-Aimbot
点击查看免费下载

导读

本指南讲解如何在本仓库(基于 YOLOv5 的目标检测项目 AI-Aimbot)中接入 Weights & Biases(W&B)实验追踪系统,用于实时监控训练损失、精度/召回率、mAP 等指标,并将数据集、模型 checkpoint、预测结果以 Artifact 形式版本化归档。读完本文,你将掌握 W&B 的首次配置、运行监控、禁用与恢复,以及通过--upload_dataset、log_dataset.py、--save-period、wandb-artifact://完成数据集上传、云端训练与跨设备断点恢复的完整实战方案。

About Weights & Biases:为什么要在 YOLOv5 训练中接入 W&B

W&B 可被理解为"机器学习模型的 GitHub":只需少量代码,就能把调试、对比和复现模型所需的全部信息——网络架构、超参数、git 提交、模型权重、GPU 占用,乃至数据集与预测结果——统一保存下来。对于像 AI-Aimbot 这样需要反复迭代目标检测模型的项目,W&B 提供了以下几类直接价值:

  • 实时调试模型性能:训练过程中随时查看损失曲线与指标变化;
  • GPU 使用情况自动可视化:显存、利用率等系统信息无需手工采集;
  • 自定义图表:基于 W&B 的扩展图表能力做灵活的指标对比;
  • 协作分享:将洞察以交互式图表的形式分享给协作者;
  • 高效超参数优化:通过 Sweep 自动搜索超参数组合;
  • 追踪数据集、流水线与生产模型:以 Artifact 形式进行版本管理。

本仓库中的 W&B 集成位于 utils/loggers/wandb/ 目录,核心文件包括:

  • wandb_utils.py:WandbLogger类实现,负责 run 初始化、指标日志、模型 Artifact 上传;
  • log_dataset.py:独立的数据集上传脚本;
  • sweep.py 与 sweep.yaml:超参数搜索入口与搜索空间配置;
  • README.md:官方使用指南(本文主体即源自该文档)。

注意:本仓库的 wandb_utils.py 文件头部明确标注了弃用警告:"wandb is deprecated and will be removed in future release"(W&B 集成已弃用,将在未来版本中移除)。这意味着 W&B 集成仍可正常工作,但新项目建议关注 Ultralytics 官方推荐的其他日志集成方案。本指南基于当前仓库实际代码与文档编写,供有 W&B 追踪需求的存量项目参考。

首次配置:账号、API Key 与项目命名

当你第一次启动训练时,W&B 会引导你创建账号并生成一个API Key。已有用户可以从 https://wandb.ai/authorize 获取自己的 Key。这个 Key 用于告诉 W&B 把日志数据写到哪个账号下,只需在首次使用时提供一次,之后会在同一台设备上被记住。

W&B 会为你的训练运行创建一个云端project(默认名为YOLOv5),每次新的训练运行都会在项目内获得唯一的 runname,以project/name的形式组织。你也可以手动指定项目名和运行名:

$ python main.py --project ... --name ...

在本仓库中,训练入口是根目录的 main.py(仓库未包含文档中提到的train.py,main.py承担同等角色)。相关参数的实际解析逻辑可从 utils/loggers/comet/hpo.py 看到:--project默认值为runs/train,--name默认值为exp。也就是说,若不显式指定,W&B run 会默认归入名为YOLOv5的云端项目。

从源码层面看,WandbLogger.__init__中通过wandb.init(config=opt, resume='allow', project='YOLOv5' if opt.project == 'runs/train' else Path(opt.project).stem, entity=opt.entity, name=opt.name if opt.name != 'exp' else None, job_type=job_type, id=run_id, allow_val_change=True)完成初始化(见 wandb_utils.py),其中:

  • project:当用户未改--project(仍为默认的runs/train)时归入YOLOv5项目,否则取传入路径的末段目录名;
  • entity:对应--entity参数,用于指定 W&B 团队/组织;
  • name:当--name还是默认值exp时不强制命名,交由 W&B 自动生成;
  • resume='allow':允许从已有 run 恢复;
  • job_type:默认Training,用于区分训练与数据集上传等任务。

查看 Runs:训练过程中的实时监控面板

训练时,运行信息会从你的环境实时流式传输到 W&B 云端控制台,支持在实时查看甚至取消运行。被自动记录的重要信息包括:

  • 训练与验证损失(Training & Validation losses);
  • 指标:Precision(精度)、Recall(召回率)、mAP@0.5、mAP@0.5:0.95;
  • 学习率随时间的变化(Learning Rate over time);
  • 边界框调试面板:展示训练过程中预测框的逐步改善;
  • GPU 信息:类型、GPU 利用率、功耗、温度、CUDA 显存占用;
  • 系统信息:磁盘 I/O、CPU 利用率、内存占用;
  • 训练好的模型(以 W&B Artifact 形式保存);
  • 环境信息:操作系统与 Python 版本、Git 仓库与状态、训练命令。

仓库中 utils/loggers/init.py 定义了每次训练会被写入日志的键集合,与文档描述一一对应:

self.keys = [ 'train/box_loss', 'train/obj_loss', 'train/cls_loss', # 训练损失 'metrics/precision', 'metrics/recall', 'metrics/mAP_0.5', 'metrics/mAP_0.5:0.95', # 评估指标 'val/box_loss', 'val/obj_loss', 'val/cls_loss', # 验证损失 'x/lr0', 'x/lr1', 'x/lr2'] # 学习率

除此之外,训练过程中的关键可视化也会同步到 W&B:on_pretrain_routine_end记录标签分布图(Labels),on_train_batch_end在迭代 10 次时记录马赛克增强样本(Mosaics),on_val_end记录验证集预测图(Validation),on_train_end记录results.png、confusion_matrix.png、F1/PR/P/R 曲线等结果图(见 utils/loggers/init.py)。每个 epoch 结束时,on_fit_epoch_end会把上述指标键与数值一起交给WandbLogger.log(),再由end_epoch()统一wandb.log(self.log_dict)提交(见 wandb_utils.py)。

禁用与重新启用 W&B

如果某个目录下不想再产生 wandb 运行,可以直接在该目录执行:

$ wandb disabled

之后该目录下的训练不会再创建任何 W&B run。需要恢复时执行:

$ wandb online

即可重新启用。

高级用法:数据集版本化与评估

借助 W&B 的 Artifacts 与 Tables 集成,可以方便地可视化、管理数据集、模型与训练评估结果。以下是文档给出的六种典型玩法,命令均以本仓库的main.py为训练入口。

1. 训练同时上传数据集并记录评估表

在训练前先上传数据集,并同步生成 Evaluation Table(评估表)。该表会在每个 epoch 将验证集上的预测与 ground truth 逐条对比,由于它引用的是已上传的数据集,因此系统内的图片不会被重复上传:

$ python main.py --upload_dataset val

--upload_dataset的定义见 utils/loggers/comet/hpo.py:nargs='?', const=True, default=False,即它是一个可选布尔开关,传val表示同时上传验证集。注意文档旧版写作--upload_data,当前仓库源码中实际的参数名是--upload_dataset。

2. 可视化与版本化数据集(W&B Tables)

使用 W&B Tables 可以对数据进行记录、可视化、动态查询与理解。通过以下命令把数据集作为 W&B Table 上传,并生成一个{dataset}_wandb.yaml配置文件,供后续直接从数据集 Artifact 训练:

$ python utils/loggers/wandb/log_dataset.py --data data/coco128.yaml --project YOLOv5 --name "log dataset"

对应脚本 utils/loggers/wandb/log_dataset.py 支持的参数包括:

参数默认值说明
--datadata/coco128.yaml数据集配置文件路径
--single-cls关闭是否按单类别数据集训练
--projectYOLOv5W&B 项目名
--entity无W&B 团队/组织
--namelog datasetW&B run 名称

脚本内部通过WandbLogger(opt, None, job_type='Dataset Creation')完成初始化(log_dataset.py);若未安装 wandb 包,则会提示install wandb using pip install wandb。

3. 使用数据集 Artifact 直接训练

上传数据集后会得到一个新的、名字带_wandb后缀的配置文件。用该文件作为--data即可直接从数据集 Artifact 训练,同样会记录评估结果:

$ python main.py --data {data}_wandb.yaml

4. 将模型 checkpoint 保存为 Artifact

在基础命令上追加--save-period n,其中n表示保存间隔(epoch 数),即可开启 checkpoint 的保存与版本化。若不传该参数,则只有最终的模型会被记录:

$ python main.py --save-period 1

源码中该参数定义为--save-period,类型为 int,默认-1表示禁用(见 utils/loggers/comet/hpo.py)。触发链路为:Loggers.on_model_save中(epoch + 1) % opt.save_period == 0时调用WandbLogger.log_model(见 utils/loggers/init.py);log_model会创建名为run_{run_id}_model的 model 类型 Artifact,写入last.pt,并以latest、last、epoch N、best(若当前最优)等别名登记(见 wandb_utils.py)。训练结束时,最优权重best.pt(或last.pt)也会以best、stripped等别名作为 Artifact 上传(utils/loggers/init.py)。

5. 从 checkpoint Artifact 恢复训练

只要--resume参数以wandb-artifact://前缀开头,后接 run 路径(格式wandb-artifact://username/project/runid),任何 run 都可以仅凭 Artifact 恢复训练,无需本地存在模型 checkpoint:

$ python main.py --resume wandb-artifact://{run_path}

从源码看,WandbLogger.setup_training在opt.resume为字符串时会尝试拉取模型 Artifact 并利用其中记录的配置恢复weights、save_period、batch_size、bbox_interval、epochs、hyp、imgsz等关键训练参数(见 wandb_utils.py),说明该机制设计目标就是让"换一台设备也能无缝续训"。

6. 同时从数据集与 checkpoint Artifact 恢复

这是第 5 种方案的组合版:既不需要本地数据集,也不需要本地模型 checkpoint,可直接在不同设备上恢复运行。前提是先完成两件事——通过--upload_dataset(或直接使用第 3 种方式生成的_wandb.yaml文件)上传数据集,并通过--save-period上传模型 checkpoint。命令与第 5 种相同:

$ python main.py --resume wandb-artifact://{run_path}

附:边界框日志频率控制

--bbox_interval参数(默认-1)用于控制边界框预测图的日志频率。从 wandb_utils.py 的默认逻辑看:当值为-1时,若总 epoch 数大于 10,会自动设为epochs // 10,否则设为 1;若开启--evolve或--noplots,则设为epochs + 1(即禁用该日志)。

超参数搜索:基于 Sweep 的自动化调参

仓库还提供了 W&B Sweep 的完整接入:入口脚本 sweep.py 会先wandb.init()读取 sweep agent 下发到wandb.config的超参字典,再基于parse_opt(known=True)解析命令行参数、组装opt,最后调用train(hyp_dict, opt, device, callbacks=Callbacks())执行一轮完整训练。

配套的 sweep.yaml 定义了搜索空间与目标:

program: utils/loggers/wandb/sweep.py method: random metric: name: metrics/mAP_0.5 goal: maximize

即以metrics/mAP_0.5最大化为目标,采用 random 策略;固定data: data/coco128.yaml、batch_size: 64、epochs: 10,并对lr0、lrf、momentum、weight_decay、box、cls、obj、iou_t、anchor_t、fl_gamma以及 HSV 增强、仿射变换、mosaic、mixup、copy_paste 等十余个超参数以 uniform 分布给出min/max区间。参数取值可以写成区间(min/max)或离散列表(values),并支持 grid、bayesian、hyperopt 等不同搜索策略。

Reports:把结果分享给世界

W&B Reports 可以从已保存的 run 中创建并在线分享。报告创建完成后会得到一个公开链接,可用于展示训练成果。官方示例中,COCO128 教程训练(YOLOv5 四种模型)的对比报告即通过这种方式共享。

运行环境与集成状态说明

W&B 集成要求安装 wandb 包(pip install wandb),并且训练环境需具备 Python、PyTorch 及可选的 CUDA/CUDNN。本仓库 utils/loggers/init.py 在导入时做了防御性处理:wandb 未安装、版本不满足(低于 0.12.2)或登录失败时,wandb会被置为None,训练仍可正常进行,只是跳过 W&B 日志。作为参照,utils/loggers/comet/hpo.py 集中列出了本仓库训练脚本支持的 W&B 专属参数:

参数默认值说明
--entityNoneW&B 团队/组织
--upload_datasetFalse(可选传val)上传数据集(可仅上传验证集)
--bbox_interval-1边界框图像日志间隔
--artifact_aliaslatest使用的数据集 Artifact 版本别名

最后再次提醒:本仓库 wandb_utils.py 中的弃用警告意味着这套集成未来会被移除,且当前仓库内的WandbLogger为精简版本(val_one_image为空实现、数据集上传细节逻辑未包含)。如果你的项目计划长期使用 W&B,建议关注官方对日志集成的迁移路线,并持续以当前仓库实际代码为准验证命令与参数行为。

  • 人工智能
  • 计算机视觉

【免费下载链接】AI-Aimbot

World's Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game

项目地址:https://gitcode.com/gh_mirrors/ai/AI-Aimbot
点击查看免费下载

相关推荐

上一篇:EMQX 插件 CLI 扩展实战:基于 emqx_ctl 动态注册自定义 `emqx ctl` 命令
下一篇:从周报读懂 Python 机器学习生态:best-of-ml-python 项目质量评分机制与 2022-12-15 趋势榜单解读

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询