跳到主内容

YOLOv8


Ultralytics 的 YOLOv8 是一个用于目标检测、分割和分类的顶级模型库。利用 ClearML 充分发挥 YOLOv8 的优势

  • 在 ClearML 中跟踪每一次 YOLOv8 训练运行
  • 使用 ClearML 代理 远程训练和监控您的 YOLOv8 训练运行
  • 只需几条命令,使用 ClearML 服务 将您新训练的 YOLOv8 模型变成 API

设置

  1. 安装 clearml Python 包

    pip install clearml
  2. 为了跟踪您的任务和/或数据,ClearML 需要与服务器通信。您有两种服务器选项

  3. 通过创建凭据(前往 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 项目中创建的、以您的训练脚本名称命名的任务。要更改任务名称或项目,请通过以下方式之一传递 nameproject 参数

  • 通过 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 CLI

    yolo 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)
提示

请注意,在上面的脚本中只有 dataepochs 参数被传递给 ClearML,因此只有它们的值可以通过 UI 覆盖。您可以将 YOLO 的所有默认参数添加到参数字典中,这样您就可以通过 UI 覆盖其中的任何参数。

使用 UI 编辑任务详情,然后使用新配置在远程机器上执行任务

  • 克隆任务
  • 编辑超参数和/或其他详情
  • 将任务入队

执行任务的 ClearML 代理 将使用新值覆盖任何硬编码的值

Cloning, editing, enqueuing gif Cloning, editing, enqueuing gif