xju小师弟 2025-07-25 19:01 采纳率: 0%
浏览 19

yolo训练完之后图片标签和置信度模糊

img

我在训练完之后,val的训练结果标签和置信度没有显示,只有颜色的填充,这种情况要怎么解决呀?

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-07-25 19:02
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    在使用YOLO进行训练后,如果在验证(val)阶段看到的图片只有颜色填充而没有显示标签和置信度信息,这通常意味着模型的输出没有被正确解析或可视化。以下是一些可能的原因及详细的解决方案


    ✅ 问题原因分析

    1. 模型未正确加载:训练后的模型文件(如best.ptlast.pt)可能未被正确加载到推理代码中。
    2. 可视化代码缺失或错误:用于显示预测结果的代码可能没有正确实现,导致只显示了掩码或颜色区域。
    3. 模型输出格式不匹配:YOLOv5等框架在训练后生成的是检测框、类别和置信度信息,但若代码中未正确解析这些数据,就会出现模糊或无标签的情况。
    4. 配置文件设置错误:例如data.yaml中的类别名称未正确映射,或者标签路径错误。

    🛠️ 解决方案

    1. 确认模型文件是否正确加载

    • 确保你使用的模型是训练完成后的 .pt 文件(如 best.pt)。

    • 在推理代码中检查模型加载语句是否正确,例如:

      model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
      
    • 如果使用自定义训练,确保路径和文件名正确。


    2. 检查并添加标签和置信度的可视化代码

    YOLO默认会绘制边界框和类别标签,但如果使用的是自定义脚本,可能需要手动实现这一部分。

    示例:使用YOLOv5官方代码进行推理并显示标签和置信度

    from yolov5 import detect
    
    # 运行推理并保存结果
    detect.run(source='test_images', weights='best.pt', save_txt=True, save_conf=True)
    

    注意: save_conf=True 会保存置信度值,save_txt=True 会保存标签信息。


    3. 修改推理代码以显示标签和置信度

    如果你使用的是自定义的推理脚本,可以参考以下代码片段来绘制标签和置信度:

    import cv2
    import torch
    
    # 加载模型
    model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
    
    # 读取图像
    img = cv2.imread('test.jpg')
    
    # 推理
    results = model(img)
    
    # 显示结果
    for result in results:
        for box in result.boxes:
            x1, y1, x2, y2 = map(int, box.xyxy[0])
            conf = box.conf.item()
            cls = int(box.cls.item())
            label = f'{result.names[cls]} {conf:.2f}'
            cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
    
    cv2.imshow('Detection', img)
    cv2.waitKey(0)
    

    重点说明:

    • result.names[cls] 是从 data.yaml 中获取的类别名称。
    • box.conf 是置信度值。
    • cv2.putText() 用于在图像上显示标签和置信度。

    4. 检查 data.yaml 配置文件

    确保你的 data.yaml 文件正确配置了类别名称和路径,例如:

    names:
      0: 'person'
      1: 'car'
      2: 'dog'
    
    train: ../images/train/
    val: ../images/val/
    nc: 3
    

    注意: 类别数量 (nc) 必须与训练时一致,否则会导致标签无法正确显示。


    5. 重新训练并测试

    如果以上方法均无效,建议:

    • 使用 YOLOv5 的官方示例数据集(如 COCO)进行测试,确认环境是否正常。
    • 检查训练日志,查看是否有报错或警告信息。
    • 重新训练模型,并使用官方提供的推理脚本进行验证。

    🧪 验证步骤

    1. 使用官方推理命令运行:

      python detect.py --weights best.pt --source test_images
      
    2. 查看输出目录中是否包含带有标签和置信度的图片。

    3. 如果仍然没有标签,请检查 detect.py 是否启用了 --save-txt--save-conf 参数。


    ✅ 总结

    | 问题 | 解决方案 | |------|----------| | 模型未正确加载 | 确认 best.pt 路径和加载方式 | | 可视化代码缺失 | 添加 cv2.rectanglecv2.putText 绘制标签和置信度 | | data.yaml 配置错误 | 确保类别名称和路径正确 | | 输出格式不对 | 使用 --save-txt--save-conf 保存标签信息 |


    如有需要,我可以提供完整的推理脚本模板或帮助你调试你的代码。欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月25日