探索我们与ClearML 的合作关系,体验Ultralytics YOLOv5 的无缝 ML 集成、实验跟踪等功能。

探索我们与ClearML 的合作关系,体验Ultralytics YOLOv5 的无缝 ML 集成、实验跟踪等功能。

在Ultralytics ,我们经常与其他初创公司合作,帮助我们为研发YOLOv5 等优秀的开源工具提供资金支持,使这些工具能够免费提供给所有人使用。本文可能包含这些合作伙伴的关联链接。
ClearML是我们最新的合作伙伴:一个旨在为您节省时间的开源工具箱。
ClearML 的使命是加速 ML 的采用,它使 ML 可以无缝集成到任何软件和硬件产品中。
这种集成使培训 YOLOv5模型,并使用ClearML 实验管理器自动track 它。您可以轻松指定ClearML 数据集版本 ID 作为数据输入,它将自动用于训练您的模型。
您可以自行决定使用多少这些工具,您可以坚持使用实验管理器,或者将它们全部连接到一个令人印象深刻的管道中。
为了track 您的实验和数据,ClearML 需要与服务器通信。为此,您有两种选择:免费注册ClearML 托管服务,或建立自己的服务器,请参阅此处。
即使服务器是开源的,所以如果您处理敏感数据,那也没问题!
好了!您已准备好开始...
要启用ClearML 实验跟踪功能,只需安装ClearML pip 软件包即可。
pip installclearml
这将实现与YOLOv5 训练脚本的集成。从现在起,每次训练运行都将被ClearML 实验管理器捕获并存储。如果您想更改项目名称或任务名称,请访问我们的自定义日志,您可以在这里进行更改:utils/loggers/clearml/clearml_utils.py
python train.py --img 640 ---batch 16 --epochs 3 --data coco128yaml --weights yolov5s.pt --cache
这将捕获:
还不错!现在,我们可以在ClearML UI 中将所有这些信息可视化,以了解我们的训练进度。在表格视图中添加自定义列(如mAP.5),这样就可以轻松对表现最佳的模型进行排序。或者选择多个实验并直接进行比较!
我们甚至可以利用所有这些信息做更多的事情,例如超参数优化和远程执行,请继续阅读以了解如何操作!
通常,将数据与代码分开进行版本控制是一个好主意,并且可以轻松获取最新版本。此存储库支持提供数据集版本 ID,并将确保获取数据(如果尚不存在)。除此之外,此工作流程还会将使用的数据集 ID 保存为任务参数的一部分,因此您将始终确定在哪个实验中使用了哪些数据!
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
|_ coco128yaml # ← HERE!
|_ LICENSE
|_ README.txt
要将此数据集作为版本化数据集放入ClearML ,请进入数据集根目录并运行以下命令:
cd coco128
clearml sync --projectYOLOv5 --name coco128 --folder .
命令clearml sync 实际上是一个速记命令。你也可以一个接一个地运行这些命令:
# 如果你想基于,可以选择添加 --parent
# 这个版本在另一个数据集版本上,这样就不会上传重复的文件!
clearml create --name coco128 --projectYOLOv5
clearml add --files .
clearml 关闭
现在您有了ClearML 数据集,可以非常简单地使用它来训练自定义的YOLOv5 模型。
python train.py --img 640 ---batch 16 --epochs 3 --dataclearml:// --weights yolov5s.pt --cache
现在我们有了实验和数据版本,是时候看看我们可以在此基础上构建什么了!
利用代码信息、已安装的软件包和环境详情,实验本身现在完全可以重现。事实上,ClearML 允许您克隆一个实验,甚至更改其参数。然后,我们就可以用这些新参数自动重新运行它,这基本上就是 HPO 所做的工作!
要在本地运行超参数优化,我们为您提供了一个预制脚本。只需确保训练任务已至少运行过一次,使其位于ClearML 实验管理器中,我们就能基本上克隆它并更改其超参数。
您需要在clearml.py 中找到的脚本中填写该模板任务的 ID,然后直接运行它。您可以将 task.execute_locally() 改为 task.execute(),将其放入ClearML 队列,让远程代理代替它工作。
# 要使用 optuna,请先安装它,否则可以将优化器改为 RandomSearch pip install optunapython clearml.py
在本地运行 HPO 确实非常方便,但如果我们想在远程机器上运行我们的实验呢?也许您可以在现场使用非常强大的GPU 机器,或者您有一些预算来使用云 GPU。这就是ClearML Agent 发挥作用的地方。
查看代理可以执行的操作:
简而言之:实验管理器跟踪的每个实验都包含足够的信息,可以在不同的机器上重现(已安装的软件包、未提交的更改等)。因此,ClearML 代理可以做到这一点:它会监听队列中传入的任务,一旦发现任务,它就会重新创建环境并运行它,同时仍会向实验管理器报告标量、绘图等信息。
您只需运行ClearML ,就能将任何机器(云虚拟机、本地GPU 机器、自己的笔记本电脑)变成ClearML 代理:
clearml 守护进程 --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 代理。任务处理完毕后,自动扩展器会自动关闭远程机器,而你也无需再付费!请观看下面的自动扩展器入门视频。
有任何问题吗?加入我们的社区,立即提出您的问题!