机器视觉-yolov8集成wandb进行训练监控

Wandb 概述

WandB 即 Weigtht and Bias的缩写, 是深度学习中经常使用的metrics记录工具, 功能比TensorBoard强大, 主要功能有:

  • 它可以记录每次训练的版本信息, 包括超参、tag、project 等
  • 自动上传云端,方便将多台机器的实验做对比分析
  • 强大的表格功能,可以轻松管理海量模型
  • 支持离线数据上传功能,实验完成后可以离线上传数据
  • 支持局域网部署服务器

官网注册账号

官网: https://wandb.ai/site
我使用 google 账号注册了一个wandb的账号.
注册后, 可以从 https://wandb.ai/quickstart 页面看到自己的 Api key.

安装并登录

#  安装
pip install wandb

# 登录命令, 登录完成后会将 api_key 记录到 C:\Users\YOUR_USER\.netrc 文件中. 
wandb.exe login   

yolov8设置wandb离线模式

如果访问网络wandb官网的网络不好, 会拉慢整个训练速度, 所以可以设置成离线模式, 待训练完成后在手工上报metrics数据.

from wandb.integration.ultralytics import add_wandb_callback
import wandb

os.environ["WANDB_API_KEY"]="WANDB_API_KEY"
os.environ["WANDB_MODE"]="offline" # online or offline

在完成 yolov8 一个experiment之后, console 会智能提示一个上传离线wandb日志的命令, 比如:

wandb sync D:\my_workspace\source\yolo8\wandb\offline-run-20240216_193023-bpqnk0yg

YoloV8集成 wangdb 的代码示例

个人认为predict无需进行监控, 监控training阶段会更有意义

import os
from IPython import display
import ultralytics
from ultralytics import YOLO, settings
from os import path
from wandb.integration.ultralytics import add_wandb_callback
import wandb

os.environ["WANDB_API_KEY"]="your_api_key"
os.environ["WANDB_MODE"]="online" # offline or online

def train():
    # 修复 C:\Users\MY_USER\AppData\Roaming\Ultralytics\settings.yaml 文件中的图像目录
    image_path = r'''C:\Users\dorothy\AppData\Roaming\Python\Python311\Scripts\datasets'''
    settings.update({"datasets_dir": image_path})

    project_name ="yolov8_test"
    run_name ="yolov8n_name114"
    epochs_num=1
    batch_num=8

    # init wandb
    hyperparameters = dict(
        epochs=epochs_num,
        batch_size=batch_num
    )
    config_dictionary = dict(
        yaml=r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\cfg\default.yaml",
        params=hyperparameters,
    )
    config_dictionary["project"]=project_name
    config_dictionary["name"] = run_name
    config_dictionary["notes"] ="my first test"
    config_dictionary["tags"] =["baseline", "paper"]
    config_dictionary["job_type"] = "training" # training or inference
    run=wandb.init(config=config_dictionary)

    # 可提前将预训练的yolov8n.pt文件下载到本脚本同一目录下,地址 https://github.com/ultralytics/assets/releases
    model = YOLO("yolov8n.pt")

    #Add W&B Callback for Ultralytics, 设置callback后, 在后续的train/val过程将会自动将指标数据传到Wandb中
    add_wandb_callback(model, enable_model_checkpointing=True)

    # 设置训练data yaml文件
    dataset_yaml = r"C:\Users\dorothy\AppData\Roaming\Python\Python311\site-packages\ultralytics\cfg\datasets\coco8.yaml"

    # 在本脚本同一目录下, 会自动生成 runs 结果目录
    results = model.train(project=project_name, name=run_name, data=dataset_yaml, epochs=epochs_num, imgsz=640, device="cpu", batch=batch_num, seed=1)

    #Finalize the W&B Run, 告知wandb dashboard将会会标识train/val过程已经完成
    wandb.finish()


def predict():
    model = YOLO(r"D:\my_workspace\source\yolo8\runs\detect\train9\weights\last.pt")
    add_wandb_callback(model, enable_model_checkpointing=True)
    image_file1 = r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\assets\bus.jpg"
    image_file2 = r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\assets\zidane.jpg"
    results_list = model.predict(source=[image_file1, image_file2], show=False, save=True, save_conf=True,
                                 save_txt=True)
    for results in results_list:
        boxes = results.boxes
        speed = results.speed
        names = results.names
        json = results.tojson()
        image_path = results.path
        print("====")
        print(image_path)
        print(names)
        print(json)


if __name__ == '__main__':
    display.clear_output()
    ultralytics.checks()
    train()

参考

https://docs.ultralytics.com/integrations/weights-biases/#key-features-of-the-weights-biases-dashboard
wandb使用教程(四):wandb本地部署 https://zhuanlan.zhihu.com/p/521663928?utm_id=0
https://zhuanlan.zhihu.com/p/342300434?utm_id=0
https://blog.csdn.net/qq_42312574/article/details/132662921
https://blog.csdn.net/crasher123/article/details/132644320

posted @ 2024-02-06 23:07  harrychinese  阅读(575)  评论(0编辑  收藏  举报