機器視覺-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

浙公網安備 33010602011771號