Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Confusion Matrix

混淆矩阵按类别统计模型预测结果与真实标签。了解如何读懂混淆矩阵、它能得出哪些指标,以及检测任务中的混淆矩阵形式。

混淆矩阵是一种表格,用于统计分类模型的预测与真实标签的对应情况。一条轴列出实际类别,另一条轴列出预测类别,每个单元格统计落入对应类别组合的样本数。正确预测位于对角线上,所有错误预测都位于对角线之外,落在明确指出哪一类被误判成哪一类的单元格中。因此,混淆矩阵是查看模型错误的标准首选视图,也是计算准确率、精确率、召回率和F1 分数的数据来源。

解读二分类混淆矩阵#

有两个类别时,矩阵包含四个单元格:

  • 真正例 (TP):被预测为正例的正例样本,例如被标记为有缺陷的缺陷零件。
  • 假正例 (FP):被预测为正例的负例样本,也称为 I 类错误或误报。
  • 假负例 (FN):被预测为负例的正例样本,也称为 II 类错误或漏检。
  • 真负例 (TN):被预测为负例的负例样本。

大多数二分类指标都是这四项计数的比值。精确率为 TP / (TP + FP),召回率为 TP / (TP + FN),准确率为 (TP + TN) 除以四项计数之和。哪个非对角线单元格更重要,取决于具体应用:癌症筛查会通过调优来降低假负例,而垃圾邮件过滤器则会通过调优来降低假正例。

多类别混淆矩阵#

有 N 个类别时,矩阵的大小为 N × N。在scikit-learn 的 confusion_matrix所采用的方向中,每一行代表一个真实类别,每一列代表一个预测类别。沿着一行查看,可以看到该类别的样本被分到了哪些类别,因此该行对角线单元格的值除以行总数,就是该类别的召回率。沿着一列查看,可以看到模型预测为该类别的样本实际属于哪些类别,因此该列对角线单元格的值除以列总数,就是该类别的精确率。有些工具会绘制转置后的矩阵,因此应根据坐标轴标签来解读图表。

from sklearn.metrics import confusion_matrix

# 10 张图像的真实标签和预测标签
y_true = ["cat", "cat", "cat", "dog", "dog", "dog", "dog", "fox", "fox", "fox"]
y_pred = ["cat", "cat", "dog", "dog", "dog", "dog", "cat", "fox", "dog", "fox"]

# 行表示真实类别,列表示预测类别,顺序与此标签顺序一致
labels = ["cat", "dog", "fox"]
matrix = confusion_matrix(y_true, y_pred, labels=labels)
print(matrix)

猫、狗和狐狸对应的打印行分别是 [2 1 0]、[1 3 0] 和 [0 1 2]。对角线包含 10 张图像中的 7 张,因此准确率为 0.7。狗这一列收录了一张猫和一张狐狸的图像,因此狗的精确率为 3 / 5 = 0.6;狗这一行有一张图像被误分为猫,因此狗的召回率为 3 / 4 = 0.75。归一化矩阵会将每个单元格除以其真实类别的总数,因此对角线显示每个类别的召回率,并使规模差异很大的类别可以相互比较。

目标检测的混淆矩阵#

检测会增加一个背景类别,因为检测器可能在没有物体的地方报告一个框,也可能完全漏掉一个物体。首先根据交并比 (IoU)将预测与标签匹配,然后进行计数:匹配的样本对计入对应类别的单元格,未匹配的预测作为背景对应的假正例计数,未匹配的标签则作为预测为背景的假负例计数。背景与背景对应的单元格始终为空,因为无法统计空白图像区域,所以检测混淆矩阵没有真负例。YOLO26验证会为背景增加一行和一列来构建此矩阵,将 IoU 高于 0.45 的预测与标签进行匹配,并将其保存为 confusion_matrix.png,其中纵轴为预测类别,横轴为真实类别。

from ultralytics import YOLO

# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")

# Validation builds the confusion matrix and saves it as confusion_matrix.png
metrics = model.val(data="coco8.yaml")
matrix = metrics.confusion_matrix.matrix  # rows: predicted class, columns: true class

# 80 COCO classes plus one background row and column
print(matrix.shape)

# Class 0 is "person": correct detections and people the model missed
print(f"Person TP: {matrix[0, 0]:.0f}, missed: {matrix[-1, 0]:.0f}")

矩阵的形状为 (81, 81),最后一行统计了没有任何预测与之匹配的已标注人员。

  • ROC 曲线:每个决策阈值对应一个点,每个点将该阈值下的混淆矩阵概括为真正例率和假正例率。
  • 平均精度均值 (mAP):主要的检测评分,由所有置信度水平下相同的 TP 和 FP 决策构成,但不会显示哪些类别被混淆。
  • 准确率:将矩阵压缩为一个数字,即对角线计数除以总数。在负例占 95% 的数据集上,始终预测“负例”的模型能得到 95% 的准确率,而它的矩阵显示真正例为零。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来