敬请关注 YOLO Vision 2025!
2025年9月25日
英国夏令时 10:00 - 18:00
混合活动
Yolo Vision 2024

使用 ClearML 远程训练和监控 Ultralytics YOLOv5

Ultralytics 团队

4 分钟阅读

2022年10月21日

探索我们与 ClearML 的合作,通过无缝的 ML 集成、实验跟踪等,获得增强的 Ultralytics YOLOv5 体验。

Ultralytics 在商业上与其他初创公司合作,以帮助我们资助我们出色的开源工具(如 YOLOv5)的研发,以保持它们对所有人免费。本文可能包含指向这些合作伙伴的附属链接。

ClearML 是我们最新的合作伙伴:一个旨在为您节省时间的开源工具箱。

ClearML 的使命是加速 ML 的采用,使 ML 能够无缝集成到任何软件和硬件产品中。

通过这种集成,可以更轻松地训练 YOLOv5 模型,并使用 ClearML 实验管理器自动对其进行跟踪。您可以轻松地将 ClearML 数据集版本 ID 指定为数据输入,它将自动用于训练您的模型。

将您的实验跟踪提升到新的水平

  • 在实验管理器中跟踪每次 YOLOv5 训练运行。
  • 使用集成的 ClearML 数据版本控制工具,轻松管理版本并访问您的自定义训练数据。
  • 使用 ClearML 超参数优化获得最佳 mAP。
  • 只需几条命令,即可使用 ClearML Serving 将新训练的 YOLOv5 模型转换为 API。

您可以自行决定使用多少这些工具,您可以坚持使用实验管理器,或者将它们全部连接到一个令人印象深刻的管道中。

设置事项

为了跟踪您的实验和数据,ClearML 需要与服务器通信。您有两个选择:免费注册 ClearML 托管服务或设置您自己的服务器,请参见此处

即使服务器是开源的,所以如果您处理敏感数据,那也没问题!

  1. 安装 clearml python 包:pip install clearml
  2. 通过创建凭据将ClearML SDK连接到服务器(转到右上角的“设置”→“工作区”→“创建新凭据”),然后执行以下命令并按照说明操作:clearml-init

好了!您已准备好开始...

使用 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 的带边界框的图像
  • Mosaic 每轮训练
  • 每个 epoch 的验证图像数量

还不错!现在,我们可以在 ClearML UI 中可视化所有这些信息,以了解我们的训练进度。将自定义列添加到表格视图(例如,mAP_0.5),以便您可以轻松地对性能最佳的模型进行排序。或者选择多个实验并直接比较它们!

我们甚至可以利用所有这些信息做更多的事情,例如超参数优化和远程执行,请继续阅读以了解如何操作!

数据集版本管理

通常,将数据与代码分开进行版本控制是一个好主意,并且可以轻松获取最新版本。此存储库支持提供数据集版本 ID,并将确保获取数据(如果尚不存在)。除此之外,此工作流程还会将使用的数据集 ID 保存为任务参数的一部分,因此您将始终确定在哪个实验中使用了哪些数据!

准备您的数据集

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 # ← 在这里!
        |_ LICENSE
        |_ README.txt

上传您的数据集

要将此数据集作为版本化数据集导入 ClearML,请转到数据集根文件夹并运行以下命令:

cd coco128

clearml-data sync --project YOLOv5 --name coco128 --folder .


命令 clearml-data sync 实际上是一个简写命令。您也可以依次运行以下命令:

# 如果你想基于,可以选择添加 --parent

# 这个版本在另一个数据集版本上,这样就不会上传重复的文件!

clearml-data create --name coco128 --project YOLOv5/p>

clearml-data add --files .

clearml-data close

使用 ClearML 数据集运行训练

现在您有了一个 ClearML 数据集,您可以非常简单地使用它来训练自定义 YOLOv5 模型。

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

超参数优化

现在我们有了实验和数据版本,是时候看看我们可以在此基础上构建什么了!

利用代码信息、已安装的软件包和环境详细信息,现在可以完全重现实验。实际上,ClearML 允许您克隆实验,甚至更改其参数。然后,我们可以使用这些新参数自动重新运行它,这基本上就是 HPO 所做的!

要在本地运行超参数优化,我们为您提供了一个预先制作的脚本。 只需确保至少运行一次训练任务,以便它位于 ClearML 实验管理器中,我们将从本质上克隆它并更改其超参数。

您需要在 utils/loggers/clearml/hpo.py 中的脚本中填写此模板任务的 ID,然后运行它即可。您可以将 task.execute_locally() 更改为 task.execute(),将其放入 ClearML 队列中,并让远程代理处理它。

# 要使用 optuna,请先安装它,否则你可以将优化器更改为 RandomSearch pip install optuna python utils/loggers/clearml/hpo.py

远程执行(高级)

在本地运行HPO非常方便,但如果我们要在一台远程机器上运行实验该怎么办?也许您可以访问现场一台非常强大的GPU机器,或者您有一些预算可以使用云GPU。这就是ClearML Agent发挥作用的地方。

查看代理可以执行的操作:

简而言之:实验管理器跟踪的每个实验都包含足够的信息,以便在不同的机器上重现它(已安装的软件包、未提交的更改等)。因此,ClearML 代理的作用就在于此:它监听队列中传入的任务,当它找到一个任务时,它会重新创建环境并运行它,同时仍然向实验管理器报告标量、绘图等。

您只需运行以下命令,即可将任何机器(云 VM、本地 GPU 机器、您自己的笔记本电脑)变成 ClearML 代理:

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

克隆、编辑和排队

在我们的代理运行后,我们可以给它分配一些工作。还记得在 HPO 部分中,我们可以克隆任务并编辑超参数吗?我们也可以通过界面来完成!

🪄 通过右键单击克隆实验

🎯 将超参数编辑为你希望的值

⏳ 右键单击任务,将其加入到任何队列中

远程执行任务

现在您可以像我们上面解释的那样克隆一个任务,或者只需通过添加 task.execute_remotely() 来标记您当前的脚本,在执行时,它将被放入队列中,供代理开始工作!

要远程运行 YOLOv5 训练脚本,您只需在 ClearML 记录器实例化后将此行添加到 training.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 either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...

在此更改后运行训练脚本时,python将运行该脚本直到该行,之后它将打包代码并将其发送到队列!

自动缩放工作器

ClearML 还配备了自动缩放器!此工具会自动在您选择的云(AWS、GCP、Azure)中启动新的远程机器,并在队列中检测到实验时将其转换为 ClearML 代理。任务处理完毕后,自动缩放器将自动关闭远程机器,您也无需再支付费用!请查看下面的自动缩放器入门视频。

有任何问题吗?加入我们的社区,立即提出您的问题!

让我们一起构建人工智能的未来!

开启您的机器学习未来之旅

免费开始
链接已复制到剪贴板