使用 ClearML 远程训练和监控 Ultralytics YOLOv5
探索我们与 ClearML 的合作伙伴关系,通过无缝的 ML 集成、实验跟踪等功能,获得增强的 Ultralytics YOLOv5 体验。

在 Ultralytics,我们与其他初创公司进行商业合作,以帮助资助我们出色的开源工具(如 YOLOv5)的研发,从而让所有人都能免费使用它们。本文可能包含指向这些合作伙伴的联盟链接。
ClearML 是我们最新的合作伙伴:一个旨在为你节省时间的开源工具箱。
ClearML 的使命是加速 ML 的普及,它使 ML 能够无缝集成到任何现有的软件和硬件产品中。
此集成使得训练 YOLOv5 模型并使用 ClearML 实验管理器自动进行跟踪变得更加简单。你可以轻松指定一个 ClearML 数据集版本 ID 作为数据输入,它将自动用于训练你的模型。
Link to this section将你的实验跟踪提升到新高度#
- 在实验管理器中跟踪每一次 YOLOv5 训练运行。
- 使用集成的 ClearML 数据版本控制工具对你的自定义训练数据进行版本控制并轻松访问。
- 使用 ClearML 超参数优化获得最佳的 mAP。
- 使用 ClearML Serving 只需几条命令即可将你新训练的 YOLOv5 模型转变为 API。
至于要使用多少这些工具,完全取决于你。你可以只使用实验管理器,或者将它们全部链接起来组成一个强大的流水线。
Link to this section环境设置#
为了跟踪你的实验和数据,ClearML 需要与服务器进行通信。你有两种选择:注册免费的 ClearML Hosted Service,或者设置你自己的服务器,详见 ClearML Server deployment docs。
即使是服务器也是开源的,所以如果你处理的是敏感数据,那也没问题!
- 安装 clearml python 包:
pip install clearml - 通过创建凭据(进入右上角的设置 → 工作区 → 创建新凭据)将 ClearML SDK 连接到服务器,然后执行以下命令并按照说明操作:
clearml-init
瞧!你准备好开始了...
Link to this section使用 ClearML 训练 YOLOv5#
要启用 ClearML 实验跟踪,只需安装 ClearML pip 包即可。
pip install clearml这将启用与 YOLOv5 训练脚本的集成。从现在开始,每一次训练运行都将由 ClearML 实验管理器捕获并存储。如果你想更改 project_name 或 task_name,请前往我们的自定义记录器,在那里你可以更改它:utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache这将捕获:
- 源代码 + 未提交的更改
- 已安装的包
- (超)参数
- 模型文件(使用 --save-period n 每 n 个 epoch 保存一个检查点)
- 控制台输出
- 标量(mAP_0.5, mAP_0.5:0.95, 精确率, 召回率, 损失, 学习率等)
- 常规信息,如机器详情、运行时间、创建日期等。
- 所有生成的图表,如标签相关图和混淆矩阵
- 每个 epoch 的带边界框的图像
- 每个 epoch 的马赛克图
- 每个 epoch 的验证图像
还不错吧!现在,我们可以在 ClearML UI 中可视化所有这些信息,以概览我们的训练进度。向表格视图添加自定义列(例如 mAP_0.5),这样你就可以轻松地对表现最好的模型进行排序。或者选择多个实验并直接进行比较!
利用所有这些信息我们还可以做更多的事情,比如超参数优化和远程执行,所以请继续阅读以了解如何操作!
Link to this section数据集版本管理#
将数据与代码分开进行版本控制通常是一个好主意,同时也使得获取最新版本变得容易。此存储库支持提供数据集版本 ID,如果数据还不存在,它将确保获取数据。此外,此工作流还将所使用的数据集 ID 保存为任务参数的一部分,因此你始终确切知道哪个实验使用了哪些数据!
Link to this section准备你的数据集#
YOLOv5 存储库通过使用包含其信息的 YAML 文件来支持多种不同的数据集。默认情况下,数据集会下载到相对于存储库根目录的 ../datasets 文件夹中。因此,如果你使用 YAML 中的链接或 yolov5 提供的脚本下载了 coco128 数据集,你将获得此文件夹结构:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt但这可以是任何你希望使用的数据集。只要你保持此文件夹结构,请随意使用你自己的数据集。
接下来,⚠️将对应的 YAML 文件复制到数据集文件夹的根目录⚠️。这些 YAML 文件包含了 ClearML 正确使用该数据集所需的信息。当然,你也可以自己制作,只需遵循示例 YAML 的结构即可。
基本上,我们需要以下键:path, train, test, val, nc, names。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txtLink to this section上传你的数据集#
要将此数据集作为版本化数据集导入 ClearML,请转到数据集根文件夹并运行以下命令:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .命令 clearml-data sync 实际上是一个简写命令。你也可以依次运行这些命令:
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeLink to this section使用 ClearML 数据集运行训练#
现在你有了 ClearML 数据集,你可以非常简单地使用它来训练自定义 YOLOv5 模型。
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cacheLink to this section超参数优化#
既然我们有了实验和数据版本,是时候看看我们可以基于此构建什么了!
使用代码信息、已安装的包和环境详情,实验本身现在是完全可复现的。事实上,ClearML 允许你克隆一个实验甚至更改其参数。然后我们可以自动用这些新参数重新运行它,这基本上就是 HPO 所做的事情!
为了在本地运行超参数优化,我们为你提供了一个预制脚本。只需确保训练任务至少运行过一次,使其存在于 ClearML 实验管理器中,我们本质上会克隆它并更改其超参数。
你需要在 utils/loggers/clearml/hpo.py 中的脚本里填入此模板任务的 ID,然后直接运行它即可。你可以将 task.execute_locally() 更改为 task.execute(),将其放入 ClearML 队列,并让远程代理代替你在其上工作。
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.pyLink to this section远程执行(高级)#
在本地运行 HPO 非常方便,但如果我们想在远程机器上运行实验呢?也许你可以访问现场非常强大的 GPU 机器,或者你有预算使用云 GPU。这就是 ClearML Agent 发挥作用的地方。
看看代理可以在这里做什么:
简而言之:实验管理器跟踪的每个实验都包含足够的信息以便在另一台机器上复现它(已安装的包、未提交的更改等)。所以 ClearML 代理就是这样做的:它监听队列中的传入任务,当找到一个时,它会重新创建环境并运行它,同时仍然向实验管理器报告标量、图表等。
你可以通过简单地运行以下命令,将任何机器(云虚拟机、本地 GPU 机器、你自己的笔记本电脑)变成一个 ClearML 代理:
clearml-agent daemon --queue [--docker]Link to this section克隆、编辑和排队#
有了运行中的代理,我们可以给它分配一些工作。还记得 HPO 部分中我们可以克隆任务并编辑超参数吗?我们也可以在界面中这样做!
🪄 通过右键点击克隆实验
🎯 将超参数编辑为你想要的值
⏳ 通过右键点击将任务放入任何队列中
Link to this section远程执行任务#
现在你可以像上面解释的那样克隆任务,或者只需通过添加 task.execute_remotely() 来标记你当前的脚本,在执行时,它将被放入一个队列,供代理开始工作!
要远程运行 YOLOv5 训练脚本,你所要做的就是在实例化 ClearML 记录器之后将这一行添加到 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有任何疑问吗?加入我们的社区并立即留下你的问题!






