Ultralytics 
Ultralytics YOLOv8 是一款尖端、最先进的 (SOTA) 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新功能和改进,以进一步提高性能和灵活性。YOLOv8 设计为快速、准确且易于使用,使其成为各种对象检测和跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。

你可以使用Ultralytics快速进行计算机视觉模型训练,同时使用SwanLab进行实验跟踪与可视化。
下面介绍两种引入SwanLab的方式:
- add_swanlab_callback:无需修改源码,适用于单卡训练场景
- return_swanlab_callback:需要修改源码,适用于单卡以及多卡DDP训练场景
1.1 引入add_swanlab_callback 
python
from swanlab.integration.ultralytics import add_swanlab_callbackadd_swanlab_callback的作用是为Ultralytics模型添加回调函数,以在模型训练的各个生命周期执行SwanLab记录。
1.2 代码案例 
下面是使用yolov8n模型在coco数据集上的训练,只需将model传入add_swanlab_callback函数,即可完成与SwanLab的集成。
python
from ultralytics import YOLO
from swanlab.integration.ultralytics import add_swanlab_callback
if __name__ == "__main__":
    model = YOLO("yolov8n.yaml")
    model.load()
    # 添加swanlab回调
    add_swanlab_callback(model)
    model.train(
        data="./coco128.yaml",
        epochs=3, 
        imgsz=320,
    )如果需要自定义SwanLab的项目、实验名等参数,则可以在add_swanlab_callback中添加:
python
add_swanlab_callback(
    model,
    project="ultralytics",
    experiment_name="yolov8n",
    description="yolov8n在coco128数据集上的训练。",
    mode="local",
    )2.1 多卡训练/DDP训练 
swanlab>=0.3.7
在Ultralytics多卡训练的场景下,由于启动训练的方式与单卡完全不同,所以需要用一种不同的方式接入SwanLab回调。
这是一个ultralytics开启DDP训练的样例代码:
python
from ultralytics import YOLO
if __name__ == "__main__":
    model = YOLO("yolov8n.pt")
    model.train(
        data="./coco128.yaml",
        epochs=3, 
        imgsz=320,
        # 开启DDP
        device=[0,1],
    )我们需要修改ultralytics的源码,去到ultralytics/utils/callbacks/base.py,找到add_integration_callbacks函数,添加下面的三行代码:
python
def add_integration_callbacks(instance):
    ...
    
    # Load training callbacks
    if "Trainer" in instance.__class__.__name__:
        from .clearml import callbacks as clear_cb
        from .comet import callbacks as comet_cb
        from .dvc import callbacks as dvc_cb
        from .mlflow import callbacks as mlflow_cb
        from .neptune import callbacks as neptune_cb
        from .raytune import callbacks as tune_cb
        from .tensorboard import callbacks as tb_cb
        from .wb import callbacks as wb_cb
        from swanlab.integration.ultralytics import return_swanlab_callback
        sw_cb = return_swanlab_callback()
        callbacks_list.extend([..., sw_cb])然后运行,就可以在ddp下正常跟踪实验了。
如果需要自定义SwanLab的项目、实验名等参数,则可以在return_swanlab_callback中添加:
python
return_swanlab_callback(
    model,
    project="ultralytics",
    experiment_name="yolov8n",
    description="yolov8n在coco128数据集上的训练。",
    mode="local",
    )ps
- 写入源码之后,之后运行就不需要在训练脚本中增加add_swanlab_callback了。
- 项目名由model.train()的project参数定义,实验名由name参数定义。
2.2 代码案例 
python
from ultralytics import YOLO
if __name__ == "__main__":
    model = YOLO("yolov8n.pt")
    model.train(
        data="./coco128.yaml",
        epochs=3, 
        imgsz=320,
        # 开启DDP
        device=[0,1,2,3],
        # 可以通过project参数设置SwanLab的project,name参数设置SwanLab的experiment_name
        project="Ultralytics",
        name="yolov8n"
    )