Meet YOLO26: next-gen vision AI.

Link to this sectionClearML 集成#

ClearML MLOps experiment tracking platform

Link to this section关于 ClearML#

ClearML 是一个开源的 MLOps 平台,旨在简化机器学习工作流程并节省工程时间。

  • 🔨 在 experiment manager 中跟踪每一次 YOLOv5 训练运行。
  • 🔧 使用集成的 ClearML data versioning tool 对你的自定义训练数据进行版本控制和访问。
  • 🔦 使用 ClearML Agent 远程训练并监控 YOLOv5 运行。
  • 🔬 使用 ClearML hyperparameter optimization 找到最佳 mAP。
  • 🔭 使用 ClearML Serving,只需几个命令即可将你训练好的 YOLOv5 model into an API

你可以根据需要使用这些工具中的任意数量——仅从实验管理器开始,或者将所有内容连接成一个完整的管道。

显示 YOLOv5 训练指标的 ClearML 标量仪表板

Link to this section🦾 设置准备工作#

ClearML 需要与服务器通信以跟踪你的实验和数据。你有两个选择:

然后安装 clearml Python 包并将 SDK 连接到你的服务器:

pip install clearml

Settings → Workspace → Create new credentials(ClearML UI 右上角)生成凭据,然后运行:

clearml-init

按照提示操作。就是这样——设置完成了。

Link to this section🚀 使用 ClearML 训练 YOLOv5#

要启用实验跟踪,请安装 ClearML pip 包(如果你尚未安装):

pip install clearml

这将启用与 YOLOv5 训练脚本的集成。从现在开始,每次训练运行都将由 ClearML experiment manager 捕获并存储。

要自定义项目和任务名称,请将 --project--name 传递给 train.py。默认值为 YOLOv5Training。ClearML 使用 / 作为子项目分隔符,因此在自定义项目名称中请避免使用 /

python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

或者使用自定义名称:

python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

每次运行都会捕获:

  • 源代码和未提交的更改
  • 已安装的包
  • 超参数
  • 模型检查点(使用 --save-period nn 个 epoch 保存一次)
  • 控制台输出
  • 标量(mAP_0.5、mAP_0.5:0.95、准确率、召回率、损失、学习率)
  • 机器详情、运行时和创建日期
  • 生成的图表,例如标签相关图和混淆矩阵
  • 每个周期带有边界框的图像
  • 每个周期的马赛克可视化
  • 每个周期的验证图像

所有内容都会出现在 ClearML UI 中,以便你可以在一个地方监控训练。添加自定义列(例如 mAP_0.5)以按表现最好的模型排序,或选择多个实验进行并排比较。

继续阅读以了解超参数优化和远程执行。

Link to this section🔗 数据集版本管理#

将数据与代码分开进行版本控制,可以轻松拉取最新版本并确保完全可重复性。此存储库接受数据集版本 ID,如果数据缺失则自动获取,并将 ID 记录为任务参数,以便你始终知道哪个实验使用了哪份数据。

ClearML 数据集版本管理界面

Link to this section准备你的数据集#

YOLOv5 存储库通过 YAML 配置文件支持许多数据集。默认情况下,数据集会下载到相对于存储库根目录的 ../datasets 文件夹中。下载 coco128 后,文件夹结构如下:

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ LICENSE
        |_ README.txt

任何数据集只要保持这种结构都可以使用。

接下来,将数据集的 YAML 文件复制到数据集根文件夹中 —— ClearML 会读取该文件以正确使用数据集。你可以按照示例布局编写自己的 YAML,确保它定义了 pathtraintestvalncnames

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml  # <---- HERE
        |_ LICENSE
        |_ README.txt

Link to this section上传你的数据集#

要将数据集注册为带版本的 ClearML 数据集,请切换到其根文件夹并运行:

cd ../datasets/coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .

clearml-data sync 是以下序列的简写,你也可以显式运行它:

# Add --parent <parent_dataset_id> to base this version on a previous one.
# Duplicate files are not re-uploaded.
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close

Link to this section在 ClearML 数据集上进行训练#

注册数据集后,通过 ID 指向它进行训练:

python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache

Link to this section👀 超参数优化#

通过对实验和数据进行版本控制,你可以在此基础上进行构建。由于每个被跟踪的实验都会捕获完整的环境(代码、已安装的包和配置),因此运行是完全可重复的。ClearML 允许你克隆一个实验,更改其参数,并自动重新运行它,这就是超参数优化 (HPO) 的基础。

要在本地运行 HPO,请使用随附的脚本。首先确保实验管理器中存在训练任务 —— 脚本会克隆它并改变其超参数。

utils/loggers/clearml/hpo.py 中填写模板任务 ID,然后运行:

# Install Optuna or change the optimizer to RandomSearch.
pip install optuna
python utils/loggers/clearml/hpo.py

task.execute_locally() 切换为 task.execute(),将作业推送到 ClearML 队列,供远程代理获取。

带有 YOLOv5 指标的 ClearML HPO 仪表板

Link to this section🤯 远程执行(进阶)#

在本地运行 HPO 很方便,但你通常会希望在更强大的硬件(本地 GPU 机器或云实例)上进行实验。这就是 ClearML Agent 的作用:

每个被跟踪的实验都包含在另一台机器上复现它所需的一切(已安装的包、未提交的更改和配置)。ClearML 代理会监听队列,获取传入的任务,重新创建环境,运行作业,并将标量和图表流式传输回实验管理器。

使用以下命令将任何机器(云虚拟机、本地 GPU 机器或笔记本电脑)变成 ClearML 代理:

clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]

Link to this section克隆、编辑和排队#

运行代理后,你可以直接从 UI 为其分配工作:

  • 🪄 右键点击一个实验并克隆它。
  • 🎯 编辑其超参数。
  • ⏳ 右键点击克隆的任务并将其排队到目标队列。

从 UI 将任务排队

Link to this section远程执行任务#

你也可以通过在实例化 ClearML 记录器后添加 task.execute_remotely(),以编程方式标记正在运行的脚本进行远程执行。将突出显示的行添加到 train.py

# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
    loggers = Loggers(save_dir, weights, opt, hyp, LOGGER)  # loggers instance
    if loggers.clearml:
        loggers.clearml.task.execute_remotely(queue="my_queue")  # <------ ADD THIS LINE
        # data_dict is None unless the user selected a ClearML dataset, in which case ClearML fills it in.
        data_dict = loggers.clearml.data_dict
# ...

进行此更改后,运行训练脚本会执行到该行,打包代码并将其发送到队列。

Link to this section自动伸缩工作节点#

ClearML 附带 autoscalers,当队列中有待处理的实验时,它们会在 AWS、GCP 或 Azure 中启动远程机器,将其转换为 ClearML 代理,并在工作完成后将其关闭 —— 因此你只需为实际运行的计算付费。

观看下方的入门视频:

观看视频

Link to this section了解更多#

有关将 ClearML 与 Ultralytics 模型集成的更多信息,请查看我们的 ClearML 集成指南,并探索如何使用其他实验跟踪工具增强你的 MLOps 工作流程

评论