YOLOv5 现已完全支持 ClearML 功能,开箱即用!🎉
由 ultralytics 构建的流行目标检测模型和框架现已内置 ClearML。现在,训练 YOLOv5 模型并让 ClearML 实验管理器自动跟踪它比以往任何时候都更容易。但这还不是全部,你可以轻松指定一个 ClearML 数据集版本 ID 作为数据输入,它将自动用于训练你的模型。请跟着我们阅读这篇博文,我们将讨论各种可能性并指导你完成实现过程。
请在 GitHub 上查看实现:此处。
🦾 设置
为了跟踪你的实验和/或数据,ClearML 需要与服务器通信。你有两种选择来获取服务器:
你可以免费注册 ClearML 托管服务,或者自己搭建服务器,详情请参阅此处。即使是服务器也是开源的,所以即使你在处理敏感数据,也应该没有问题!
1. 安装 clearml
python 包
2. 通过创建凭据(前往右上角“设置”->“工作区”->“创建新凭据”)将 ClearML SDK 连接到服务器,然后执行下方命令并按照说明操作
就是这样!你已经完成了 😎
🚀 使用 ClearML 训练 YOLOv5
要启用 ClearML 实验跟踪,只需安装 ClearML pip 包即可。
这将启用与 YOLOv5 训练脚本的集成。从现在起,每次训练运行都将被 ClearML 实验管理器捕获和存储。如果你想更改 project_name
或 task_name
,请前往我们的自定义记录器进行更改:utils/loggers/clearml/clearml_utils.py
这将捕获
- 源代码 + 未提交的更改
- 已安装的包
- (超)参数
- 模型文件(使用
--save-period n
每 n 个 epoch 保存一个检查点) - 控制台输出
- 标量(mAP_0.5, mAP_0.5:0.95, precision, recall, losses, learning rates, 等等)
- 一般信息,例如机器详情、运行时长、创建日期等。
- 所有生成的图表,例如标签相关图和混淆矩阵
- 每个 epoch 的带边界框图像
- 每个 epoch 的 Mosaic 图像
- 每个 epoch 的验证图像
- ……
是不是很多?🤯
现在,我们可以在 ClearML UI 中可视化所有这些信息,以了解训练进度概览。向表格视图添加自定义列(例如 mAP_0.5),以便你可以轻松按性能最佳的模型排序。或者选择多个实验并直接比较它们!
利用所有这些信息,我们还可以做更多的事情,比如超参数优化和远程执行,如果你想了解其工作原理,请继续阅读!
🔗 数据集版本管理
将数据版本化与代码分开通常是一个好主意,并且也便于获取最新版本。此仓库支持提供数据集版本 ID,并确保在数据尚不存在时获取数据。此外,此工作流还将使用的数据集 ID 作为任务参数的一部分进行保存,因此你将始终确切知道哪个实验使用了哪些数据!
准备你的数据集
YOLOv5 仓库通过使用包含其信息的 yaml 文件来支持多种不同的数据集。默认情况下,数据集会下载到相对于仓库根文件夹的 ../datasets
文件夹中。因此,如果你使用 yaml 中的链接或 yolov5 提供的脚本下载 coco128
数据集,你会得到这样的文件夹结构
但这可以是任何你想要的数据集。只要你保持这种文件夹结构,就可以自由使用自己的数据集。接下来,⚠️将相应的 yaml 文件复制到数据集文件夹的根目录⚠️。此 yaml 文件包含 ClearML 正确使用数据集所需的信息。当然,你也可以自己创建这个文件,只需遵循示例 yaml 文件的结构即可。
基本上我们需要以下键:path
, train
, test
, val
, nc
, names
。
上传你的数据集
要将此数据集作为版本化数据集上传到 ClearML,请进入数据集根文件夹并运行以下命令
命令 clearml-data sync
实际上是一个简写命令。你也可以依次运行这些命令
使用 ClearML 数据集运行训练
现在你拥有了一个 ClearML 数据集,你可以非常简单地使用它来训练自定义的 YOLOv5 🚀 模型!
👀 超参数优化
现在我们已经对实验和数据进行了版本控制,是时候看看我们可以在此基础上构建什么了!
利用代码信息、已安装的软件包和环境详情,实验本身现在是完全可重现的。实际上,ClearML 允许你克隆实验甚至更改其参数。然后我们可以直接使用这些新参数自动重新运行它,这基本上就是 HPO 所做的事情!
为了在本地运行超参数优化,我们为你提供了一个预制脚本。只需确保至少运行过一次训练任务,使其存在于 ClearML 实验管理器中,我们基本上会克隆它并更改其超参数。
你需要在 utils/loggers/clearml/hpo.py
中的脚本中填写此 template task
的 ID,然后运行它即可 🙂 你可以将 task.execute_locally()
更改为 task.execute()
,将其放入 ClearML 队列中,让远程代理来处理。
🤯 远程执行(高级)
在本地运行 HPO 非常方便,但如果我们想在远程机器上运行实验呢?也许你有一台非常强大的本地 GPU 机器,或者你有预算使用云 GPU。
这就是 ClearML Agent 发挥作用的地方。在此处查看 Agent 的功能
简而言之:实验管理器跟踪的每个实验都包含足够的信息,可以在不同的机器上重现它(已安装的包、未提交的更改等)。所以 ClearML Agent 就是做这件事的:它监听队列中的传入任务,找到任务后,就会重建环境并运行它,同时仍然向实验管理器报告标量、图表等。
你可以通过简单地运行以下命令,将任何机器(云虚拟机、本地 GPU 机器、你自己的笔记本电脑……)变成 ClearML Agent
克隆、编辑和加入队列
在 Agent 运行的情况下,我们可以给它一些任务。还记得 HPO 部分中我们可以克隆任务并编辑超参数吗?我们也可以从界面中完成!
🪄 右键点击实验以克隆它
🎯 编辑超参数为你希望的值
⏳ 右键点击任务并将其加入到任何队列中
远程执行任务
现在你可以像我们上面解释的那样克隆一个任务,或者只需在当前脚本中添加 `task.execute_remotely()` 来标记它,执行时它将被放入队列中,等待 Agent 开始处理!
要远程运行 YOLOv5 训练脚本,你只需在 clearml 记录器实例化后,将这一行添加到 training.py 脚本中即可
进行此更改后运行训练脚本时,python 会运行脚本直到该行,然后将代码打包并发送到队列中!
工作器自动伸缩
ClearML 也提供了自动伸缩器!只要队列中检测到实验,这个工具就会自动在你选择的云平台(AWS、GCP、Azure)中启动新的远程机器,并将它们变成 ClearML Agent。任务处理完成后,自动伸缩器会自动关闭远程机器,你就可以停止付费了!
请观看下面的自动伸缩器入门视频。