YOLOv5训练管理与ClearML工具集成

ClearML提供了一个强大的实验管理器,可以帮助跟踪每一个YOLOv5的训练过程。通过集成ClearML Data Versioning Tool,可以轻松访问和管理自定义的训练数据。使用ClearML Agent,可以远程训练和监控YOLOv5模型,并通过ClearML Hyperparameter Optimization获得最佳的mAP性能。此外,还可以将训练好的YOLOv5模型转换为API,只需几条命令即可通过ClearML Serving实现。这些工具的使用完全取决于,可以选择只使用实验管理器,或者将它们全部串联起来,形成一个令人印象深刻的流水线。

设置ClearML

为了跟踪实验和/或数据,ClearML需要与服务器通信。有两种选择来获取一个服务器:要么免费注册ClearML托管服务,要么可以设置自己的服务器。即使是服务器也是开源的,所以即使处理的是敏感数据,也应该没有问题!

安装clearml Python包:

pip install clearml

通过创建凭证将ClearML SDK连接到服务器(转到设置 -> 工作区 -> 创建新凭证),然后执行以下命令并按照说明操作:

clearml-init

就是这样!完成了!😎

使用ClearML训练YOLOv5

要启用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

这将捕获以下内容:

  • 源代码+未提交的更改
  • 已安装的包
  • (超)参数
  • 模型文件(使用--save-period n保存每n个epoch的检查点)
  • 控制台输出
  • 标量(mAP_0.5, mAP_0.5:0.95, 精度,召回率,损失,学习率...)
  • 一般信息,如机器详情,运行时,创建日期等
  • 所有生成的图表,如标签相关图和混淆矩阵
  • 每个epoch的带有边界框的图像
  • 每个epoch的马赛克
  • 每个epoch的验证图像

这是不是很多?🤯现在,可以在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的结构。

基本上,需要以下键:

  • 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实际上是一个简写命令。也可以依次运行以下命令:

# 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将运行脚本直到该行,之后它将打包代码并将其发送到队列!

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485