美文网首页
深度学习 | 检测网络评价指标详解

深度学习 | 检测网络评价指标详解

作者: yuanCruise | 来源:发表于2019-01-03 20:33 被阅读73次

    1.准确率,精确率,召回率

    准确率(Accuracy),又称为“查对率”。
    精确率(Precision),又称为“查准率”。
    召回率(Recall), 又称为“查全率”。

    上述提到的别名能够更好的理解这几个指标的含义。

    准确率(Accuracy),这是一个很常见的评价指标。检测任务中所有检测正确的样本/总的样本,就是准确率。因此准确率在本文中就不多讲了。精确率(Precision)和召回率(Recall)能够很好的衡量目标检测算法或检索算法的性能,因此本文着重介绍这两个评价策略的含义。
    接下来用一个目标检测的例子来帮助你更好的理解这几个指标所代表的含义。在一个水果检测任务中,整个数据集中有1000个目标,其中有100个水果,其余都是负样本。此时检测算法检测出75个目标,其中50个水果,25个负样本,此时:

    精确率(Precision) = 检测到的正目标 / 当前所有检测为目标的总数 = 50 / 75 = 67%
    
    召回率(Recall) = 检测到的正目标 / 正目标的总数 = 50 / 100 = 50%
    

    上面的检测为第一次检测,同样的环境下改变检测算法后进行第二次检测,算法检测出150个目标,其中,90个是水果,60个负样本,此时:

    精确率(Precision) = 检测到的正目标 / 当前所有检测为目标的总数 = 90 / 150 = 60%
    
    召回率(Recall) = 检测到的正目标 / 正目标的总数 = 90 / 100 = 90%
    

    我们发现,精确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高。 一般情况,对于同一个检测算法而言,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:


    网上还有很多教程利用类似下图所示的图来解释精确率和召回率。但我觉得网上那种示意图对于不理解这两个概念的同学来说并不是很友好,因此个人感觉先理解了上述的例子再来看下图就会有种豁然开朗的感觉。

    根据下图可推导出下面三个公式(结合图中Note和上述例子更易理解):

    准确率(Accuracy) = (TP + TN)/(TP+FP+FN+TN)
    
    精确率(Precision) = (TP)/(TP+FP)
    
    召回率(Recall) = (TP)/(TP+FN)
    

    下图也是很形象的网络上介绍精确率和召回率的图,但个人认为还是先看例子再看图会更易理解。


    2.F度量(F-measure),结合精确率和召回率

    基于上一部分的介绍,不难得出精确率与召回率两者基本存在一种“互补”的关系。仿佛利用任意一种评价指标都没办法保证两者都高,然而在检测任务当中,我们需要得到两者都高的系统,那要怎么办呢?此时,就需要引出F度量(F-measure)。F度量的计算公式如下:



    结合上文的例子,利用上述公式计算得到,第一次检测的F度量为57%,第二次检测的F度量为72%,显然改变算法后的检测效果优于改变前。

    3.mAP(mean Average Precision)

    不论是精确率,召回率还是F度量,都存在单点局限性,不能够表征全局性能指标。而mAP值能够有效的表征算法的全局性能。那么mAP值是如何表征的呢?为了得到 一个能够反映全局性能的指标,观察下图,其中两条曲线(方块点与圆点)分布对应了两个检测算法的精确率-召回率曲线。可以看出,虽然两个算法的性能曲线有所交叠但是以圆点标示的算法的性能在绝大多数情况下要远好于用方块标示的算法。从中我们可以发现一点,如果一个算法的性能较好,其曲线应当尽可能的向上突出。进一步说,就是曲线与坐标轴之间的面积应当越大。最理想的算法, 其包含的面积应该是1。

    接下来用一个分类算法的例子(该分类任务为同一副图片中存在多个目标类别的场景,其实就是目前通用的检测算法中的类别判断过程)来具体介绍mAP是如何计算的。(样例来源于网络,本人对其进行了整理的重述)。要计算mAP(mean Average Precision),首先需要计算 AP(Average Precision)。

    1.测试训练集得到置信值并排序
    首先用训练好的分类模型计算得到所有测试样本的置信度分数,每一类(如car)的置信度分数保存到一个文件中。如下图左表所示就是一个类别的置信度分数表,和其对应的标签(1表示当前位置是正样本,0表示负样本)。且下图左表说明了当前测试集中检测为car的目标一共有20个。之后根据score进行排序得到下图右表。



    2.计算精确率和召回率
    对测试集在训练好的模型上分类,对于car这个类别而言,若我们想得到top-5的结果,即置信度分数前5的为正目标,其余为负目标,如下图所示。在这个例子中,True Positives就是指第4和第2张图片,False Positives就是指第13,19,6张图片。False Negatives是指第9,16,7,20张图片,True Negatives是指第1,18,5,15,10,17,12,14,8,11,3张图片。因此当前例子中精确率(Precision)=TP/(TP+FP)=2/5=40%;召回率(Recall)=TP/(TP+FN)=2/6=30%。


    实际多类别分类任务中,我们通常不满足只通过top-5来衡量一个模型的好坏,而是需要知道从top-1到top-N(N是所有测试集中当前类别的总数,本文中为20)对应的精确率(precision)和召回率(recall)。显然N越大,recall一定会越高,而precision整体上会呈下降趋势。把recall当成横坐标,precision当成纵坐标,即可得到常用的precision-recall曲线。这个例子的precision-recall曲线如下:

    3.计算AP(两种)
    利用11-point interpolated average precision(Old,用到P-R曲线)计算AP值。设定一组阈值,[0, 0.1, 0.2, …, 1](11个值)。然后对于recall大于每一个阈值(比如recall>0.3),在P-R曲线上都会得到一个对应的最大precision。这样,我们就计算出了11个precision。AP即为这11个precision的平均值。

    利用11-point interpolated average precision(New,未用到P-R曲线)计算AP值。对于上述例子而言我们有6个正例,那么我们会得到6个recall值(1/6,2/6,3/6,4/6,5/6,6/6),对于每一个recall值,我们都能够计算得到一个基于当前recall下最大能够达到的precision值(该过程没用到P-R曲线),然后对这6个precision求平均就是AP值,本例的计算如下图。

    相应的MaxPrecision-Recall曲线如下:​


    4.计算mAP
    AP衡量的是训练得到的模型在每个类别上的好坏,mAP衡量的是模型在所有类别上的好坏,得到AP后mAP的计算就是取所有AP的平均值。

    相关文章

      网友评论

          本文标题:深度学习 | 检测网络评价指标详解

          本文链接:https://www.haomeiwen.com/subject/wgrzlqtx.html