
YOLOv5 with Comet
本指南将介绍如何将YOLOv5与Comet结合使用
关于Comet
Comet构建的工具帮助数据科学家、工程师和团队领导加速和优化机器学习和深度学习模型。
实时跟踪和可视化模型指标,保存您的超参数、数据集和模型检查点,并通过Comet自定义面板可视化您的模型预测!Comet确保您不会失去对工作的跟踪,并使分享结果和跨团队协作变得容易,无论团队规模如何!
入门指南
安装Comet
配置Comet凭证
有两种方法可以配置YOLOv5的Comet。
您可以通过环境变量设置您的凭证
环境变量
export COMET_API_KEY=<Your Comet API Key>
export COMET_PROJECT_NAME=<Your Comet Project Name> # 这将默认为'yolov5'
或者在您的工作目录中创建一个.comet.config文件,并在其中设置您的凭证。
Comet配置文件
运行训练脚本
# 在COCO128上训练YOLOv5s 5个epoch
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.pt
就是这样!Comet将自动记录您的超参数、命令行参数、训练和验证指标。您可以在Comet UI中可视化和分析您的运行

尝试一个示例!
查看一个完成的运行示例
或者更好的是,在这个Colab笔记本中自己尝试一下
自动记录
默认情况下,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 # 设置Comet是否以'online'或'offline'模式运行。默认为online
export COMET_MODEL_NAME=<your model name> #设置保存模型的名称。默认为yolov5
export COMET_LOG_CONFUSION_MATRIX=false # 设置为禁用记录Comet混淆矩阵。默认为true
export COMET_MAX_IMAGE_UPLOADS=<number of allowed images to upload to Comet> # 控制总共上传到Comet的图像预测数量。默认为100。
export COMET_LOG_PER_CLASS_METRICS=true # 设置为在训练结束时记录每个检测类的评估指标。默认为false
export COMET_DEFAULT_CHECKPOINT_FILENAME=<your checkpoint filename> # 如果您想从不同的检查点恢复训练,请设置此项。默认为'last.pt'
export COMET_LOG_BATCH_LEVEL_METRICS=true # 如果您想在批次级别记录训练指标,请设置此项。默认为false。
export COMET_LOG_PREDICTIONS=true # 设置为false以禁用记录模型预测
使用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 的 目标检测 自定义面板进行可视化。此频率对应于每个 epoch 的第 N 批数据。在下面的示例中,我们为每个 epoch 记录每 2 批数据。
注意: YOLOv5 验证数据加载器默认设置为 批量大小 为 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
如果您想使用 Comet Artifacts 中的数据集,请将数据集 yaml 文件中的 path 变量设置为指向以下 Artifact 资源 URL。
然后以以下方式将此文件传递给您的训练脚本
Artifacts 还允许您跟踪数据在其实验工作流程中的流动情况。在这里,您可以看到一个图表,显示了所有使用您上传数据集的实验。
恢复训练运行
如果您的训练运行因任何原因中断,例如互联网连接中断,您可以使用 resume 标志和 Comet 运行路径恢复运行。
运行路径具有以下格式 comet://<your workspace name>/<your project name>/<experiment id>。
这将恢复运行到中断前的状态,包括从检查点恢复模型、恢复所有超参数和训练参数,并在原始运行中使用时下载 Comet 数据集 Artifacts。恢复的运行将继续记录到 Comet UI 中的现有实验
使用 Comet Optimizer 进行超参数搜索
YOLOv5 还与 Comet 的 Optimizer 集成,使得在 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 optimizer -j <设置工作线程数> utils/loggers/comet/hpo.py \
utils/loggers/comet/optimizer_config.json"
可视化结果
Comet 提供了多种方式来可视化扫描结果。请查看已完成扫描的项目示例。
