1. mAP
1.1 基本概念
IoU
IoU的定义:预测框和真实框的交并比。
IoU用来定义正负样本,若IoU>threshold,则为正样本;若IoU<=threshold,则为负样本。
Precision & Recall
查准率:预测为正且预测对的样本与所有预测为正的样本之比。
Precision=TPTP+FPPrecision=frac{TP}{TP+FP}
查全率:预测为正且预测对的样本与所有实际为正的样本之比。
Recall=TPTP+FNRecall=frac{TP}{TP+FN}
1.2 mAP计算流程
当一个数据集通过我们的目标检测算法,得到了预测的框和预测的类别。接下来,我们就需要通过计算IoU来判定这些预测框的正负性,以及经过mAP来判定我们算法的好坏。
举例说明
Image1,2预测猫猫类别。红框为预测框,绿框为真实框。百分数为预测猫猫置信度。
根据置信度降序进行排序。将IoU>0.5的预测框置为TP,IoU<=0.5的预测框置为FP。
计算每个置信度阈值下的Precision和Recall:例如,confidence>=88%时,所有数据集中,(将confidence<88%的预测框忽略掉。多个预测框对应同一个GT,则置信度最高的那个视为TP,其他的视为FP)TP=1,FP=1,FN=2,因此Precision=1/2,Recall=1/3。
绘制出P-R曲线图,然后计算P-R曲线面积作为AP值。
计算步骤
0.选用较低的置信度阈值来筛选网络的预测框。使用nms去除高度重复的框。
1.根据置信度降序,并根据IoU阈值判定TP、FP、FN。
2.计算不同置信度阈值下的Precision和Recall,绘制P-R曲线。
3.P-R曲线面积即为AP值。
4.计算完每个类的AP值求平均即为mAP。
COCO数据集的mAP
COCO数据集的”AP”是对不同的IoU阈值
的AP值取平均,再对类别
取平均得到最终的mAP(在COCO中mAP也叫AP)。
2. NMS 算法
NMS发生在目标检测算法的最后一步,计算mAP的前一步。
NMS 步骤
(1) 将某一类别的bbx按照confidence从高到低排序。
(2) 记录当前confidence最大的bbx。
(3) 计算最大confidence对应的bbx与剩下所有的bbx的IoU,移除所有大于IoU阈值的bbx(保留小于IoU阈值的bbx索引)。
(4) 对剩下的bbx,循环执行(2)和(3)直到所有的bbx均满足要求(即不能再移除bbx)。
(5) 对每个类依次进行(1)~(4)操作。
(6) 跨种类比较,如果该框在多类别中都是较大confidence,保留最大confidence。
3. Focal loss
我们首先了解一点,机器都是通过降低loss来达到最终的拟合。那么如果故意增大某一个loss的权重,就会使机器偏向于学习这部分的特征以降低这部分loss,最终提高了机器的在这方面的性能。
3.1 控制难易样本对loss的贡献
图1 绘制不同γ下的FL损失函数。横坐标为目标的预测概率pt,纵坐标为损失值。
当γ=0gamma=0时,FL=CE为二分类交叉熵损失函数。当前面加上了调制系数(1−pt)γ(1-p_t)^gamma,我们就可以通过这个系数来控制难易样本对loss的贡献程度:
当目标预测概率为pt=0.9p_t=0.9时(pt∈[0,1]p_t∈[0,1]),我们可以说这是一个易区分的样本,得知(1−pt)γ(1-p_t)^gamma非常接近于0,FL的结果是非常接近0的,降低易区分样本的损失值。
当目标预测概率为pt=0.1p_t=0.1时,我们可以说这是一个难区分的样本,得知(1−pt)γ(1-p_t)^gamma非常接近于1,FL的结果是接近无限大的,增加难区分样本的损失值。
通过设计Focal Loss,降低易区分样本对loss的贡献,加大难区分样本对loss的贡献,最终使网络更加关注那些难区分的样本,从而提高网络的预测能力。
3.2 控制正负样本对loss的贡献
目标检测中往往负样本的数量远远大于正样本,这会导致网络将大部分的精力财力耗在了大量的负样本上,对最终的检测效果将是不利的,因此我们可以想到降低负样本对loss的贡献,增大正样本对loss的贡献,使网络对正负样本的关注度做一个权衡。
于是FL前又添加了一个权重因子αtalpha_t控制正负样本对loss的贡献:
FL(pt)=−αt(1−pt)γlog(pt)FL(p_t)=-alpha_t(1-p_t)^gamma log(p_t) αt∈[0,1]alpha_t∈[0,1]
正样本,αt=αalpha_t=alpha,一般取0.75。
负样本,αt=1−αalpha_t=1-alpha,则为0.25。