深度学习中的任务一般分为目标检测和语义分割:
此外,可能还会有更加简单的分类任务,例如文字识别。(当然还有极为复杂的实例分割,此处暂不讨论)
针对这三种任务,指标也会略有不同。接下来会从最简单的分类任务入手,对这些指标进行解释:
1. 分类任务中的指标
Confusion Matrix(混淆矩阵)
假设现在有一个分类任务,要判断图中物体是不是人,那么模型给出的结果无非是以下四种:
1. 图中的确是人,模型也识别为人。这种情况称为“真正例”(True Positive),简写为TP。
2. 图中的确是人,但模型认为其不是人(或未识别),这种情况称为“假负例”(False Negative),简称FN。
3. 图中不是人,但模型识别为人。这种情况为“假正例”(False Positive),简写FP。
4. 图中不是人,模型也认为其不是人(或未识别),这种情况称为“真负例”(True Negative),简称TN。
区分这四种情况的命名其实不难:
先看第一个字母:如果模型预测结果是正确的,则为“真”,简写字母就是T,否则为F。
再看第二个字母:如果模型做出了正面的预测(也就是说,模型“积极”分类,而不是“消极罢工”,不进行预测),无论是否正确,字母都为P,否则为N。
我们将这四种结果推广到n分类任务,会得到一张表格:(横轴为模型预测的类别,纵轴为实际类别,则form[i][j]的值为:实际为i类,但模型预测为j类的情况数)
0 | 1 | ... | n | |
0 | ||||
1 | ||||
... | ||||
n |
此时TP、FN等值则需要针对类别来说了,比如说,我们要查看模型对第i类的预测情况,则:(TN不用管)
搞清楚了这个矩阵,就可以定义以下指标(这些指标也是针对某一类来计算的):
Precision(查准率,精确率)
指模型做出正面预测的所有结果中正确的比例。公式为:
这个指标可以用来衡量模型的精确度。
Recall(查全率,召回率)
指所有确实为真的样本中,被模型预测为“真”的比例。(以之前的例子,就是所有内容为人的照片中,被模型识别出来的比率),公式:
Precision与Recall的特点:
我们自然希望模型的Precision和Recall都越高越好,但在条件有限的情况下,可以视情况对这两个指标有不同的偏重。
Precision高、Recall低的模型的特点为:轻易不出手,出手就必杀。继续上面的例子,这样的模型可能会漏掉很多实际为人的图片,但它认定为人的图片,则该图片几乎不可能是其他类别。对于一些要求精确定位的任务(例如判断一群鹿里面有没有马,如果我的Recall很高,就会“指鹿为马”,而Precision高的话,即使我无法找出全部的马,但可以精确识别出一匹就可以完成任务了)
Precision低、Recall高的模型的特点为:宁可错杀一千,不可放过一个。这样的模型可能会把很多非人图像识别为人,但它一般能保证把所有为人的图像找出来。对于一些安全防范类的任务(例如识别某些物品是否为危险品)会要求有较高的Recall。(即使识别错也不能放过)。
Top 1 Accuracy & Top 5 Accuracy
Top 5 Accuracy:单张图片经过网络,会输出该图片在所有类别上的概率(得分),如果其实际类别在概率(得分)最高的5类中,则认为其分类正确。则Top 5 Accuracy = 符合以上条件分类正确的图片/所有图片。
Top 1 Accuracy:预测图片概率(得分)最高的那一类是其实际类才呗视为分类正确。Top 1 Accuracy = 符合以上条件分类正确的图片/所有图片。
有时这个Top 1或Top 5会用错误率表示,100%减去正确率即可。
2. 目标检测中的指标
IoU(Intersection over Union,交并比)
用来检测模型所确定的目标的精准度。
以下图为例,假设红色框为模型预测值,黄色框为标注,则IOU的值为两框相交的面积除以两框相并后的面积。
黄框称(实际目标)为Ground-truth bounding box,红框(预测目标)称为Predicted bounding box。
Confusion Matrix(混淆矩阵)
有了IoU,目标检测任务也可计算出混淆矩阵。对于“车”这一类,我们设置一个IoU阈值,假设设为0.5。那么:( 当然,这里的红框必须是模型对于“车”这一类产生的红框。)
情况1:模型给出预测(出现红框)且IoU>0.5,则TP+1
情况2:模型给出预测(出现红框)但IoU<0.5,则FP+1
情况3:没有红框但有黄框,FN+1。
与IoU阈值一样为超参数的还有一个:Confidence Threshold(置信度),模型的预测结果其实是一个[0,1]的小数,数值越高表示这张图片属于某一类的可能性越大,假设设置Confidence Threshold=0.5,则模型只会对结果大于0.5的情况画出它的红框。(即结果大于0.5结果为Positive,否则为Negative)
置信度的调整会显著影响到指标:
就拿Precision和Recall来说,较低的置信度可能会提高Recall,同时也可能降低Precision。
F1 Score
Precision和Recall有时就如鱼和熊掌,往往会顾此失彼,那有没有更为全面的评判指标呢?
F1 Score就是综合了Recall和Precision的一个指标,公式:
PRC(Precision Recall Curve)
此外还有PR曲线,它以Recall为横轴,Precision为纵轴。
那这条曲线是如何画出来的呢?
首先对于所有的样本,通过模型得到其confidence值,然后选择confidence最高的k个(K值可自定)样本,通过调整不同的置信度来计算Recall和Precision,得到的结果就是图中的一个点,通过设置n个置信度可计算得到n个点,连点即为一条PR曲线。
此外可以引入IOU阈值画多条线:
若某个模型的曲线明显包住另一个模型的曲线,说明前者要优于后者(例如图中A优于C),对于相互交汇的曲线,可以通过其包围的面积(AUC,Area Under Curve)来评判其性能。此外,还可以引入BEP(平衡点)来衡量模型优劣。平衡点是图中Recall与Precision相等时取的点,显然平衡点越往右上走,模型越好。
AP与mAP
简单来说,AP(Average Precision,平均精确度)是PR曲线中不同Recall下Precision的平均值,这里有两种不同的计算方法:
首先是11-point interpolated average precision,取11个值(0、0.1、0.2……0.9、1),然后对于每个值i,得到Recall>i前提下最大的Precision,这11个Precision平均后即为AP:如图中蓝点:
第二种计算方法:
假设这K个样本中有n个正例,那我们通过调整置信度会得到n个Recall值(当置信度阈值最低时,所有正例都会被识别出来,Recall就为n/n=1,当置信度阈值调整到最高时,只有一个能识别,Recall=1/n),然而这n个Recall值,每个可能会对应着多个Precision值(例如,我把置信度阈值调得足够低,模型会把所有样本识别为正例,但我稍微提高一下这个阈值,模型可能会正确识别出其中一个Confidence最低的负例,此时Recall不变,Precision却提高了),对于每个Recall值对应的多个Precision,取其中最高的一个,得到n个Precision,最后平均这n个Precision即可得到AP。
mAP(Mean Average Precision,平均精确度)则为AP在所有类上的平均。
ROC(Receiver Operating Characteristic)
ROC曲线通常用来衡量一个二分类器的性能,其横坐标为FPR=FP/(FP+TN),纵坐标为TPR=TP/(TP+FN),从公式不难得出,横坐标为所有实际为负例的,模型误识别为正例的概率,纵坐标就是Recall。理想的模型自然是TPR=1,FPR=0.(在识别出所有的人的同时还没有把任何非人的物体识别为人,对应的是下图最左上的点)。
图中的虚线是随机分类模型的ROC(这个模型对每个样本的置信度是个[0,1]之间的随机数),那么为什么随机分类的模型的FPR一直等于TPR,本人简单地做了个证明:
前提:样本数量足够大,模型分类完全随机(即无论置信度阈值设为多少,高于此值的正、负样本数量的比例与总体比例一致)
假设样本中共有正例n个,负例m个,假设当前仅有k个样本的置信度高过阈值(0<k<=n+m),则这k个样本中,真正为正例的仅kn/(n+m)个,则:
同理,k中有负例km/(n+m)个,模型将其中一半误识别为正例,则:
ROC与PRC的异同
若对于同一个数据集,两种曲线上的点存在一一对应的关系,因此这两种曲线是可以相互转换的。
此外,若对于同一数据集,模型A在ROC上的表现比模型B好,则在PRC上的表现也会比B好。
然而,相比PRC,ROC在样本正、负比例不均时会有更好的表现。(这里的“表现”指的是曲线的变化而不是模型。)
如图,a、c是ROC,b、d是PRC,其中a、b对应的是正常数据集,c、d对应的是负例增加10倍的数据集,可见PRC不够“稳定”。
在负例极多的数据集下,虽然PRC不够“优美”,但它仍能更为直观地反映出模型的优劣:
如图,假设数据集中有100个正例,以A点为例计算可得出TP=80,FP=1520,负例有15200个,可见这是个正、负例极其不均的数据集,也可以知道模型在A点处将1600个样本分为正例(其中1520个实际上是负例),可见模型是不合格的,然而这一点仅从ROC曲线上无法体现,还需借助PRC才可得知。
3. 语义分割中的指标
Pixel Accuracy(PA,像素精度)
正确分类的像素占整张图片所有像素的比例。公式看起来可能有点复杂:
假设Pij为实际为i类却被分为j类的像素数量,一共有k+1类(索引为0到k,0为背景):
Mean Pixel Accuracy(mPA,平均像素精度)
先计算每个类内被正确分类的像素比例,再对所有类求平均。
IoU、mIoU、FW IoU
相比较于目标检测中的IoU,语义分割的IoU计算同样无法脱离某个类别,此外语义分割中的IoU计算是基于像素的:
对于所有的类别,还有mIoU(mean IoU),这个是所有类的IoU的平均值。
然而,语义分割中有一个类别比较特殊:背景。如果一张图中的背景过大,则通过该预测图计算出来的IoU可能会失真。(在大部分区域模型可以不干活,但工作绩效(IoU)却还不错),为此还有一种脱胎于mIoU,却更为全面的指标:FW IoU。
FW IoU其实是带权重分配的mIoU,这个权重是通过每种类别的出现频率来确定的。
即便如此,因为mIoU的简洁方便,语义分割中最为常用的指标还是它。
4. 参考资料及部分图片出处
https://blog.csdn.net/pipisorry/article/details/51788927
https://blog.csdn.net/majinlei121/article/details/78965435
https://blog.csdn.net/qq_41994006/article/details/81051150
https://www.jeremyjordan.me/evaluating-image-segmentation-models/