mAP指标计算
mAP(mean average precision)
是目标检测算法中衡量算法识别精度的指标,在计算mAP之前,需要先了解一些前置内容:
-
准确率
在分类算法中,将分类正确的样本在所有样本中的数量比例称之为准确率。一般来说,对于数据分布均衡的样本,该指标能够正确地评估分类算法的分类效果,但是,当数据分布不均衡时,该指标便不能客观的反映分类算法的分类效果了。举个简单的例子,假设,某专业有100个学生,其中有90个男生,10个女生。此时,数据分布是极不均衡的,如果分类算法预测该专业学生全为男生,即可达到\(90\%\)的准确率,显然此分类算法明显是有极大缺陷的。故,当数据集的分布未知或分布不均衡时,请不要使用这个指标来评估分类算法的准确性。
-
混淆矩阵
混淆矩阵(Confusion Matrix)是指的这样一个矩阵,矩阵的
行
为算法预测的类别数量统计,列
为样本所属真实类别的数量统计。如上图所示,其中灰色部分的\(3\times 3\)矩阵即为一个混淆矩阵,矩阵一行一列的元素5代表实际为Cat的样本中有5个样本被分类算法预测为Cat,一行二列的元素3代表实际为Cat的样本中有3个样本被分类算法预测为Cat。显而易见的是,混淆矩阵对角线的元素表示数据集中被正确预测的样本数量,则用混淆矩阵的迹(矩阵的主对角线元素之和)除以矩阵的和即可得到分类算法的准确率。
-
精确率与召回率
精确率(Precision,P)是针对预测结果而言,用于衡量在所有预测为正的样本中,被正确预测的样本所占比例;召回率(Recall,R)是针对样本而言,用于衡量在所有为正例的样本中,被预测为正的样本所占比例。在说明二者的计算方式前,先定义几个概念:
TP(True positives)
: 被判定为正样本,实际为正样本。
TN(True negatives)
: 被判定为负样本,实际为负样本。
FP(False positives)
: 被判定为正样本,实际为负样本。
FN(False negatives)
: 被判定为负样本,实际为正样本。使用上面几个概念可以很容易得出:
\[P = \frac{TP}{TP+FP} \]\[R = \frac{TP}{TP+FN} \] -
F值
显然,模型的精确率和召回率越大,分类算法在实际数据中的表现越好,为了综合评估这两个指标,定义二者的调和平均值为F值:
当精确率和召回率都很高时,F值也会很高。而在某些情景下,可能会相对更重视另一个指标,此时加入一个参数\(\beta\)来度量二者的关系,此时的F值定义为:
- 特异性、1-特异度、灵敏度
特异性(specificity,S)是实际负样本中被正确预测的样本所占比例:
1-特异度(false positive rate,FPR)是实际负样本中,被错误得识别为正样本的负样本比例:
灵敏度(true positive rate,TPR)是所有正样本中,正确识别的正样本比例,与召回率定义相同:
-
平均精度(AP)
-
IOU
-
ROC曲线与PR曲线
理解了精确率、召回率和特异性的概念,下面来介绍ROC和PR曲线:
ROC(Receiver Operating Characteristic)曲线
是指以灵敏度TPR为纵轴,以1-特异度为横轴绘制的曲线,从FPR和TPR的定义可以理解,TPR越高,FPR越小,我们的模型和算法就越高效。也就是画出来的RoC曲线越靠近左上越好,如下图左图所示。从几何的角度讲,ROC曲线下方的面积越大,则模型越优。ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。基于ROC曲线的这种特性,所以采用ROC曲线下的面积,即AUC(Area Under Curve)
值来作为衡量算法和模型好坏的标准,能很好的应对各种复杂情形下模型评估工作。ROC曲线绘制:
-
根据每个测试样本属于正样本的概率值从大到小排序;
-
从高到低,依次将
Score
值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本; -
每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。
当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。
AUC计算:
先考虑连续情况下的AUC,假设模型的ROC曲线函数表达式为:
\[f(x),x \in [\alpha,\beta] \]则此时的AUC为:
\[AUC=S(x)= \int^\beta_{\alpha}f(x)dx \]再考虑离散情况下使用梯形公示对定积分进行近似计算:
\[AUC = S(n)=\sum_{i=2}^{n}\frac{(x_i-x_{i-1})(y_i+y_{i+1})}{2} \]由于TPR倾向于正例、FPR倾向于负例。使得ROC曲线能较为均衡的评估分类算法,特别是对于数据样本类别不均衡的情况。
以精确率P为纵轴,召回率R为横轴,我们就得到了PR曲线。仍然从精确率和召回率的定义可以理解,精确率越高,召回率越高,我们的模型和算法就越高效。也就是画出来的PR曲线越靠近右上越好,如上图右图所示。由于PR曲线的正确率和召回率都聚焦于正例,对于主要关心正例的类别不平衡问题,PR曲线比ROC曲线有更好的表现。
-
-
AP(Average-Precision)与mAP(mean Average Precision)
AUC是AOC曲线的曲线下面积,而AP则是PR曲线的曲线下面积,根据PR曲线的定义,当PR曲线越靠近坐标系的右上方,PR曲线下面积越大,模型越高效。基于AP,
mAP是多个类别AP的平均值
,比较直观的,AUC、AP、mAP三者都属于\([0,1]\),并且越接近于1越好。 -
非极大值抑制算法(Non-Maximum Suppression)
在目标检测算法中,为了保证物体的召回率,在Faster RCN或者SSD网络的计算输出中,对于同一个真实物体都会对应生成多个候选框,每个候选框都有各自的置信度。显然,我们更期望模型输出置信度最高的候选框,即抑制掉置信度为非极大值的候选框,将重复冗余的预测去掉。非极大值抑制,顾名思义就是抑制不是极大值的边框,也就是直接去掉冗余的边框。非极大值抑制算法涉及两个关键过程:
- 置信度:NMS假设一个候选框的置信度越高,这个候选框就要被优先考虑,其它与其重叠超过一定程度的候选框要被舍弃,非极大值指候选框置信度的非极大值。
- IOU:在评估两个候选框的重叠程度时,NMS一般使用IOU。当两个候选框的IOU超过一定阈值时,置信度低的候选框会被舍弃。一般来说,阈值通常会取0.5或者0.7。
NMS存在一个非常简约的实现方法,算法输入包含了所有预测框的得分、左上点坐标、右下点坐标一共5个预测量,以及一个设定的IOU阈值,流程如下:
-
按照得分,对所有边框进行降序排列,记录下排列的索引order,并新建一个列表keep,作为最终筛选后的边框索引结果。
-
将排序后的第一个边框置为当前边框,并将其保留到keep中,再求当前边框与剩余所有框的IoU。
-
在order中,仅仅保留IoU小于设定阈值的索引,重复第(2)步,直到order中仅仅剩余一个边框,则将其保留到keep中,退出循环,NMS结束。
NMS方法虽然简单有效,但在更高的物体检测需求下,也存在如下4个缺陷:
-
最大的问题就是将得分较低的边框强制性地去掉,如果物体出现较为密集时,本身属于两个物体的边框,其中得分较低的也有可能被抑制掉,从而降低了模型的召回率。
-
阈值难以确定。过高的阈值容易出现大量误检,而过低的阈值则容易降低模型的召回率,这个超参很难确定。
-
将得分作为衡量指标。NMS简单地将得分作为一个边框的置信度,但在一些情况下,得分高的边框不一定位置更准,因此这个衡量指标也有待考量。
-
速度:NMS的实现存在较多的循环步骤,GPU的并行化实现不是特别容易,尤其是预测框较多时,耗时较多。
-
IOU
IOU是目标检测中的一个重要概念,一般指模型预测的bbox(表征图形中对象位置的矩形框)和Groud Truth(表征训练数据中已经标注的矩形框)之间的交并比。关于IOU的进一步说明和计算推导,在此不做进一步展开,感兴趣的读者可以参考我的另一片博文目标检测:IOU计算。