前言
本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。
文章目录
- 1、混淆矩阵(Confusion Matrix)
- 2、真正例(True Positive,TP)、真负例(True Negative,TN)、假正例(False Positive,FP)、假负例(False Negative,FN)
- 3、查准率(Precision)
- 4、查全率(Recall)
- 5、F1 - Score
- 6、P曲线、R曲线和PR曲线
- 7、交并比(Intersection over Union,IoU)
- 8、平均精度(Average Precision,AP)
- 9、平均精度均值(Mean Average Precision,mAP)
- 10、参数量(Number of Parameters)
- 11、计算量(Computational Complexity)
- 12、推理速度FPS(Frames Per Second)
1、混淆矩阵(Confusion Matrix)
混淆矩阵(Confusion Matrix)是一种用于评估分类模型性能的工具。它是一个表格,通过将模型的预测结果与实际的真实标签进行对比,展示模型在各个类别上的分类情况。对于一个具有 n n n个类别的分类问题,混淆矩阵是一个 n × n n\times n n×n的矩阵。
在二分类问题中,混淆矩阵的结构最为简单且易于理解。它有4个基本元素:
- 真正例(True Positive,TP)
- 假正例(False Positive,FP)
- 真负例(True Negative,TN)
- 假负例(False Negative,FN)
这四个元素分布在一个 2 × 2 2\times2 2×2的矩阵中,如下表所示:
分类情况 | 预测为正类(P) | 预测为负类(N) |
---|---|---|
真实为正类(TP + FN) | 真正例(TP) | 假负例(FN) |
真实为负类(FP + TN) | 假正例(FP) | 真负例(TN) |
这是一个关于目标检测的混淆矩阵实验结果。从图中可以看出,当预测为iw
时,实际也为iw
的概率为0.92;当预测为背景background
时,实际也为背景background
的概率为0.08。

