深度学习中的模型评判指标

深度学习中的任务一般分为目标检测和语义分割:

                    

此外,可能还会有更加简单的分类任务,例如文字识别。(当然还有极为复杂的实例分割,此处暂不讨论)

针对这三种任务,指标也会略有不同。接下来会从最简单的分类任务入手,对这些指标进行解释:

 

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类的情况数)

 01...n
0    
1    
...    
n    

 

 

 

 

 

 

此时TP、FN等值则需要针对类别来说了,比如说,我们要查看模型对第i类的预测情况,则:(TN不用管)

\large TP = form[i][i]

FP=\sum_{j=0,j\neq i}^n{form[j][i]}

FN = \sum_{j=0,j\neq i}^n{form[i][j]}

搞清楚了这个矩阵,就可以定义以下指标(这些指标也是针对某一类来计算的):

Precision(查准率,精确率)

指模型做出正面预测的所有结果中正确的比例。公式为:

P=\frac{TP}{TP+FP}

这个指标可以用来衡量模型的精确度。

Recall(查全率,召回率)

指所有确实为真的样本中,被模型预测为“真”的比例。(以之前的例子,就是所有内容为人的照片中,被模型识别出来的比率),公式:

R=\frac{TP}{TP+FN}

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的一个指标,公式:

\LARGE F_1=\frac{2PR}{P+R}

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)个,则:

\large TPR=\frac{\frac{kn}{n+m}}{n}=\frac{k}{(n+m)}

同理,k中有负例km/(n+m)个,模型将其中一半误识别为正例,则:

\large FPR=\frac{\frac{k}{2}\frac{m}{n+m}}{m}=\frac{k}{2(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为背景):

\large PA=\frac{\sum_{i=0}^{k}{p_{ii}}}{\sum_{i=0}^{k}\sum_{j=0}^{k}p_{ij}}=\frac{\sum_{i=0}^{k}p_{ii}}{All Pixel}

Mean Pixel Accuracy(mPA,平均像素精度)

先计算每个类内被正确分类的像素比例,再对所有类求平均。

\large PA=\frac{1}{k+1}\sum_{i=0}^{k}\frac{p_{ii}}{\sum_{j=0}^{k}p_{ij}}

IoU、mIoU、FW IoU

相比较于目标检测中的IoU,语义分割的IoU计算同样无法脱离某个类别,此外语义分割中的IoU计算是基于像素的:

\large IoU=\frac{target\cap prediction}{target\cup prediction}=\frac{Interaction}{Union}=\frac{p_{ii}}{\sum_{j=0}^{k}p_{ij}+\sum_{j=0}^{k}p_{ji}-p_{ii}}

对于所有的类别,还有mIoU(mean IoU),这个是所有类的IoU的平均值。

然而,语义分割中有一个类别比较特殊:背景。如果一张图中的背景过大,则通过该预测图计算出来的IoU可能会失真。(在大部分区域模型可以不干活,但工作绩效(IoU)却还不错),为此还有一种脱胎于mIoU,却更为全面的指标:FW IoU。

FW IoU其实是带权重分配的mIoU,这个权重是通过每种类别的出现频率来确定的。

\large FW IoU=\sum_{i=0}^k\frac{p_{ii}}{\sum_{j=0}^{k}p_{ij}+\sum_{j=0}^{k}p_{ji}-p_{ii}}*\frac{\sum_{j=0}^{k}p_{ij}}{\sum_{i=0}^{k}\sum_{j=0}^{k}p_{ij}}

即便如此,因为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/

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值