- 人工智能
- 计算机视觉
【免费下载链接】AI-Aimbot
World's Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game
导读
本指南讲解如何在本仓库(基于 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 支持的参数包括:
| 参数 | 默认值 | 说明 |
|---|---|---|
--data | data/coco128.yaml | 数据集配置文件路径 |
--single-cls | 关闭 | 是否按单类别数据集训练 |
--project | YOLOv5 | W&B 项目名 |
--entity | 无 | W&B 团队/组织 |
--name | log dataset | W&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.yaml4. 将模型 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 专属参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--entity | None | W&B 团队/组织 |
--upload_dataset | False(可选传val) | 上传数据集(可仅上传验证集) |
--bbox_interval | -1 | 边界框图像日志间隔 |
--artifact_alias | latest | 使用的数据集 Artifact 版本别名 |
最后再次提醒:本仓库 wandb_utils.py 中的弃用警告意味着这套集成未来会被移除,且当前仓库内的WandbLogger为精简版本(val_one_image为空实现、数据集上传细节逻辑未包含)。如果你的项目计划长期使用 W&B,建议关注官方对日志集成的迁移路线,并持续以当前仓库实际代码为准验证命令与参数行为。
- 人工智能
- 计算机视觉
【免费下载链接】AI-Aimbot
World's Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game
相关推荐
LiveSplit:为速度跑者打造的专业级计时器解决方案
LiveSplit:为速度跑者打造的专业级计时器解决方案 LiveSplit是一款专为速度跑玩家设计的专业计时器软件,它将高精度计时与高度自定义功能完美结合,帮
桌面应用掌握TRL训练可视化:使用Weights & Biases追踪你的强化学习模型表现
掌握TRL训练可视化:使用Weights & Biases追踪你的强化学习模型表现 TRL(Transformer Reinforcement Learning
人工智能大模型强化学习RLHF预训练微调LoRAMLOps-Basics 实验监控实战:基于 Weights & Biases 的 PyTorch Lightning 训练全流程日志与可视化
MLOps Basics 实验监控实战:基于 Weights & Biases 的 PyTorch Lightning 训练全流程日志与可视化 本文是 MLOp
示例工程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考