绿色检查
链接复制到剪贴板

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

了解我们与ClearML 的合作关系,通过无缝 ML 集成、实验跟踪等功能增强 UltrlayticsYOLOv5 体验。

在Ultralytics ,我们与其他初创公司建立了商业合作伙伴关系,以帮助我们为我们出色的开源工具(如YOLOv5 )的研究和开发提供资金,从而使这些工具对所有人都是免费的。本文可能包含这些合作伙伴的关联链接。

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

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

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

让您的实验跟踪更上一层楼

  • 在实验管理器中跟踪每次YOLOv5 训练运行。
  • 利用集成的ClearML 数据版本工具,对自定义培训数据进行版本控制并轻松访问。
  • 使用ClearML 超参数优化技术获得最佳 mAP。
  • 使用ClearML Serving,只需几条命令就能将新训练的YOLOv5 模型转化为应用程序接口。

您可以自行决定使用其中多少种工具,您可以坚持使用实验管理器,也可以将它们串联起来,形成一个令人印象深刻的管道。

准备工作

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

甚至服务器也是开源的,因此,如果您要处理敏感数据,也不成问题!

  1. 安装clearml python 软件包: pip installclearml
  2. 通过创建凭证将ClearML SDK 连接到服务器(转到右上角的设置 -> 工作区 -> 创建新凭证),然后执行以下命令并按说明操作:clearml-启动

好了你已经准备好开始了...

培训YOLOv5 ClearML

要启用ClearML 实验跟踪功能,只需安装ClearML pip 软件包即可。

pip installclearml

这将实现与YOLOv5 训练脚本的整合。从现在起,每次训练运行都将被ClearML 实验管理器捕获并存储。如果您想更改项目名称或任务名称,请前往我们的自定义日志程序,在那里可以进行更改: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 个纪元保存一个检查点)
  • 控制台输出
  • 标度(mAP_0.5、mAP_0.5:0.95、精确度、召回率、损失、学习率......)
  • 一般信息,如机器详细信息、运行时间、创建日期等。
  • 所有生成的图表,如标签相关图和混淆矩阵
  • 每个纪元带边框的图像
  • 每个纪元的镶嵌图
  • 每个纪元的验证图像

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

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

数据集版本管理

一般来说,将数据与代码分开进行版本管理是个好主意,这样也便于获取最新版本。该版本库支持提供数据集版本 ID,如果数据集还没有版本 ID,它将确保获取数据。此外,该工作流还会将所使用的数据集 ID 保存为任务参数的一部分,因此您可以随时确定哪个实验使用了哪些数据!

数据、Ultralytics YOLOv5  和ClearML

准备数据集

YOLOv5 资源库通过使用包含数据集信息的 YAML 文件支持多种不同的数据集。默认情况下,数据集会下载到与版本库根文件夹相对应的 ./datasets 文件夹中。因此,如果使用 YAML 中的链接或yolov5 提供的脚本下载 coco128 数据集,就会得到这样的文件夹结构:

.
|_yolov5
|_ 数据集
|_ coco128
|_ 图像
|_ 标签
|_ LICENSE
|_ README.txt

但这可以是你想要的任何数据集。您也可以使用自己的数据集,只要保持这个文件夹结构即可。

接下来,⚠️,将相应的 YAML 文件复制到数据集文件夹的根目录⚠️。这些 YAML 文件包含ClearML 正确使用数据集所需的信息。当然,您也可以自己制作这些文件,只需遵循示例 YAML 的结构即可。

基本上,我们需要以下键:path、train、test、val、nc、names。

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

上传数据集

要将该数据集作为版本化数据集导入ClearML ,请进入数据集根目录并运行以下命令:

cd coco128

clearml-data sync --projectYOLOv5 --name coco128 --folder .


clearml-data sync 命令实际上是一个速记命令。你也可以一个接一个地运行这些命令:

# 如果您想基于

# 在另一个数据集版本上上传此版本,因此不会上传重复文件!

clearml数据创建 --name coco128 --projectYOLOv5/p>

clearml-数据添加 --files .

clearml-数据关闭

使用ClearML 数据集进行运行训练

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

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

超参数优化

现在,我们已经有了实验和数据版本,是时候看看我们能在上面做些什么了!

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

要在本地运行超参数优化,我们为您提供了一个预制脚本。只需确保训练任务至少运行过一次,这样它就会出现在ClearML 实验管理器中,我们基本上会克隆它并更改其超参数。

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

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

HPO,Ultralytics YOLOv5  和ClearML

远程执行(高级)

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

在这里查看代理可以做些什么:

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

您只需运行该程序,就能将任何机器(云虚拟机、本地GPU 机器、自己的笔记本电脑......)变成ClearML 代理:

clearml-代理守护进程 --queue [--docker]

克隆、编辑和排队

随着代理的运行,我们可以给它一些工作。还记得在 HPO 部分我们可以克隆任务并编辑超参数吗?我们也可以在界面上这样做!

🪄 右键单击克隆实验

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

⏳ 右键单击任务,将其queue 到任意队列中

Enqueue、Ultralytics YOLOv5  和ClearML

远程执行任务

现在,你可以像上文解释的那样克隆一个任务,或者通过添加 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 代理。任务处理完毕后,自动扩展程序会自动关闭远程机器,您也可以停止付费!请观看下面的自动扩展器入门视频。

有问题吗?现在就加入我们的社区,留下您的问题!

Facebook 徽标Twitter 徽标LinkedIn 徽标复制链接符号

在此类别中阅读更多内容

让我们共同打造人工智能的未来

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