✅ 正确解决方案(2025年最新版 YOLOv8 超参调优方法)

✅ 方法一:【推荐】使用 Weights & Biases (W&B) Sweep(功能最完整)

虽然 --sweep 被移除,但你可以直接使用 W&B 的 Sweep 功能来实现自动超参搜索。

第一步:安装并登录 W&B(已完成)
pip install wandb
wandb login
第二步:创建 sweep.yaml 文件(定义搜索空间)
# sweep.yaml
method: bayes        # 支持: random, grid, bayes
metric:
  name: metrics/mAP50-95
  goal: maximize
parameters:
  lr0:
    min: 1e-5
    max: 1e-2
  hsv_h:
    min: 0.0
    max: 0.1
  hsv_s:
    min: 0.5
    max: 1.0
  fliplr:
    min: 0.0
    max: 0.8
  degrees:
    min: 0.0
    max: 30.0
  mosaic:
    min: 0.5
    max: 1.0
  mixup:
    min: 0.0
    max: 0.3
  imgsz:
    values: [640]
  batch:
    values: [32, 64]
第三步:使用 Python 脚本启动 Sweep(关键!)

创建一个 launch_sweep.py 文件:

# launch_sweep.py
import wandb
import yaml
from ultralytics import YOLO

def train():
    # 初始化 wandb,自动读取 sweep 配置
    with wandb.init() as run:
        cfg = run.config  # 获取 wandb sweep 的配置参数

        # 加载基础模型
        model = YOLO("weights/yolov8n.pt")

        # 开始训练,使用 wandb 配置的超参数
        results = model.train(
            data="ultralytics/cfg/datasets/helmet.yaml",
            epochs=15,
            device=0,
            project="helmet_sweep",
            name=f"sweep_{run.id}",
            exist_ok=True,
            # 使用 wandb sweep 提供的超参数
            lr0=cfg.lr0,
            hsv_h=cfg.hsv_h,
            hsv_s=cfg.hsv_s,
            fliplr=cfg.fliplr,
            degrees=cfg.degrees,
            mosaic=cfg.mosaic,
            mixup=cfg.mixup,
            imgsz=cfg.imgsz,
            batch=cfg.batch,
            # 启用 wandb 日志
            plots=True,
            save=False  # 只保留最佳模型
        )

if __name__ == "__main__":
    # 读取 sweep.yaml 文件
    with open("sweep.yaml", "r", encoding="utf-8") as f:
        sweep_config = yaml.safe_load(f)

    # 创建 sweep
    sweep_id = wandb.sweep(sweep_config, project="helmet_sweep")

    # 启动 agent,运行 20 次实验
    wandb.agent(sweep_id, function=train, count=20)
第四步:运行脚本
python launch_sweep.py

✅ 它会自动运行 20 次训练,每次使用不同的超参数,并在 wandb.ai 上可视化结果。


✅ 方法二:手动调参(简单直接,适合初学者)

如果不想用 W&B,可以直接运行多个训练命令,手动比较 mAP:

# 尝试组合1
yolo train data=helmet.yaml model=yolov8n.pt epochs=50 lr0=0.01 hsv_s=0.7 fliplr=0.5 degrees=10

# 尝试组合2
yolo train data=helmet.yaml model=yolov8n.pt epochs=50 lr0=0.001 hsv_s=0.9 fliplr=0.7 degrees=20

# 尝试组合3
yolo train data=helmet.yaml model=yolov8n.pt epochs=50 lr0=0.02 hsv_s=0.5 fliplr=0.3 degrees=5

记录每次的 mAP50-95,选择最优组合。


✅ 方法三:参考社区推荐的“最佳实践”配置

对于“未戴头盔”这类小目标检测任务,推荐以下配置:

yolo train \
  model=weights/yolov8n.pt \
  data=ultralytics/cfg/datasets/helmet.yaml \
  epochs=100 \
  batch=64 \
  imgsz=640 \
  device=0 \
  lr0=0.01 \
  hsv_h=0.015 \
  hsv_s=0.7 \
  hsv_v=0.4 \
  degrees=15.0 \
  translate=0.2 \
  scale=0.5 \
  fliplr=0.5 \
  mosaic=1.0 \
  mixup=0.1 \
  close_mosaic=10 \
  project=runs/detect \
  name=helmet_final

✅ 总结

问题 解决方案
如何做超参搜索? ✅ 使用 W&B Sweep + Python 脚本(唯一可靠方式)
想简单点怎么办? ✅ 手动尝试 3~5 组超参,选 mAP 最高的
推荐哪些关键参数? lr0, hsv_s, degrees, mosaic, mixup

📌 建议
使用 launch_sweep.py 脚本 + W&B,这是目前 YOLOv8 最先进、最强大的超参优化方式,功能远超旧版 evolve

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