🔗示例:假设有一个图像分类任务,判断图像中是否有猫(正类)。如果有100张图像,其中50张有猫,50张没有猫。模型预测有猫的图像中有40张是正确的(TP = 40),有10张其实没有猫(FP = 10);模型预测没有猫的图像中有45张是正确的(TN = 45),有5张其实有猫(FN = 5),就可以构建出相应的混淆矩阵。
多分类问题中的混淆矩阵
- 当分类任务涉及多个类别(例如图像分类中有猫、狗、鸟等多个类别)时,混淆矩阵会变得更大。以一个三分类问题为例,混淆矩阵是一个 3 × 3 3\times3 3×3的表格,如下所示:
分类情况 | 预测为类别1 | 预测为类别2 | 预测为类别3 |
---|---|---|---|
真实为类别1 | TP1 | FP21(类别2误判为类别1) | FP31(类别3误判为类别1) |
真实为类别2 | FP12(类别1误判为类别2) | TP2 | FP32(类别3误判为类别2) |
真实为类别3 | FP13(类别1误判为类别3) | FP23(类别2误判为类别3) | TP3 |
这里的TP1表示真实类别为1且模型正确预测为类别1的样本数量,FP21表示真实类别为2但模型错误地预测为类别1的样本数量,以此类推
混淆矩阵的作用
-
评估模型准确性:通过查看混淆矩阵中的各个元素,可以直接了解模型在每个类别上的分类准确程度。例如,对角线上的元素(真正例)之和占总样本数的比例可以作为一种准确性的衡量指标。
-
发现类别不平衡问题:如果某个类别对应的真正例数量很少,而假负例或假正例数量较多,可能意味着数据存在类别不平衡的情况。这会影响模型的训练和评估,需要采取相应的策略(如数据增强、调整权重等)来解决。
-
比较不同模型的性能:对于多个分类模型,可以通过比较它们的混淆矩阵来选择性能更好的模型。例如,一个模型的混淆矩阵对角线上的元素普遍比另一个模型的大,说明前者在分类准确性上可能更优。
2、真正例(True Positive,TP)、真负例(True Negative,TN)、假正例(False Positive,FP)、假负例(False Negative,FN)
- 真正例(TP)
模型预测为正类,且实际也是正类的样本数量。即模型正确地将一个应该是正类的样本判断为正类。
TP 的数量反映了模型在正确识别正类样本方面的能力。
- 真负例(TN)
模型预测为负类,且实际也是负类的样本数量。即模型正确地将一个应该是负类的样本判断为负类。
TN 的数量体现了模型在正确识别负类样本方面的能力。
- 假正例(FP)
模型预测为正类,但实际是负类的样本数量。即模型错误地将一个负类样本判断为正类。
FP 的数量反映了模型的误检情况。
- 假负例(FN)
模型预测为负类,但实际是正类的样本数量。即模型错误地将一个正类样本判断为负类。
FN 的数量体现了模型的漏检情况。
🔗示例:在一个判断邮件是否为垃圾邮件(正类表示是垃圾邮件)的分类任务中,真正例(TP)就是模型正确预测为垃圾邮件的邮件数量;假正例(FP)是模型错误地将正常邮件预测为垃圾邮件的数量;真负例(TN)是模型正确预测为正常邮件的数量;假负例(FN)是模型错误地将垃圾邮件预测为正常邮件的数量。
3、查准率(Precision)
查准率(Precision)是评估分类模型性能的一个重要指标,也称为精度。它衡量的是在所有被模型预测为正类的样本中,真正为正类的样本所占的比例。
简单来说,查准率回答了这样一个问题:“当模型预测为正类时,它有多准确?”
公式为:
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
🔗在上述猫的分类例子中, P r e c i s i o n = 40 40 + 10 = 0.8 Precision=\frac{40}{40 + 10}=0.8 Precision=40+1040=0.8,表示模型预测有猫的图像中,真正有猫的图像占80%。
4、查全率(Recall)
查全率(Recall),也称为召回率或敏感度(Sensitivity),是评估分类模型性能的关键指标之一。它衡量的是在所有实际为正类的样本中,被模型正确预测为正类的样本所占的比例。
可以理解为,模型能够找回多少正类样本的能力。
公式为:
R e c a l l = T P T P + F N Recall=\frac{TP}{TP + FN} Recall=TP+FNTP
🔗在上述猫的分类例子中, R e c a l l = 40 40 + 5 ≈ 0.889 Recall=\frac{40}{40+5}\approx0.889 Recall=40+540≈0.889,表示实际有猫的图像中,被模型正确预测为有猫的图像约占88.9%。
5、F1 - Score
F1 - Score
是查准率和查全率的调和平均数,它综合考虑了查准率和查全率,用于平衡两者之间的关系。
F1 - Score
的值越高,表示模型在查准和查全这两个方面的综合性能越好。
公式为:
F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2\times Precision\times Recall}{Precision + Recall} F1=Precision+Recall2×Precision×Recall
🔗在上述猫的分类例子中,先计算出查准率 P = 0.8 P = 0.8 P=0.8,查全率 R = 0.889 R=0.889 R=0.889,则 F 1 = 2 × 0.8 × 0.889 0.8 + 0.889 ≈ 0.843 F1=\frac{2\times0.8\times0.889}{0.8 + 0.889}\approx0.843 F1=0.8+0.8892×0.8×0.889≈0.843。
F1曲线就是F1-Score
随着Confience
逐渐增高而变化的曲线。
置信度Confience:模型判定一个物体并不是百分百判定它是属于某个分类,而是会给予它一个概率,Confidence
就是设置的阈值,如果超过这个概率那么就确定为某个分类。
图例表示,当confidence
为0.517时,all classes的F1-Score
为0.89;
下图为YOLO模型训练后的验证结果,红框中分别表示P查准率
和R查全率
的精度。
6、P曲线、R曲线和PR曲线
Precision - Confidence Curve(查准率 - 置信度曲线)
- 定义与绘制原理
- 在目标检测或分类任务中,模型通常会为每个预测结果输出一个置信度分数(Confidence Score),表示模型对该预测的确定程度。对于不同的置信度阈值,计算对应的查准率。以置信度为横坐标,查准率为纵坐标,绘制出的曲线就是
Precision - Confidence Curve
。 - 例如,在目标检测任务中,当置信度阈值设为很高的值时,模型只保留那些它非常确定的预测结果。此时,查准率可能较高,因为留下的大多是模型很有把握的正类预测;随着置信度阈值降低,更多的预测结果被考虑进来,其中可能会包含较多的假正例,导致查准率下降。
- 在目标检测或分类任务中,模型通常会为每个预测结果输出一个置信度分数(Confidence Score),表示模型对该预测的确定程度。对于不同的置信度阈值,计算对应的查准率。以置信度为横坐标,查准率为纵坐标,绘制出的曲线就是
- 图像含义
- 曲线直观地展示了查准率随置信度变化的情况。从曲线的起点(最高置信度)开始,查准率通常较高,随着置信度降低,查准率逐渐下降。如果曲线下降较为平缓,说明模型在降低置信度要求时,查准率的下降速度较慢,即模型对不太确定的预测也有一定的准确性。
- 这条曲线可以帮助确定一个合适的置信度阈值,以平衡准确性和召回率。例如,在一些对准确性要求极高的应用场景(如医疗影像诊断),可以选择曲线中查准率较高部分对应的置信度阈值。
Recall - Confidence Curve(查全率 - 置信度曲线)
- 定义与绘制原理
- 同样以目标检测或分类任务中的置信度分数为基础,对于不同的置信度阈值,计算对应的查全率。以置信度为横坐标,查全率为纵坐标绘制而成。随着置信度阈值的变化,被认为是正类的样本数量会发生改变,从而影响查全率。
- 当置信度阈值很高时,只有很少的样本被判定为正类,可能会遗漏很多正类样本,导致查全率较低。随着置信度阈值降低,更多的样本被判定为正类,查全率会逐渐提高。
- 图像含义
- 曲线展示了查全率与置信度之间的关系。从曲线可以看出,一般情况下,查全率随着置信度阈值的降低而升高。如果曲线上升很快,说明模型在降低置信度要求时,能够快速召回更多的正类样本。
- 这条曲线有助于理解模型在不同置信度水平下找回正类样本的能力。在一些需要尽可能全面地检测或分类正类样本的场景(如安全监控系统中检测危险物品),可以参考此曲线来选择合适的置信度阈值,以达到较高的查全率。
Precision - Recall Curve(查准率 - 查全率曲线)
- 定义与绘制原理
- 如前面所述,通过改变分类阈值(在分类任务中)或其他相关参数(在目标检测等任务中),计算出不同阈值下的查准率和查全率,以查全率为横坐标,查准率为纵坐标绘制曲线。
- 在绘制过程中,随着分类阈值的变化,正类样本的判定范围发生改变。例如,在二分类问题中,降低分类阈值会使更多的样本被判定为正类,这会影响查准率和查全率。查全率可能会因为更多正类样本被找回而提高,但查准率可能会因为引入更多假正例而下降。
- 图像含义
- 曲线形状反映了查准率和查全率之间的权衡关系。理想的曲线是靠近右上角的,这表示在高查全率的情况下也能保持高查准率。曲线下的面积(AUC)可以作为衡量模型性能的一个参考指标,AUC越大,说明模型在不同查全率 - 查准率组合下的综合性能越好。
- 比较不同模型的PR曲线可以直观地看出它们在性能上的差异。如果一个模型的
PR曲线
完全包含另一个模型的PR曲线
,那么前者在查准率和查全率的综合性能上更优。同时,PR曲线
还可以用于选择合适的分类阈值,以满足特定的查准率和查全率要求。
7、交并比(Intersection over Union,IoU)
交并比(Intersection over Union,IoU)
,也称为杰卡德相似系数(Jaccard Similarity Coefficient),主要用于目标检测任务中衡量预测框与真实框之间的重叠程度。它是预测框与真实框的交集面积和并集面积的比值。
公式为:
I o U = 交集面积 并集面积 IoU=\frac{交集面积}{并集面积} IoU=并集面积交集面积

