一:准确率(Accuracy)、错误率 (Error rate)

准确率 = 正确分类的样本数 / 总样本数

错误率 = 错误分类的样本数 / 总样本数  =  1 - 准确率

Top-1准确率:预测类别按置信度从高到低排序,取排名第一的类别作为预测结果,计算准确率

Top-5准确率:取排名前五的类别作为预测结果(只要包含真实类别,就算分类正确),计算准确率

二:混淆矩阵(Confusion Matrix)

混淆矩阵又称错误矩阵,把预测结果与真实标签按类别对应,在一个矩阵中显示出来,方便直观地评估结果。

横轴是模型预测的类别数量统计,纵轴是数据真实标签的数量统计。

对角线表示模型预测和数据标签一致的数目,所以对角线之和除以测试集总数就是准确率。对角线上数字越大越好,在可视化结果中颜色越深,说明模型在该类的预测准确率越高。

目标检测 误检高 目标检测精度和误检率_计算机视觉

三:精确率、召回率、F指标

  • 精确率(Precision)与召回率(Recall):

对于二类分类问题常用的评价指标是精确率与召回率(在信息检索领域又叫查准率与查全率)。通常以关注的类为正类,其他类为负类。二分类的混淆矩阵为:

 

预测为正类

预测为负类

正类

TP

FN

负类

FP

TP

Precision = TP/(TP+FP)

Recall     = TP/(TP+FN)

在实际使用中我们的模型通常不是直接预测出类别,而是预测出属于各类别的概率(或置信度),然后通过与阈值比较来划分正负预测结果的;阈值不同,结果就不同。这时我们可以画P-R曲线。

 

  • F指标(F-Measure, F-score):

精确率和召回率反映了分类器性能的两个方面,单一依靠某个指标并不能较为全面地评价一个分类器的性能。一般情况下,精确率越高,召回率越低;反之,召回率越高,精确率越低。为了综合考虑精确率和召回率,引入了F-score这个综合指标:

目标检测 误检高 目标检测精度和误检率_计算机视觉_02

目标检测 误检高 目标检测精度和误检率_机器学习_03

是关于召回的权重,大于1说明更看重召回的影响,小于1则更看重精度,等于1相当于两者的调和平均,通常取1。

 

  • F1指标(F1-Measure, F1-score):

目标检测 误检高 目标检测精度和误检率_机器学习_04

 

四:P-R曲线、AP、mAP

  • P-R曲线:选取不同阈值时对应的精度和召回画出来

目标检测 误检高 目标检测精度和误检率_计算机视觉_05

  • AP(Average-Precision,平均精度):P-R曲线围起来的面积,通常来说一个越好的分类器,AP值越高。
  • mAP(Mean Average Precision,平均精度均值):

所有类的AP值平均值就是mAP:

目标检测 误检高 目标检测精度和误检率_召回率_06

 

五:ROC曲线、AUC、EER

  • ROC(Receiver Operating Characteristic,受试者工作特征)

指的是TPR和FPR间的关系,纵坐标为TPR, 横坐标为FPR。

1)真正例率:True Positive Rate ( TPR ) = TP / [ TP + FN] = TP/T,代表将正例分对的概率,即查全率;

2)假正例率:False Positive Rate( FPR ) = FP / [ FP + TN] = FP/F,代表将负例错分为正例的概率。

目标检测 误检高 目标检测精度和误检率_目标检测 误检高_07

直线左下至右上代表一个完全没有效果的分类器,如果曲线在对角线左上,说明分类器有效果,在右下说明是负效果。

越靠近左上效果越好,理想的分类器对应的ROC曲线和(0,0)、(0,1)、(1,1)所在折线重合。

  • AUC(Area Under Curve):

ROC曲线下的面积,越大,分类器效果越好。

  • EER(Equal Error Rate):

