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

如何获取自定义训练的yolov4-tiny模型的混淆矩阵

基于YOLOv4-tiny训练权重生成混淆矩阵的实现方案

首先提前准备好所需文件:训练得到的.weights权重文件、YOLOv4-tiny对应的.cfg配置文件、自定义数据集的.names类别名文件、测试集的图片和对应标注文件。

步骤1:批量推理测试集获取预测结果

运行模型对全部测试集图片做推理,输出每张图的所有预测框信息,包括预测类别ID、置信度、bounding box坐标:

  • 预处理参数要和训练时完全一致,比如输入尺寸、归一化系数、是否保持长宽比做padding,避免推理结果出现不必要的偏差
  • 初始推理时可以把置信度阈值设为较低值(如0.001),后续统计时再按你需要的阈值过滤,避免漏统计低置信度的有效预测
  • 推理后要执行NMS过滤重复的预测框,NMS阈值也建议和训练验证时的设置保持一致

步骤2:真值与预测框的IoU匹配

读取测试集所有标注的真值框信息(类别ID、bounding box坐标),和同一张图的预测框做匹配,判定每个预测的类型:

  • 先按类别对同一张图的真值框和预测框分组,只对同类别框做IoU计算
  • 通常设置IoU匹配阈值为0.5,也可根据需求调整为更高值(如0.75)做严格匹配
  • 单个真值框仅和IoU最高的同类别预测框匹配,该预测判定为真阳性(TP),匹配到预测的真值框标记为已匹配,不会重复参与匹配
  • 未匹配到任何真值框的预测判定为假阳性(FP),未匹配到任何预测框的真值框判定为假阴性(FN)

步骤3:统计生成混淆矩阵

汇总所有测试集样本的匹配结果,即可生成n行n列的混淆矩阵(n为数据集的类别总数):

  • 矩阵行对应真值类别,列对应预测类别
  • 矩阵对角线元素为对应类别的TP数量:比如第i行第i列的值,就是真值为类别i且预测也为i的样本总数
  • 第i行第j列(i≠j)的元素为真值是类别i、被错误预测为类别j的样本总数
  • 你可以额外添加一行统计所有类别的FP总数,额外添加一列统计所有类别的FN总数,方便后续计算精确率、召回率指标
  • 如果需要生成百分比形式的混淆矩阵,将每行所有元素除以该行的总真值框数即可,此时每行元素之和为1,能更直观看到各类别的预测分布

代码简化实现

如果你用的是PyTorch版的YOLOv4-tiny实现,可以直接借助scikit-learn的工具快速生成矩阵,只需提前把所有匹配成功的真值类别、预测类别整理为两个一维列表即可:

from sklearn.metrics import confusion_matrix
import numpy as np

# 示例:y_true存所有匹配成功的真值类别ID,y_pred存对应匹配的预测类别ID
y_true = np.array([0, 0, 1, 1, 2, 2])
y_pred = np.array([0, 1, 1, 2, 2, 2])
# 生成混淆矩阵
cm = confusion_matrix(y_true, y_pred)
print(cm)

如果你用的是原版Darknet框架训练的模型,直接修改detector test的源码,在推理逻辑后添加上述的匹配、统计逻辑即可,无需额外搭建环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:04