分类和目标检测的性能评价指标

  对于深度学习的网络模型,但愿其速度快,内存小,精度高。所以须要量化指标来评价这些性能,经常使用的指标有:mAP(平均准确度均值,精度指标), FPS(每秒处理的图片数量或每张图片处理须要时间,一样硬件条件下的速度指标) , 模型参数大小(内存大小指标)。算法

1.mAP (mean Avearage Precision)网络

    mAP指的是各种别的AP平均值,而AP指PR曲线的面积(precision和Recall关系曲线),所以得先了解下precision(精确率)和recall(召回率),以及相关的accuracy(准确度), F-measurement(F值), ROC曲线等。性能

  recall和precision是二分类问题中经常使用的评价指标,一般以关注的类为正类,其余类为负类,分类器的结果在测试数据上有4种状况:学习

 

 

 

   Precision和Recall计算举例测试

    假设咱们在数据集上训练了一个识别猫咪的模型,测试集包含100个样本,其中猫咪60张,另外40张为小狗。测试结果显示为猫咪的一共有52张图片,其中确实为猫咪的共50张,也就是有10张猫咪没有被模型检测出来,并且在检测结果中有2张为误检。由于猫咪更可爱,咱们更关注猫咪的检测状况,因此这里将猫咪认为是正类:因此TP=50,TN=38,FN=10,FP=2,P=50/52,R=50/60,acc=(50+38)/(50+38+10+2)spa

  为何引入Precision和Recall:3d

    recall和precision是模型性能两个不一样维度的度量:在图像分类任务中,虽然不少时候考察的是accuracy,好比ImageNet的评价标准。但具体到单个类别,若是recall比较高,但precision较低,好比大部分的汽车都被识别出来了,但把不少卡车也误识别为了汽车,这时候对应一个缘由。若是recall较低,precision较高,好比检测出的飞机结果很准确,可是有不少的飞机没有被识别出来,这时候又有一个缘由.code

    recall度量的是「查全率」,全部的正样本是否是都被检测出来了。好比在肿瘤预测场景中,要求模型有更高的recall,不能放过每个肿瘤。orm

    precision度量的是「查准率」,在全部检测出的正样本中是否是实际都为正样本。好比在垃圾邮件判断等场景中,要求有更高的precision,确保放到回收站的都是垃圾邮件。blog

  F-score/F-measurement:

    上面分析发现,精确率和召回率反映了分类器性能的两个方面,单一依靠某个指标并不能较为全面地评价一个分类器的性能。通常状况下,精确率越高,召回率越低;反之,召回率越高,精确率越低。为了平衡精确率和召回率的影响,较为全面地评价一个分类器,引入了F-score这个综合指标。

    F-score是精确率和召回率的调和均值,计算公式以下:

    其中, [公式][公式] )的取值反映了精确率和召回率在性能评估中的相对重要性具体,一般状况下,取值为1。描述以下:

      (1)当 [公式] 时,就是经常使用的 [公式] 值,代表精确率和召回率同样重要,计算公式以下:

      (2)当 [公式] 时, [公式] 代表召回率的权重比精确率高;

      (3)当 [公式] 时, [公式] 代表精确率的权重比召回率高。

  Accuracy:也是对模型预测准确的总体评估, 一般用到的准确率计算公式以下:

  AP/PR曲线:

    即recall为横坐标,precision为纵坐标,绘制不一样recall下的precison值,能够获得一条Precisoin和recall的曲线,AP就是这个P-R曲线下的面积,定义:             [公式]

    举例子比较好理解,

    分类问题:

        假设有100张图片,要分红猫,狗,鸡三类,100张图片对应100个真实值,模型分类后咱们会获得对应的100个预测值。这里咱们能够只取前10个预测值出来,计算10个值中猫预测出几张,预测对几张,从而能计算出猫的precison和recall;接着咱们能够取前20个预测值一样能计算出一组猫的precison和recall;这样一直增长到取100个预测值,就能获得猫的10组(recall, precision)值来绘制曲线。这里要注意的是:随着选取预测值增长,recall确定是增长或不变的(选取的预测值越多,预测出来的猫越多,即查全率确定是在增长或不变),若增长选取预测值后,recall不变,一个recall会对应两个precison值,通常选取较大的那个precision值。 若是咱们每次只增长一个预测值,就会获得大约100对(recall, precisoin)值,而后就能绘制猫的PR曲线,计算出其下方的面积,就是猫对应的AP值(Average Precision)。 若是咱们接着对狗和鸡也采用相同方法绘制出PR曲线, 就能获得猫,狗, 鸡三个AP值,取平均值即获得了整个模型最终的mAP(mean Average Precsion)。以下图中A, B, C三条PR曲线:

    目标检测:

      在目标检测中还有一个IoU(交并比、Intersection over Union、IoU), 经过比较检测bbox和真实bbox的IoU来判断是否属于TP(True Positive

),例如设置IoU阈值为0.7,则IoU大于0.7的则断定为TP,不然为FP。所以当咱们设置不一样的IoU阈值时,也会获得不一样的mAP值,再将这些mAP值进行平均就会获得mmAP,通常不作特别说明mmAP即指一般意义上的mAP。

      所以目标检测mAP计算方法以下:给定一组IOU阈值,在每一个IOU阈值下面,求全部类别的AP,并将其平均起来,做为这个IOU阈值下的检测性能,称为mAP(好比mAP@0.5就表示IOU阈值为0.5时的mAP);最后,将全部IOU阈值下的mAP进行平均,就获得了最终的性能评价指标:mmAP。

 

   ROC曲线与AUC:

    除了绘制PR曲线,计算AP,有时候也会绘制ROC曲线,计算AUC。(参考文章

    ROC(receiveroperating characteristic):接受者操做特征,指的是TPR和FPR间的关系,纵坐标为TPR, 横坐标为FPR, 计算公式以下:

    AUC(area under curve):表示ROC曲线下的面积。

 

 

 参考:https://zhuanlan.zhihu.com/p/43068926

    https://zhuanlan.zhihu.com/p/55575423

    https://zhuanlan.zhihu.com/p/70306015

    https://zhuanlan.zhihu.com/p/30953081

 

 2. FLOPs (浮点运算数)

      FLOPs:(Floating Point Operations)  s小写,指浮点运算数,理解为计算量。能够用来衡量算法/模型的复杂度。(模型) 在论文中经常使用GFLOPs(1 GFLOPs = 10^9 FLOPs)

     FLOPS: (Floating Point operations per second), S大写, 指每秒浮点运算的次数,能够理解为运算的速度,是衡量硬件性能的一个指标。

    通常计算FLOPs来衡量模型的复杂度,FLOPs越小时,表示模型所需计算量越小,运行起来时速度更快。对于卷积和全链接运算,其公式以下:

    另外,MAC(memory access cost, 内存访问成本)也会被用来衡量模型的运行速度, 通常MAC=2*FLOPs (一次加法运算和一次乘法算法):

    有一个基于pytorch的torchstat包,能够计算模型的FLOPs数,参数大小等指标,示例代码以下:

from torchstat import stat
import torchvision.models as models

model = model.alexnet()
stat(model, (3, 224, 224))

 

3. 模型参数大小

   经常使用模型的参数所占大小来衡量模型所需内存大小,通常可分为Vgg, GoogleNet, Resnet等参数量大的模型,和squeezeNet,mobilerNet,shuffleNet等参数量小的轻量级模型,经常使用一些模型的参数量和FLOPs以下:

 

 

 

 

    最后还有一张模型运算量(FLOPs), 参数大小(圆圈的面积),表现效果(Accuracy)的关系图以下:

 

 

 

参考:https://www.zhihu.com/question/65305385

     https://zhuanlan.zhihu.com/p/67009992

相关文章
相关标签/搜索