
使用 Comet 的 YOLOv5#
本指南将介绍如何将 YOLOv5 与 Comet 配合使用。Comet 是一款强大的工具,可用于跟踪、比较和优化机器学习实验。
关于 Comet#
Comet 开发了一系列工具,帮助数据科学家、工程师和团队负责人加速并优化机器学习和深度学习模型。
实时跟踪并可视化模型指标,保存超参数、数据集和模型检查点,并使用 Comet 自定义面板可视化模型预测结果!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 会记录以下内容:
指标#
参数量#
- 模型超参数
- 通过命令行选项传入的所有参数
可视化内容#
- 模型在验证数据上的预测混淆矩阵
- 所有类别的 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_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记录模型预测结果#
默认情况下,模型预测结果(图像、真实标签和边界框)会记录到 Comet。
你可以通过传递 bbox_interval 命令行参数,控制预测结果及关联图像的记录频率。你可以使用 Comet 的目标检测自定义面板可视化预测结果。此频率表示每个轮次中每隔 N 个数据批次记录一次。以下示例会记录每个轮次中的每第 2 个数据批次。
注意: YOLOv5 验证数据加载器使用的批次大小是训练批次大小的两倍(--batch 16 为 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 Workspace 的 Artifacts 选项卡中找到已上传的数据集:

你可以直接在 Comet UI 中预览数据:

Artifacts 支持版本管理,也支持添加数据集元数据。Comet 会自动记录数据集 yaml 文件中的元数据:

使用已保存的 Artifact#
如果你想使用 Comet Artifacts 中的数据集,请在数据集 yaml 文件中将 path 变量设为以下 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.ptArtifacts 还支持跟踪数据在实验工作流中的流转过程。下图展示了所有使用过你上传数据集的实验:

恢复训练运行#
如果训练运行因任何原因中断,例如网络连接中断,你可以使用 resume 标志和 Comet Run Path 恢复运行。
Run Path 的格式如下:comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID。
这会将运行恢复到中断前的状态,包括从检查点恢复模型、恢复所有超参数和训练参数,以及在原始运行中使用了 Comet 数据集 Artifact 时重新下载这些 Artifact。恢复后的运行会继续向 Comet UI 中现有的 Experiment 记录日志:
python train.py \
--resume "comet://YOUR_RUN_PATH"使用 Comet Optimizer 搜索超参数#
YOLOv5 还集成了 Comet 的 Optimizer,可轻松在 Comet UI 中可视化超参数扫描结果。
配置 Optimizer 扫描#
要配置 Comet Optimizer,你需要创建一个包含扫描信息的 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 提供多种方式来可视化扫描结果。请查看这里的已完成扫描项目。

常见问题#
在 comet.com 创建免费账户,打开账户设置并复制 API 密钥。将其导出为
COMET_API_KEY,或将其存储在train.py旁边的.comet.config文件中。可以。将
COMET_MODE=offline设置为将实验写入本地归档,之后再使用comet upload path/to/archive.zip上传。默认情况下,检查点日志记录处于关闭状态。将
--save-period 1(或其他间隔)传递给train.py,每个已保存的检查点都会上传到实验中。从 Comet UI 复制运行路径,然后使用
python train.py --resume "comet://WORKSPACE/PROJECT/EXPERIMENT_ID"开始训练。YOLOv5 会恢复检查点、超参数和任何 Comet 数据集 Artifact,并继续向同一个实验记录日志。