You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv8用单张Roboflow标注图训练后,预测无检测框与标签

问题排查与解决方法

1. 单样本训练的核心局限性

YOLOv8是依赖大数据训练的目标检测模型,仅用1张标注图片微调,模型无法学习到新目标的特征分布规律,训练后的模型几乎不可能在新图片上检测出目标。

  • 解决:至少收集20-50张包含新目标的标注图片,覆盖不同角度、光照、背景场景后再重新训练。

2. 训练配置存在漏洞

(1)训练轮次严重不足

仅设置epochs=5,模型还未完成对新类别的基础特征学习,即使是单样本场景,也需要更多轮次才能让模型尝试拟合特征。

  • 调整:将epochs提升至50-100,同时观察训练日志中的loss变化,直到loss趋于稳定。

(2)未基于预训练模型微调

如果训练时是从头初始化模型(而非加载YOLOv8预训练权重),单样本训练完全无法收敛。

  • 解决:训练前先加载预训练模型:
    from ultralytics import YOLO
    # 加载预训练的YOLOv8n模型(n代表轻量版,也可选s/m/l/x版本)
    model = YOLO('yolov8n.pt')
    # 再执行训练
    results = model.train(data="/roboflow_ml_image_detection/datasets/oups-1/data.yaml", epochs=50)
    

(3)数据集配置错误

检查data.yaml文件:

  • 确认新增类别已添加到names列表中,且索引与标注文件中的类别ID完全一致;
  • 确认train/val路径正确,单样本场景下至少保证train路径指向包含标注的图片,val路径可临时复用train数据;
  • 标注文件(.txt)需符合YOLO格式:每行格式为class_id x_center y_center width height,且坐标是归一化后的数值。

3. 预测环节验证与修正

先确认模型是否真的输出了检测结果,在预测代码中加入验证:

model = YOLO('/roboflow_ml_image_detection/runs/detect/train29/weights/last.pt')
results = model(source='./weirdobject.jpg', conf=0.25)[0]
# 打印检测结果,确认是否有输出
print("检测框数量:", len(results.boxes))
print("检测置信度:", results.boxes.conf)
  • 如果输出为0:说明模型未检测到目标,回到训练环节排查;
  • 如果有输出:检查Supervision代码的细节:
    1. 确认image变量已正确加载:
      import cv2
      # 必须先加载图片,cv2读取的BGR格式可直接用于Supervision
      image = cv2.imread('./weirdobject.jpg')
      
    2. 检查detections是否正确解析:
      detections = sv.Detections.from_ultralytics(results)
      print("解析后的检测结果:", detections)
      
      若detections为空,需确认data.yaml中的类别数量与模型训练时的配置一致。

4. 模型导出与加载的一致性

你训练的是.pt格式模型,当前代码加载的是last.pt,若后续打算用ONNX模型预测,需加载导出的ONNX文件:

model = YOLO('/path/to/exported/model.onnx')

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:44:53