🔗示例:如果预测框的面积为100,真实框的面积为80,两者交集面积为60,则 I o U = 60 100 + 80 − 60 = 0.5 IoU=\frac{60}{100 + 80-60}=0.5 IoU=100+80−6060=0.5。一般在目标检测中,当IoU大于某个阈值(如0.5)时,认为检测是正确的。
8、平均精度(Average Precision,AP)
定义:在目标检测任务中,AP
是对不同召回率下精度的平均值。它是通过对PR曲线
下面积的积分计算得到的。
在目标检测里,我们不仅关心模型是否能正确地识别目标类别(分类准确性),还关心模型是否能准确地定位目标(位置准确性)。AP
综合考虑了这两个方面,通过对不同召回率(Recall)
下精度(Precision)
的平均值来衡量模型在整个检测过程中的性能。
9、平均精度均值(Mean Average Precision,mAP)
定义:对于多类别目标检测任务,mAP
是所有类别AP的平均值。它可以评估模型在多个类别上的综合检测性能。
🔗示例:如果有3个类别,其AP分别为0.7、0.8、0.9,则 m A P = 0.7 + 0.8 + 0.9 3 = 0.8 mAP=\frac{0.7 + 0.8+0.9}{3}=0.8 mAP=30.7+0.8+0.9=0.8。
mAP50
mAP50
是指在交并比阈值设定为 0.5 时计算得到的mAP
。
在目标检测任务中,对于每个类别,首先根据 IoU = 0.5 的标准来判断预测框是真正例(TP)、假正例(FP)还是假负例(FN)。
然后,针对每个类别计算P-R曲线
下的面积,即该类别的AP
。最后,将所有类别的AP
进行平均,就得到了mAP50
。
mAP50-95
mAP50-95
是一个更严格、更全面的评估指标。
它是在 IoU 阈值从 0.5 到 0.95(通常以 0.05 为间隔,即 0.5、0.55、0.6、...、0.9、0.95)
的多个值下,分别计算每个 IoU 阈值对应的平均精度(AP),然后将这些 AP 进行平均得到的值。
这个指标能够综合评估模型在不同定位精度要求下的性能。

