YOLOv8
Ultralytics 的 YOLOv8 是一个用于目标检测、分割和分类的顶级模型库。利用 ClearML 充分发挥 YOLOv8 的优势
- 在 ClearML 中跟踪每一次 YOLOv8 训练运行
- 使用 ClearML 代理 远程训练和监控您的 YOLOv8 训练运行
- 只需几条命令,使用 ClearML 服务 将您新训练的 YOLOv8 模型变成 API
设置
-
安装
clearml
Python 包pip install clearml
-
为了跟踪您的任务和/或数据,ClearML 需要与服务器通信。您有两种服务器选项
- 免费注册 ClearML 托管服务
- 设置您自己的服务器,请参见此处。
-
通过创建凭据(前往 UI 右上角 设置 > 工作区 > 创建新凭据),将 ClearML SDK 连接到服务器,然后执行以下命令并按照说明操作
clearml-init
就是这样!现在,每当您使用 YOLOv8 训练模型时,ClearML 将捕获并跟踪运行,无需额外代码。
使用 ClearML 训练 YOLOv8
要启用 ClearML 任务跟踪,只需在您的执行环境中安装 clearml
pip 包。
pip install clearml>=1.2.0
这将启用与 YOLOv8 训练脚本的集成。从现在起,在每一次训练运行中,ClearML 任务管理器将捕获
- 源代码和未提交的更改
- 已安装的包
- 超参数
- 模型文件(使用
--save-period n
每隔n
个训练轮次保存一个检查点) - 控制台输出
- 标量(例如 mAP_0.5、mAP_0.5:0.95、precision、recall、losses)
- 通用信息,例如机器详情、运行时长、创建日期等
- 所有生成的图表,例如标签相关图和混淆矩阵
- 每个训练轮次的 Mosaic
- 每个训练轮次的验证图像
- 以及更多
所有这些都被捕获到一个 ClearML 任务 中:一个在 YOLOv8
ClearML 项目中创建的、以您的训练脚本名称命名的任务。要更改任务名称或项目,请通过以下方式之一传递 name
和 project
参数
-
通过 SDK
from ultralytics import YOLO
# Initialize YOLO object, load/create YOLOv8 model
model = YOLO()
# Run MODE mode using the custom arguments ARGS
model.MODE(name="<new_task_name>", project="<new_project_name>") -
通过
yolo
CLIyolo TASK MODE project=new_project name=new_task_name
ClearML 使用 /
作为子项目分隔符:使用 example/sample
作为名称将在 example
项目内创建 sample
任务。
您可以在 ClearML Web 应用 的任务页面中查看所有捕获的数据。此外,您可以在任务表中查看 ClearML 跟踪的所有 YOLOv8 运行。向表中添加自定义列,例如 mAP 值,以便您可以轻松排序并查看性能最佳的模型。您还可以选择多个任务并直接比较它们。
远程执行
ClearML 记录重现任务运行在不同机器上所需的所有信息(已安装的包、未提交的更改等)。ClearML 代理 监听指定的队列,当一个任务入队时,代理拉取它,重新创建其执行环境,并运行它,将其标量、图表等报告给任务管理器。
只需在其上运行以下命令即可将 ClearML 代理部署到任何机器上(例如,云虚拟机、本地 GPU 机器、您自己的笔记本电脑)
clearml-agent daemon --queue <queues_to_listen_to> [--docker]
使用 ClearML 自动伸缩器 帮助您管理您选择的云平台(AWS、GCP、Azure)上的云工作负载,并自动部署 ClearML 代理:自动伸缩器根据您设置的资源预算,根据需要自动启动和关闭实例。
重现任务运行
ClearML 记录重现任务运行所需的所有信息,但您可能还想在重新运行时更改一些参数和任务详情,您可以通过 ClearML 的 UI 来完成此操作。
为了能够通过 UI 覆盖参数,您需要运行代码以创建 ClearML 任务,这将在使用 YOLO 模型之前记录所有执行参数。当 ClearML 远程重新运行任务时,ClearML 将在 YOLO 开始运行之前覆盖这些参数。
例如
from clearml import Task
from ultralytics import YOLO
# Create a ClearML Task
task = Task.init(
project_name="my project",
task_name="my yolo task"
)
# Load a model
model_variant = "yolov8n"
# Log "model_variant" parameter to task
task.set_parameter(name="model_variant", value=model_variant)
# Load the YOLOv8 model
model = YOLO(f'{model_variant}.pt')
# Put all YOLOv8 arguments in a dictionary and pass it to ClearML
# When the arguments are later changed in UI, they will be overridden here!
args = dict(data="coco128.yaml", epochs=16)
task.connect(args)
# Train the model
# If running remotely, the arguments may be overridden by ClearML if they were changed in the UI
results = model.train(**args)
请注意,在上面的脚本中只有 data
和 epochs
参数被传递给 ClearML,因此只有它们的值可以通过 UI 覆盖。您可以将 YOLO 的所有默认参数添加到参数字典中,这样您就可以通过 UI 覆盖其中的任何参数。
使用 UI 编辑任务详情,然后使用新配置在远程机器上执行任务
- 克隆任务
- 编辑超参数和/或其他详情
- 将任务入队
执行任务的 ClearML 代理 将使用新值覆盖任何硬编码的值。