Skip to main content

YOLOv8


Ultralytics的YOLOv8是一个用于目标检测、分割和分类的顶级建模仓库。通过ClearML充分利用YOLOv8:

  • 在ClearML中跟踪每次YOLOv8训练运行
  • 使用ClearML Agent远程训练和监控您的YOLOv8训练运行
  • 使用ClearML Serving,只需几条命令即可将您新训练的YOLOv8模型转换为API

设置

  1. 安装 clearml python 包:

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

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

    clearml-init

就是这样!现在,每当你使用 YOLOv8 训练模型时,运行将被 ClearML 捕获和跟踪——无需额外的代码。

使用ClearML训练YOLOv8

要启用ClearML实验跟踪,只需在您的执行环境中安装clearml pip包。

pip install clearml>=1.2.0

这将实现与YOLOv8训练脚本的集成。从现在开始的每次训练运行中,ClearML实验管理器将捕获:

  • Source code and uncommitted changes
  • Installed packages
  • 超参数
  • 模型文件(使用--save-period nn个周期保存一个检查点)
  • Console Output
  • 标量(例如 mAP_0.5, mAP_0.5:0.95, 精度, 召回率, 损失)
  • 一般信息,如机器详细信息、运行时间、创建日期等。
  • 所有生成的图表,如标签相关图和混淆矩阵
  • 每个时期的马赛克
  • 每个周期的验证图像
  • 还有更多

所有这些都被捕获到一个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
project names

ClearML 使用 / 作为子项目的分隔符:使用 example/sample 作为名称将在 example 项目中创建 sample 任务。

你可以在ClearML的WebApp任务页面查看所有捕获的数据。 此外,你可以在实验表中查看所有由ClearML跟踪的YOLOv8运行。 在表格中添加自定义列,例如mAP值,这样你可以轻松排序并查看表现最佳的模型。 你还可以选择多个实验并直接比较它们。

远程执行

ClearML 记录了在不同机器上重现实验所需的所有信息(已安装的包、未提交的更改等)。ClearML Agent 监听指定的队列,当任务入队时,代理会拉取它,重新创建其执行环境并运行它,将其标量、图表等报告给实验管理器。

通过在任何机器上(例如云虚拟机、本地GPU机器、您自己的笔记本电脑)运行以下命令来部署ClearML代理:

clearml-agent daemon --queue <queues_to_listen_to> [--docker]

使用ClearML的自动扩展器来帮助您管理所选云(AWS、GCP、Azure)中的云工作负载,并自动部署ClearML代理:自动扩展器会根据您设置的资源预算,根据需要自动启动和关闭实例。

克隆、编辑和入队

ClearML 记录了重现实验所需的所有信息,但您可能还希望在重新运行实验时更改一些参数和任务详细信息,这可以通过 ClearML 的用户界面来完成。

为了能够通过用户界面覆盖参数,您需要运行代码以创建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)
tip

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

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

  • Clone Experiment
  • Edit hyperparameters and/or other details
  • 将任务加入队列

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

克隆、编辑、排队 gif