红框中就是模型训练后的mAP50
和mAP50-95
的值。
10、参数量(Number of Parameters)
定义:模型中所有可训练参数的数量。它反映了模型的复杂度。
在神经网络中,这些参数包括权重(Weights)和偏置(Biases)。
权重用于表示神经元之间连接的强度,偏置则是用于调整神经元的激活阈值。参数量是衡量模型复杂度的一个重要指标,它在很大程度上影响着模型的存储需求、训练时间和计算资源消耗等。
🔗示例:一个简单的全连接神经网络层 y = W x + b y = Wx + b y=Wx+b,如果 x x x是一个长度为 n n n的向量, y y y是一个长度为 m m m的向量,那么这个层的参数量为 n × m + m n\times m+m n×m+m( W W W的参数数量为 n × m n\times m n×m, b b b的参数数量为 m m m)。
红框中的2694806 parameters
就是模型可训练参数的数量。2.69M parameters
11、计算量(Computational Complexity)
定义:FLOPs(Floating - Point Operations)即浮点运算次数,是衡量模型计算量的一个重要指标。
它表示模型在执行一次前向传播过程中所需的浮点数计算次数,包括加法、乘法、除法等运算。计算量反映了模型在进行推理或训练时的计算复杂程度,对于评估模型的运行效率、硬件资源需求(如 CPU、GPU 的计算能力)以及推理速度等方面具有重要意义。
🔗示例:对于一个卷积层,其计算量的计算涉及到卷积核的大小、输入和输出通道数等因素。假设一个卷积层的输入特征图大小为 H × W × C i n H\times W\times C_{in} H×W×Cin,卷积核大小为 k × k k\times k k×k,输出通道数为 C o u t C_{out} Cout,则其FLOPs大约为 H × W × C i n × C o u t × k × k H\times W\times C_{in}\times C_{out}\times k\times k H×W×Cin×Cout×k×k(这是一个简化的计算,忽略了一些偏置项等因素)。
换算公式
-
MFLOPS(megaFLOPS):等于每秒一百万( = 1 0 6 =10^{6} =106)次的浮点运算。
-
GFLOPS(gigaFLOPS):等于每秒十亿( = 1 0 9 =10^{9} =109)次的浮点运算。
-
TFLOPS(teraFLOPS):等于每秒一万亿( = 1 0 12 =10^{12} =1012)次的浮点运算,(1太拉)。
-
PFLOPS(petaFLOPS):等于每秒一千万亿( = 1 0 15 =10^{15} =1015)次的浮点运算。
-
EFLOPS(exaFLOPS):等于每秒一百京( = 1 0 18 =10^{18} =1018)次的浮点运算。
-
ZFLOPS(zettaFLOPS):等于每秒十万京( = 1 0 21 =10^{21} =1021)次的浮点运算。
红框中的8.2 GFLOPs
就是模型的浮点运算次数。
📌TiPs
- FLOPs(Floating - Point Operations):如前面所讲,它是指浮点运算次数,用于衡量模型在执行一次前向传播过程中所需的浮点数计算的数量。这是一个表示计算量大小的指标,重点关注的是计算任务的规模,与模型结构的复杂程度有关,不涉及时间相关的概念。
- FLOPS(Floating - Point Operations Per Second):是每秒浮点运算次数,用于衡量计算设备(如CPU、GPU)的计算性能。它描述的是硬件在单位时间(每秒)内能够执行的浮点运算的数量,是一个速度相关的指标。
12、推理速度FPS(Frames Per Second)
- 定义:每秒能够处理的图像帧数,用于衡量模型在实际应用中的实时性。
🔗示例:如果一个模型在处理100张图像时,总共花费了10秒,则其FPS为 100 / 10 = 10 100/10 = 10 100/10=10帧/秒。这意味着该模型每秒可以处理10张图像。
在YOLO模型的验证阶段,红框中的Speed
代表检测一张图片所需的时间,其中包括预处理时间、推理时间、后处理时间,这和BatchSize
设置的大小有关。一般BatchSize
越大,速度越快。