
我在训练完之后,val的训练结果标签和置信度没有显示,只有颜色的填充,这种情况要怎么解决呀?
晚上好🌙🌙🌙
本答案参考通义千问
在使用YOLO进行训练后,如果在验证(val)阶段看到的图片只有颜色填充而没有显示标签和置信度信息,这通常意味着模型的输出没有被正确解析或可视化。以下是一些可能的原因及详细的解决方案:
best.pt或last.pt)可能未被正确加载到推理代码中。data.yaml中的类别名称未正确映射,或者标签路径错误。确保你使用的模型是训练完成后的 .pt 文件(如 best.pt)。
在推理代码中检查模型加载语句是否正确,例如:
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
如果使用自定义训练,确保路径和文件名正确。
YOLO默认会绘制边界框和类别标签,但如果使用的是自定义脚本,可能需要手动实现这一部分。
from yolov5 import detect
# 运行推理并保存结果
detect.run(source='test_images', weights='best.pt', save_txt=True, save_conf=True)
注意:
save_conf=True会保存置信度值,save_txt=True会保存标签信息。
如果你使用的是自定义的推理脚本,可以参考以下代码片段来绘制标签和置信度:
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()用于在图像上显示标签和置信度。
data.yaml 配置文件确保你的 data.yaml 文件正确配置了类别名称和路径,例如:
names:
0: 'person'
1: 'car'
2: 'dog'
train: ../images/train/
val: ../images/val/
nc: 3
注意: 类别数量 (
nc) 必须与训练时一致,否则会导致标签无法正确显示。
如果以上方法均无效,建议:
使用官方推理命令运行:
python detect.py --weights best.pt --source test_images
查看输出目录中是否包含带有标签和置信度的图片。
如果仍然没有标签,请检查 detect.py 是否启用了 --save-txt 和 --save-conf 参数。
| 问题 | 解决方案 |
|------|----------|
| 模型未正确加载 | 确认 best.pt 路径和加载方式 |
| 可视化代码缺失 | 添加 cv2.rectangle 和 cv2.putText 绘制标签和置信度 |
| data.yaml 配置错误 | 确保类别名称和路径正确 |
| 输出格式不对 | 使用 --save-txt 和 --save-conf 保存标签信息 |
如有需要,我可以提供完整的推理脚本模板或帮助你调试你的代码。欢迎继续提问!