ClearML提供了一个强大的实验管理器,可以帮助跟踪每一个YOLOv5的训练过程。通过集成ClearML Data Versioning Tool,可以轻松访问和管理自定义的训练数据。使用ClearML Agent,可以远程训练和监控YOLOv5模型,并通过ClearML Hyperparameter Optimization获得最佳的mAP性能。此外,还可以将训练好的YOLOv5模型转换为API,只需几条命令即可通过ClearML Serving实现。这些工具的使用完全取决于,可以选择只使用实验管理器,或者将它们全部串联起来,形成一个令人印象深刻的流水线。
为了跟踪实验和/或数据,ClearML需要与服务器通信。有两种选择来获取一个服务器:要么免费注册ClearML托管服务,要么可以设置自己的服务器。即使是服务器也是开源的,所以即使处理的是敏感数据,也应该没有问题!
安装clearml Python包:
pip install clearml
通过创建凭证将ClearML SDK连接到服务器(转到设置 -> 工作区 -> 创建新凭证),然后执行以下命令并按照说明操作:
clearml-init
就是这样!完成了!😎
要启用ClearML实验跟踪,只需安装ClearML pip包。这将启用与YOLOv5训练脚本的集成。从现在起,每一次训练运行都将被ClearML实验管理器捕获并存储。
如果想更改project_name或task_name,使用train.py脚本的--project和--name参数。默认情况下,项目将被称为YOLOv5,任务将被称为Training。请注意:ClearML使用/作为子项目的分隔符,因此在使用/作为项目名称时要格外小心!
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
或者使用自定义项目和任务名称:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
这将捕获以下内容:
这是不是很多?🤯现在,可以在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的结构。
基本上,需要以下键:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
上传数据集:
要将这个数据集作为版本化数据集导入ClearML,请转到数据集根文件夹并运行以下命令:
cd coco128
clearml-data sync --projectYOLOv5--name coco128 --folder .
命令clearml-data sync实际上是一个简写命令。也可以依次运行以下命令:
# Optionally add --parent if you want to base this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
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队列中,让远程代理来处理它。
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py
在本地运行HPO非常方便,但如果想在远程机器上运行实验呢?也许可以访问现场的非常强大的GPU机器,或者有一些预算可以使用云GPU。这就是ClearML Agent发挥作用的地方。查看代理可以做什么:
YouTube视频
文档
简而言之:每个由实验管理器跟踪的实验都包含足够的信息,可以在不同的机器上重现它(安装的包,未提交的更改等)。因此,ClearML代理就是这样做的:它监听队列中的传入任务,当它找到一个时,它会重新创建环境并运行它,同时仍然将标量、图表等报告给实验管理器。
可以通过简单地运行以下命令,将任何机器(云VM、本地GPU机器、自己的笔记本电脑...)变成ClearML代理:
clearml-agent daemon --queue [--docker]
克隆、编辑和排队:
有了代理运行,可以给它一些工作。记住从HPO部分,可以克隆一个任务并编辑超参数?也可以从界面上这样做!
远程执行任务:
现在可以像上面解释的那样克隆一个任务,或者简单地通过添加task.execute_remotely()标记当前脚本,执行时它将被放入队列,代理将开始处理!
要远程运行YOLOv5训练脚本,只需要在训练.py脚本中,在clearml logger被实例化后添加以下行:
# ...
# 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将运行脚本直到该行,之后它将打包代码并将其发送到队列!