YOLOv5
ClearML 通过其内置的日志记录器帮助您充分利用 ultralytics 的 YOLOv5:
- 在ClearML中跟踪每次YOLOv5训练运行
- 使用ClearML 数据轻松访问和管理您的自定义训练数据版本
- 使用ClearML Agent远程训练和监控您的YOLOv5训练运行
- 使用ClearML获得最佳的mAP 超参数优化
- 使用ClearML Serving,只需几个命令即可将您新训练的YOLOv5模型转换为API
设置
-
安装clearml python包:
pip install clearml
-
为了跟踪您的实验和/或数据,ClearML 需要与服务器通信。您有2种服务器选项:
- 免费注册ClearML 托管服务
- 设置您自己的服务器,请参见这里。
-
通过创建凭证将ClearML SDK连接到服务器(在UI的右上角转到设置 > 工作区 > 创建新凭证),然后执行以下命令并按照说明操作:
clearml-init
就是这样!现在,每当你使用YOLOv5训练模型时,运行将被ClearML捕获和跟踪——无需额外的代码。
使用ClearML训练YOLOv5
要启用ClearML实验跟踪,只需在您的执行环境中安装clearml
pip包。
pip install clearml>=1.2.0
这将实现与YOLOv5训练脚本的集成。从现在开始的每次训练运行中,ClearML实验管理器将捕获:
- Source code and uncommitted changes
- Installed packages
- 超参数
- 模型文件(使用
--save-period n
每 n 个周期保存一个检查点) - Console Output
- 标量(例如 mAP_0.5, mAP_0.5:0.95, 精度, 召回率, 损失)
- 一般信息,如机器详细信息、运行时间、创建日期等。
- 所有生成的图表,如标签相关图和混淆矩阵
- 每个时期的带有边界框的图像
- 每个时期的马赛克
- 每个周期的验证图像
- 还有更多
所有这些都被捕获到一个ClearML任务中。默认情况下,会在YOLOv5
项目中创建一个名为Training
的任务。要更改任务的名称或项目,请在运行train.py
脚本时使用--project
和--name
参数。
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
ClearML 使用 /
作为子项目的分隔符:使用 example/sample
作为名称将在 example
项目中创建 sample
任务。
你可以在ClearML的WebApp任务页面查看所有捕获的数据。 此外,你可以在实验表中查看所有由ClearML跟踪的YOLOv5运行。 在表格中添加自定义列,例如mAP值,这样你可以轻松排序并查看表现最佳的模型。 你还可以选择多个实验并直接比较它们。
数据集版本管理
将数据版本控制与代码分开,可以更轻松地访问实验所需的数据集版本。ClearML Data 使得每台机器都能轻松访问数据,并将数据和实验链接起来,以提高可追溯性。
准备您的数据集
YOLOv5 仓库通过使用包含数据集信息的 yaml 文件支持多种不同的数据集。默认情况下,数据集会下载到相对于仓库根目录的 ../datasets
文件夹中。例如,如果你通过 yaml 文件中的链接或 YOLOv5 提供的脚本下载 coco128 数据集,你将得到以下文件夹结构:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
你可以使用任何数据集,只要你保持这个文件夹结构。 将数据集对应的yaml文件复制到数据集文件夹的根目录。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
yaml文件需要与您的数据集一起存储,以便ClearML能够以YOLO可以访问数据的方式进行数据集的设置。
上传您的数据集
要使用此数据创建ClearML数据集,请转到数据集根文件夹并运行sync
命令:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
此命令将文件夹的内容与ClearML同步,将文件夹的所有内容打包成一个ClearML数据集。
或者,您可以依次运行这些命令来创建一个数据集:
# Optionally add --parent <parent_dataset_id> 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
这两种方法都会在控制台打印一个数据集ID,稍后您可以使用它来访问您的数据集:
clearml-data - Dataset Management & Versioning CLI
Creating a new dataset:
ClearML results page: https://app.clear.ml/projects/<project-id>/experiments/<dataset-id>/output/log
ClearML dataset page: https://app.clear.mli/datasets/simple/<project-id>/experiments/<dataset-id>
New dataset created id=<dataset-id>
使用ClearML数据集运行训练
现在你有了一个ClearML数据集,你可以非常简单地使用它来训练自定义的YOLOv5模型:
python train.py --img 640 --batch 16 --epochs 3 --data clearml://<your_dataset_id> --weights yolov5s.pt --cache
远程执行
ClearML 记录了在不同机器上重现实验所需的所有信息(已安装的包、未提交的更改等)。ClearML Agent 监听指定的队列,当任务入队时,代理会拉取它,重新创建其执行环境并运行它,将其标量、图表等报告给实验管理器。
通过在任何机器上(例如云虚拟机、本地GPU机器、您自己的笔记本电脑)运行以下命令来部署ClearML代理:
clearml-agent daemon --queue <queues_to_listen_to> [--docker]
使用ClearML的自动扩展器来帮助您管理所选云(AWS、GCP、Azure)中的云工作负载,并自动部署ClearML代理:自动扩展器会根据您设置的资源预算,根据需要自动启动和关闭实例。
克隆、编辑和入队
使用ClearML的网页界面编辑任务详情,如配置参数或输入模型,然后在远程机器上使用新配置执行任务:
- Clone Experiment
- Edit hyperparameters and/or other details
- 将任务加入队列
执行任务的ClearML代理将使用新值来覆盖任何硬编码的值。
远程执行任务
你可以通过在你的脚本中添加Task.execute_remotely()
来设置一个任务以编程方式远程执行。这个方法会停止当前任务的本地执行,然后将其加入指定的队列以在远程机器上重新运行。
要远程运行YOLOv5训练脚本,您只需在ClearML记录器实例化后,将loggers.clearml.task.execute_remotely(queue="
添加到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
# …
超参数优化
使用ClearML的HyperParameterOptimizer
类来找到产生最佳性能模型的超参数值。
要在本地运行超参数优化,您可以使用YOLOv5提供的模板脚本。请注意,您需要填写一个基线任务ID,这意味着至少需要运行一次训练任务。此实验将被多次克隆,并且每个克隆的参数将被新值覆盖。