目标检测与图像分类不同,目标检测不仅要对检测出来的目标框正确分类,同时,还需要考虑目标框与target是否贴合。
首先我们需要知道几个常见指标:
TP (True Positive):iou>0.5的检测框数量。在上图中,绿色的框表示GT,其中cat 0.9的红色框就是TP。
FP (False Positive):iou
FN (False Negative):没有检测到的GT(ground truth)数量。上图中右下角的绿色框出现漏检了所以FN+1。
查准率:Precision:TP/(TP+FP) 模型预测的所有目标中,预测正确的比例
如上图所示,当存在5个GT时,模型仅检测出序号1,此时TP=1,FP=0,查准率是1,无法准确评定模型性能。
查全率:Recall:TP/(TP+FN) 所有真实目标中,模型预测正确的目标比例
如上图所示,模型预测的检测框超过了GT的数量,其中TP=5,FN=0,召回率=1,所以单召回率也无法准确评定模型性能。
P-R曲线:不同confidence会对应不同TP,FP,将不同confidence下Precision与Recall组成的点连接起来就形成了P-R曲线。
AP:P-R曲线下的面积;mAP:各类别AP的平均值。
下面我们具体讲解如何绘制P-R曲线并计算AP
上图我们可以看到,一共出现了7只小猫,即7个GT,把他们分别按照图上的id编号。其中id:1模型检测出两个预测框,分别是cat 0.98,cat 0.61。很明显cat 0.98与GT1的iou大于0.5,所以当confidence小于0.98时,我们就可以把cat 0.98认为是TP,而cat 0.61如果confidence设置小于0.61我们就认为是FP。id:2出现漏检所以FN+1。我们按照confidence大小将各个检测框进行排序并写入下表中。下面开始计算Precision与Recall。当confidence设置为0.98时,TP=1,FP=0,FN=6,因为只有cat 0.98置信度大于等于0.98,可以看作TP,其余检测框的置信度均小于0.98所以不存在FP,同时其余GT均视为漏检,即FN=6。所以Rank1的Precision=1,Recall=0.14。依次降低置信度,可以得到P-R的值。
将左表中的坐标连接绘制出P-R曲线,并计算出面积即AP。
结合目标检测代码来看看具体步。
给定了一个IOU阈值、并给定了一个类别,如何具体地计算检测的性能。首先,我们要先对所有的检测结果排序,得分越高的排序越靠前,然后依次判断检测是否成功。将排序后的所有结果定义为DTs,所有同类别的真实目标定义为GTs。先依序遍历一遍DTs中的所有DT,每个DT和全部GT都计算一个IOU,如果最大的IOU超过了给定的阈值,那么视为检测成功,算作TP(True Positive),并且最大IOU对应的GT被视为匹配成功;如果该DT与所有GT的IOU都没超过阈值,自然就是FP(False Positive);同时,每当一个GT被检测成功后,都会从GTs中“被取走”,以免后续的检测结果重复匹配。因此如果有多个检测结果都与同一个GT匹配,那么分数最高的那个会被算为TP,其余均为FP。遍历完成后,我们就知道了所有DTs中,哪些是TP,哪些是FP,而由于被匹配过的GT都会“被取走”,因此GTs中剩下的就是没有被匹配上的FN(False Negative)。以下是为了方便理解的代码(Python),这段代码仅用于理解,效率较低。真实代码请参考MS COCO的官方源码。
领取专属 10元无门槛券
私享最新 技术干货