
将 YOLOv5 与 Comet 结合使用
本指南将介绍如何将 YOLOv5 与 Comet 结合使用,这是一个用于跟踪、比较和优化机器学习实验的强大工具。
关于 Comet
Comet 构建的工具可帮助数据科学家、工程师和团队领导者加速并优化 机器学习 和 深度学习 模型。
实时跟踪并可视化模型指标,保存超参数、数据集和模型检查点,并利用 Comet Custom Panels 可视化你的模型预测!Comet 能确保你不会丢失工作进度,并能轻松地在各规模团队间分享结果和开展协作!
入门指南
安装 Comet
pip install comet_ml配置 Comet 凭证
有两种方法可以为 YOLOv5 配置 Comet。
你可以通过环境变量设置你的凭证:
环境变量
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 将记录以下项目:
指标
- 训练和 验证数据 的 Box Loss、Object Loss 和 Classification Loss
- 验证数据的 mAP_0.5, mAP_0.5:0.95 指标
- 验证数据的 Precision 和 Recall
参数量
- 模型超参数
- 通过命令行选项传递的所有参数
可视化
- 验证数据上模型预测的 混淆矩阵
- 所有类别的 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 参数传递给训练脚本。这将根据 save-period 提供的时间间隔将记录的检查点保存到 Comet:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1记录模型预测
默认情况下,模型预测(图像、真实标签和边界框)将被记录到 Comet。
你可以通过传递 bbox_interval 命令行参数来控制预测和相关图像的记录频率。可以使用 Comet 的 Object Detection 自定义面板可视化预测。此频率对应于每个 epoch 的每第 N 个数据批次。在下面的示例中,我们记录每个 epoch 的每第 2 个批次的数据。
注意: YOLOv5 验证数据加载器默认的 batch size 为 32,因此你需要相应地设置记录频率。
这是一个 使用该面板的示例项目
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
If you would like to use a dataset from Comet Artifacts, set the path variable in your dataset yaml file to point to the following Artifact resource 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.ptArtifacts 还允许你跟踪数据在实验工作流中流转时的血缘关系。你可以在此处查看显示所有使用过你已上传数据集的实验的图表:

恢复训练运行
如果你的训练运行因任何原因中断(例如网络连接中断),你可以使用 resume 标志和 Comet 运行路径(Run Path)恢复运行。
运行路径格式如下:comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID。
这将使运行恢复到中断前的状态,包括从检查点恢复模型、恢复所有超参数和训练参数,以及下载如果原始运行中使用了的话的 Comet 数据集 Artifacts。恢复的运行将继续记录到 Comet UI 中的现有实验中:
python train.py \
--resume "comet://YOUR_RUN_PATH"使用 Comet 优化器进行超参数搜索
YOLOv5 也与 Comet 的优化器 集成,使得在 Comet UI 中可视化超参数扫描变得简单。
配置优化器扫描
要配置 Comet 优化器,你需要创建一个包含扫描信息的 JSON 文件。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 相同的参数。如果你希望将额外的参数传递给你的扫描,只需将它们添加到脚本之后即可:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
--save-period 1 \
--bbox_interval 1结果可视化
Comet 提供了多种方法来可视化扫描结果。查看 此处一个已完成扫描的项目。
