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

探索我们与 ClearML 的合作关系,体验 Ultralytics YOLOv5 的无缝 ML 集成、实验跟踪等功能。
在 Ultralytics,我们经常与其他初创公司合作,帮助我们为研发 YOLOv5 等优秀的开源工具提供资金支持,使这些工具能够免费提供给所有人使用。本文可能包含这些合作伙伴的关联链接。
ClearML是我们最新的合作伙伴:一个旨在为您节省时间的开源工具箱。
ClearML 的使命是加速 ML 的采用,它使 ML 可以无缝集成到任何软件和硬件产品中。
这种集成使训练YOLOv5模型和使用 ClearML 实验管理器自动跟踪模型变得更加简单。您可以轻松指定 ClearML 数据集版本 ID 作为数据输入,它将自动用于训练您的模型。
您可以自行决定使用其中多少种工具,您可以坚持使用实验管理器,也可以将它们串联起来,形成一个令人印象深刻的管道。
为了跟踪您的实验和数据,ClearML 需要与服务器通信。为此,您有两种选择:免费注册 ClearML 托管服务,或建立自己的服务器,请参阅此处。
甚至服务器也是开源的,因此,如果您要处理敏感数据,也不成问题!
瞧!你已经准备好开始了...
要启用 ClearML 实验跟踪,只需安装 ClearML pip 软件包。
pip install clearml
这将实现与 YOLOv5 训练脚本的集成。从现在起,每次训练运行都将被 ClearML 实验管理器捕获并存储。如果您想更改项目名称或任务名称,请访问我们的自定义日志,您可以在这里进行更改:utils/loggers/clearml/clearml_utils.py
python train.py --img 640 ---batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
这将捕捉到
还不错!现在,我们可以在 ClearML UI 中将所有这些信息可视化,以了解我们的训练进度。在表格视图中添加自定义列(如 mAP_0.5),这样就可以轻松对表现最佳的模型进行排序。或者选择多个实验,直接进行比较!
我们还可以利用所有这些信息做更多事情,比如超参数优化和远程执行,请继续阅读以了解如何操作!
一般来说,将数据与代码分开进行版本管理是个好主意,这样也便于获取最新版本。该版本库支持提供数据集版本 ID,如果数据集还没有版本 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
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txt
要将此数据集作为版本化数据集放入 ClearML,请进入数据集根目录并运行以下命令:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
命令 clearml-data sync 实际上是一个速记命令。你也可以一个接一个地运行这些命令:
# 如果您想基于
# 在另一个数据集版本上上传此版本,因此不会上传重复文件!
clearml-data create --name coco128 --project YOLOv5/p>
clearml-data add --files .
清除数据 关闭
现在您有了 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 代理可以做到这一点:它会监听队列中传入的任务,一旦发现任务,它就会重新创建环境并运行它,同时仍会向实验管理器报告标量、绘图等信息。
您只需运行 ClearML,就能将任何机器(云虚拟机、本地 GPU 机器、自己的笔记本电脑)变成 ClearML 代理:
clearml-agent 守护进程 --queue [--docker]
随着代理的运行,我们可以给它一些工作。还记得在 HPO 部分我们可以克隆任务并编辑超参数吗?我们也可以在界面上这样做!
🪄 右键单击克隆实验
🎯 将超参数编辑为您希望的值
⏳ 右键单击任务,将其queue 到任意队列中
现在,你可以像上文解释的那样克隆一个任务,或者通过添加 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 代理。任务处理完毕后,自动扩展器会自动关闭远程机器,而你也无需再付费!请观看下面的自动扩展器入门视频。
有问题吗?现在就加入我们的社区,留下您的问题!