指的是FNR=FPR的情况,因为FNR=1-TPR,所以在ROC曲线中就是曲线和(0,1)、(1,0)对角线(左上到右下)的交点。从漏检和误检的角度,FNR理解为对正样本的漏检率,FPR则是预测为正样本的误检率。EER是均衡考虑这两者时的阈值选定标准。

 

六:IOU、目标检测中如何判断TP,FP,FN

  • IOU(Intersection Over Union):

IOU用来衡量预测框和真实框的重合程度,即两个框的交并比:

目标检测 误检高 目标检测精度和误检率_召回率_08

 

  • 判断TP,FP,FN

以单张图某类别为例:

  1. 遍历图片中ground truth对象,提取该类别的gt objects;
  2. 读取我们对该类别的预测框,过滤掉置信度分数低于置信度阈值的框;
  3. 将剩下的预测框按置信度分数从高到低排序;
  4. 按置信度分数从高到低,依次把预测框与gt bbox比较,若iou大于设定的iou阈值计入TP,将此gt_bbox标记为已检测(后续的同一个GT的多余预测框都视为FP,这就是为什么要先按置信度排序),iou小于阈值的,计入FP。

FN通过该类GT数量减去TP即得。

有了TP,FP,FN,就可以计算目标检测中的AP,mAP。

 

  • AP值计算有3种方式:
  1. 在VOC2010以前,只需要选取当Recall >= 0, 0.1, 0.2, ..., 1共11个点时的Precision最大值,然后AP就是这11个Precision的平均值。
  2. 在VOC2010及以后,需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,然后计算PR曲线下面积作为AP值。
  3. COCO数据集,设定多个IOU阈值(0.5-0.95,0.05为步长),在每一个IOU阈值下都有某一类别的AP值,然后求不同IOU阈值下的AP平均,就是所求的最终的某类别的AP值。

 

七:速度、内存指标

  • FPS(Frame Per Second,每秒帧率):

即每秒能处理图片的张数。

另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快。

比较FPS或时间需要在同一硬件上进行,同一硬件的最大FLOPS(Floating Point operations per second,指每秒浮点运算的次数,可衡量硬件性能,此处区分FLOPs)相同。

 

  • FLOPs(Floating Point Operations,浮点运算数) :

指浮点运算数,理解为计算量,可以用来衡量算法/模型的复杂度。在论文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)

FLOPs越小,表示模型所需计算量越小,运行起来时速度更快。

 

FLOPs计算(以下不考虑激活函数、池化的运算):

  1. 卷积

不考虑bias:

目标检测 误检高 目标检测精度和误检率_机器学习_09

考虑bias:

目标检测 误检高 目标检测精度和误检率_目标检测 误检高_10

其中,Cin为输入特征图通道数,k为过滤器尺寸,H,W,Cout为输出特征图的高,宽和通道数。

解释:输出特征图有Cout张,每张特征图上有H*W个像素点,每个像素点的值都是由过滤器与输入特征图卷积得到的。即,过滤器中Cin*k*k个点,每个点都要和输入特征图对应点作一次相乘操作(浮点操作数为Cin*k*k),然后加起来(浮点操作数为Cin*k*k-1),再加上bias,得到输出特征图上一个像素点的值。

      2. 全连接

不考虑bias:

目标检测 误检高 目标检测精度和误检率_机器学习_11

考虑bias:

目标检测 误检高 目标检测精度和误检率_浮点_12

其中,Nin为输入神经元个数,Nout为输出神经元个数。

解释:输出的每个神经元都是由输入的每个神经元乘以权重(浮点操作数为Nin),然后把所得的积相加(浮点操作数为Nin-1),加上一个偏差(浮点操作数为1)得到。

 

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

 

  • 模型参数大小

常用模型的参数所占大小来衡量模型所需内存大小,一般可分为Vgg, GoogleNet, Resnet等参数量大的模型,和squeezeNet,mobilerNet,shuffleNet等参数量小的轻量级模型。