Yolo分类任务中,检查模型在训练数据中哪些检测错误,计算精确率(Precision)、召回率(recall)模型评估参数

训练结束后分析训练数据集

  • 在训练完一个分类模型后,为了分析训练模型在验证/训练数据集上不同类别效果,往往要计算其不同类别的精确率和召回率,以及检测错误的图片有哪些,错误图片被误检为了什么。
  • 首先文件夹格式为
    • val
      • 类别1
      • 类别2
      • 类别3···
  • 直接贴出代码,实现了对不同类别检测结果并保存错误结果,结果如下显示
    在这里插入图片描述
from ultralytics import YOLO
import matplotlib
import os
from sklearn.metrics import accuracy_score, precision_score,f1_score,recall_score
from sklearn.metrics import classification_report
import cv2
model = YOLO('runs/classify/train20/weights/best.pt')
# 模型标签
names = {0: 'CCC', 1: 'DDD', 2: 'Other', 3: 'QQQ'}
base_path = '/home/train'
# 将names的key与value值互换,存入dict_names中
dict_names = {v: k for k, v in names.items()}
real_labels = []
pre_labels = []
for i in os.listdir(base_path):
    label = dict_names[i]
    for j in os.listdir(os.path.join(base_path, i)):
        img_path = os.path.join(base_path, i, j)
        filename = img_path.split('/')[-1]
        # import ipdb; ipdb.set_trace()
        res = model.predict(img_path)[0]
        if res.probs.top1 != label:
            image = cv2.imread(img_path)
            name = i  # label
            resname = names[res.probs.top1]
            print("预测错误:", filename,"label:",name,"res:",resname)
            output_path = os.path.join("train", name, resname, filename)
            os.makedirs(os.path.dirname(output_path), exist_ok=True)
            cv2.imwrite(output_path,image)
        real_labels.append(label)
        pre_labels.append(res.probs.top1)
print("每个类别的精确率、召回率和F1-Score:")
print(classification_report(real_labels, pre_labels, target_names=list(names.values())))

参考:
1
2

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值