From cc8a3fc85720e0b9695b4c1981f8d670a6b8bf0e Mon Sep 17 00:00:00 2001 From: pollfly <75068813+pollfly@users.noreply.github.com> Date: Thu, 20 Jul 2023 10:08:00 +0300 Subject: [PATCH] Add YOLOv8 integration (#614) --- docs/integrations/yolov8.md | 169 ++++++++++++++++++++++++++++++++++++ sidebars.js | 2 +- 2 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 docs/integrations/yolov8.md diff --git a/docs/integrations/yolov8.md b/docs/integrations/yolov8.md new file mode 100644 index 00000000..a7bf7bbb --- /dev/null +++ b/docs/integrations/yolov8.md @@ -0,0 +1,169 @@ +--- +title: YOLOv8 +--- + +
+ +
+ +
+ +Ultralytics' [YOLOv8](https://github.com/ultralytics/ultralytics) is a top modeling repository for object detection, +segmentation, and classification. Get the most out of YOLOv8 with ClearML: +* Track every YOLOv8 training run in ClearML +* Remotely train and monitor your YOLOv8 training runs using [ClearML Agent](../clearml_agent.md) +* Turn your newly trained YOLOv8 model into an API with just a few commands using [ClearML Serving](../clearml_serving/clearml_serving.md) + +## Setup + +1. Install the `clearml` python package: + + ```commandline + pip install clearml + ``` + +1. To keep track of your experiments and/or data, ClearML needs to communicate to a server. You have 2 server options: + * Sign up for free to the [ClearML Hosted Service](https://app.clear.ml/) + * Set up your own server, see [here](../deploying_clearml/clearml_server.md). +1. Connect the ClearML SDK to the server by creating credentials (go to the top right in to UI to **Settings > Workspace > Create new credentials**), + then execute the command below and follow the instructions: + + ```commandline + clearml-init + ``` + +That’s it! Now, whenever you train a model using YOLOv8, the run will be captured and tracked by ClearML – no additional +code necessary. + +## Training YOLOv8 with ClearML + +To enable ClearML experiment tracking, simply install the `clearml` pip package in your execution environment. + +```commandline +pip install clearml>=1.2.0 +``` + +This will enable integration with the YOLOv8 training script. In every training run from now on, the ClearML experiment +manager will capture: +* Source code and uncommitted changes +* Installed packages +* [Hyperparameters](../fundamentals/hyperparameters.md) +* Model files (use [`--save-period n`](https://docs.ultralytics.com/usage/cfg/#modes) to save a checkpoint every `n` epochs) +* Console output +* Scalars (e.g. mAP_0.5, mAP_0.5:0.95, precision, recall, losses) +* General information such as machine details, runtime, creation date etc. +* All produced plots such as label correlogram and confusion matrix +* Mosaic per epoch +* Validation images per epoch +* And more + +All of this is captured into a [ClearML Task](../fundamentals/task.md): a task with your training script's name +created in a `YOLOv8` ClearML project. To change the task’s name or project, pass the `name` and `project` arguments in one of +the following ways: +* Via the SDK: + + ```python + from ultralytics import YOLO + + # Initialize YOLO object, load/create YOLOv8 model + model = YOLO() + + # Run MODE mode using the custom arguments ARGS + model.MODE(name="", project="") + ``` + +* Via the `yolo` CLI: + + ```commandline + yolo TASK MODE project=new_project name=new_task_name + ``` + +:::tip project names +ClearML uses `/` as a delimiter for subprojects: using `example/sample` as a name will create the `sample` +task within the `example` project. +::: + +You can see all the captured data in the task’s page of the ClearML [WebApp](../webapp/webapp_exp_track_visual.md). +Additionally, you can view all of your YOLOv8 runs tracked by ClearML in the [Experiments Table](../webapp/webapp_model_table.md). +Add custom columns to the table, such as mAP values, so you can easily sort and see what is the best performing model. +You can also select multiple experiments and directly [compare](../webapp/webapp_exp_comparing.md) them. + +## Remote Execution +ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is +enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the +experiment manager. + +Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running +the following command on it: + +```commandline +clearml-agent daemon --queue [--docker] +``` + +Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md), to help you manage cloud workloads in the +cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and +shuts down instances as needed, according to a resource budget that you set. + + +### Cloning, Editing, and Enqueuing + +ClearML logs all the information required to reproduce an experiment, but you may also want to change a few parameters +and task details when you re-run an experiment, which you can do through ClearML’s UI. + +In order to be able to override parameters via the UI, +you have to run your code to [create a ClearML Task](../clearml_sdk/task_sdk.md#task-creation), which will log all the +execution parameters before using the YOLO model. When ClearML re-runs the task remotely, ClearML will override these +parameters before YOLO comes into play. + +For example: + +```python +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("model_variant", 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 +Notice that in the script above only the `data` and `epochs` args are passed to ClearML, so only their values can be +overridden via the UI. You can add all of YOLO's default parameters to the parameter dictionary, so you'll be able to override +any of them through the UI. +::: + +Use the UI to edit task details, then execute the task +with the new configuration on a remote machine: +* Clone the experiment +* Edit the hyperparameters and/or other details +* Enqueue the task + +The ClearML Agent executing the task will use the new values to [override any hard coded values](../clearml_agent.md). + +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) diff --git a/sidebars.js b/sidebars.js index 10ec717b..ae162a07 100644 --- a/sidebars.js +++ b/sidebars.js @@ -69,7 +69,7 @@ module.exports = { {'PyTorch Ignite':['guides/frameworks/pytorch_ignite/integration_pytorch_ignite', 'guides/frameworks/pytorch_ignite/pytorch_ignite_mnist']}, 'guides/frameworks/pytorch_lightning/pytorch_lightning_example', 'guides/frameworks/scikit-learn/sklearn_joblib_example', 'guides/frameworks/pytorch/pytorch_tensorboard', 'guides/frameworks/tensorboardx/tensorboardx', 'guides/frameworks/tensorflow/tensorflow_mnist', - 'integrations/seaborn', 'guides/frameworks/xgboost/xgboost_metrics', 'integrations/yolov5' + 'integrations/seaborn', 'guides/frameworks/xgboost/xgboost_metrics', 'integrations/yolov5', 'integrations/yolov8' ] }, 'integrations/storage',