YOLOv5 与 Comet
本指南将介绍如何将 YOLOv5 与 Comet 结合使用,Comet 是一款用于跟踪、比较和优化机器学习实验的强大工具。
关于 Comet
Comet构建的工具可以帮助数据科学家、工程师和团队领导者加速和优化机器学习和深度学习模型。
使用 Comet Custom Panels 实时跟踪和可视化模型指标,保存您的超参数、数据集和模型检查点,并可视化您的模型预测!Comet 确保您永远不会丢失您的工作进度,并可以轻松地共享结果并在各种规模的团队中进行协作!
快速入门
安装 Comet
pip install comet_ml
配置 Comet 凭据
有两种方法可以使用 Comet 配置 YOLOv5。
您可以通过环境变量设置您的凭据:
环境变量
export COMET_API_KEY=YOUR_API_KEY
export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'
或创建一个 .comet.config
文件,并在其中设置您的凭据:
Comet 配置文件
[comet]
api_key=YOUR_API_KEY
project_name=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'
运行训练脚本
# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.pt
就这样!Comet 将自动记录您的超参数、命令行参数、训练和验证指标。您可以在 Comet UI 中可视化和分析您的运行。
尝试一个示例!
查看此处已完成运行的示例。
或者,更好的是,在这个 Colab Notebook 中亲自尝试一下:
自动记录
默认情况下,Comet 将记录以下项目:
指标
参数
- 模型超参数
- 所有通过命令行选项传递的参数
可视化
- 验证数据上模型预测的混淆矩阵
- 所有类别的 PR 和 F1 曲线图
- 类标签的相关图
配置 Comet 日志记录
可以配置 Comet,通过传递给训练脚本的命令行标志或通过环境变量来记录其他数据:
export COMET_MODE=online # Set whether to run Comet in 'online' or 'offline' mode. Defaults to online
export COMET_MODEL_NAME="yolov5" # Set the name for the saved model. Defaults to yolov5
export COMET_LOG_CONFUSION_MATRIX=false # Set to disable logging a Comet Confusion Matrix. Defaults to true
export COMET_MAX_IMAGE_UPLOADS=30 # Controls how many total image predictions to log to Comet. Defaults to 100.
export COMET_LOG_PER_CLASS_METRICS=true # Set to log evaluation metrics for each detected class at the end of training. Defaults to false
export COMET_DEFAULT_CHECKPOINT_FILENAME="last.pt" # Set this if you would like to resume training from a different checkpoint. Defaults to 'last.pt'
export COMET_LOG_BATCH_LEVEL_METRICS=true # Set this if you would like to log training metrics at the batch level. Defaults to false.
export COMET_LOG_PREDICTIONS=true # Set this to false to disable logging model predictions
使用 Comet 记录检查点
默认情况下,将模型记录到 Comet 是禁用的。要启用它,请传递 save-period
训练脚本的参数。这将根据 由 提供的时间间隔值,将记录的检查点保存到 Comet。 save-period
:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1
记录模型预测
默认情况下,模型预测(图像、ground truth 标签和边界框)将被记录到 Comet。
您可以通过传递以下内容来控制记录的预测和相关图像的频率 bbox_interval
命令行参数。可以使用 Comet 的以下功能可视化预测结果: 目标检测 自定义面板。此频率对应于每 N 批数据。 epoch。在下面的示例中,我们记录每个 epoch 中每 2 个批次的数据。
注意: YOLOv5 验证数据加载器将默认为 32 的批量大小,因此您必须相应地设置日志记录频率。
这是一个使用 Panel 的示例项目
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2
控制记录到 Comet 的预测图像数量
从YOLOv5记录预测时,Comet将记录与每组预测相关的图像。默认情况下,最多记录100张验证图像。您可以使用以下方法增加或减少此数量 COMET_MAX_IMAGE_UPLOADS
环境变量:
env COMET_MAX_IMAGE_UPLOADS=200 python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 1
记录类级别指标
使用 COMET_LOG_PER_CLASS_METRICS
环境变量,用于记录每个类别的 mAP、精确率、召回率、f1:
env COMET_LOG_PER_CLASS_METRICS=true python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt
上传数据集到 Comet Artifacts
如果您想使用以下方式存储您的数据 Comet Artifacts,您可以使用 upload_dataset
标志。
数据集应按照以下描述进行组织 YOLOv5 文档。数据集配置 yaml
文件必须遵循与以下文件相同的格式: coco128.yaml
文件。
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_dataset
您可以在 Comet 工作区的 Artifacts 选项卡中找到上传的数据集:
您可以在 Comet UI 中直接预览数据:
Artifacts 是版本化的,并且还支持添加关于数据集的元数据。Comet 将自动记录来自数据集的元数据 yaml
文件:
使用保存的 Artifact
如果您想使用来自 Comet Artifacts 的数据集,请设置 path
数据集中的变量 yaml
指向以下 Artifact 资源 URL 的文件:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME>/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"
然后,通过以下方式将此文件传递到您的训练脚本:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.pt
Artifacts 还允许您跟踪数据在实验工作流程中的沿袭。在这里,您可以看到一个图表,显示了所有使用您上传的数据集的实验:
恢复训练运行
如果您的训练运行因任何原因中断,例如,网络连接中断,您可以使用以下命令恢复运行 resume
标志和 Comet 运行路径。
运行路径具有以下格式 comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID
.
这将把运行恢复到中断之前的状态,包括从检查点恢复模型,恢复所有超参数和训练参数,以及下载Comet数据集Artifacts(如果在原始运行中使用)。 恢复的运行将继续记录到Comet UI中的现有实验中:
python train.py \
--resume "comet://YOUR_RUN_PATH"
使用 Comet 优化器进行超参数搜索
YOLOv5 还与 Comet 的 Optimizer 集成,可以轻松地在 Comet UI 中可视化超参数扫描。
配置优化器 Sweep
要配置 Comet Optimizer,您需要创建一个 JSON 文件,其中包含有关 sweep 的信息。示例文件已在以下位置提供: utils/loggers/comet/optimizer_config.json
:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"
字段 hpo.py
脚本接受与以下相同的参数 train.py
。如果您希望将其他参数传递给您的 sweep,只需在脚本后添加它们:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
--save-period 1 \
--bbox_interval 1
可视化结果
Comet 提供了多种方式来可视化您的 sweep 结果。请查看此处包含已完成 sweep 的项目。