<div class="._5ce-wx-style" style="font-size:16px;">
<div class="rich_media_content" id="js_content">
<p>最近在处理检测问题的时候,需要对网络参数进行评估,之前对mAP的详细细节没有深入了解,这里记录一下</p>
<p>-----------------------</p>
<p>准确率(accuracy),精确率(precision),召回率(recall)</p>
<p>MeanAverage Precision(平均精确率),即mAP</p>
<p>Precision=TP/(TP+FP)</p>
<p> TP(检测为P, 实际为p ,检测正确,P->P) TruePostive</p>
<p> FP(检测为P,实际为N,检测错误,N->P) False Postive</p>
<p>即Precision 为检测认为是P的样本里,真实为P的概率,即检测结果哩的真实率 </p>
<p>Recall =TP/(TP+FN) </p>
<p> TP(检测为P,检测正确,实际为正,P->P) True Postive</p>
<p> FN(检测为N,检测错误,说明实际为正,被检测为负,即漏掉了P->N) False Negive</p>
<p>即Recall 为检测认为是P的样本哩占全部真实为P的概率,即反映了查全率</p>
<p>假如原图中有10张人脸,检测到12张人脸,其中正确的人脸为8张,错误的为4张,则漏检的2张。</p>
<p>TP= 8, FP=4, Precision=66.7% 期望Precision越高越好,即错检测的尽可能少</p>
<p>TP=8, FN=2, Recall =80% 即检测的查全率为80% 希望越多越好。</p>
<p>Precision:根据上述方法,对于某个类别A,我们先计算每张图片中A类别TP和FP的数量,并遍历所有图像对其进行累加,即可得到类别A在整个数据集中TP和FP的数量,计算TP/(TP+FP)即可得到类别A的Precision (计算Precision的时候只需要用到TP和FP),但是会发现Precision的数值是受模型预测出的边界框的数量(上述计算式的分母部分,即我们认为的检测出的Postive的样本的数量)影响的,如果我们控制模型输出预测框的数量,就可以得到不同的Precision,所以我们可以设置不同的score阈值,最终得到不同数量的TP和FP。</p>
<p>Recall:对于某个类别A,按上述方法进行累加TP的数量,计算TP/(n_gt)即可得到Recall,其中n_gt表示类别A在所有图片中gt的数量之和。同理,如果控制模型输出的预测框的数量,就会改变TP的数量,也就会改变Recall的值</p>
<p>综上,想要得到PR曲线,可以通过改变score的阈值来控制模型输出的预测框数量,从而得到不同的TP、FP、FN。不过在实际操作中,并不需要手动来设置score的阈值,因为每个预测框都有一个score,我们只需要将其按从小到大进行排序,然后每次选择最后一个score作为阈值即可,这样如果类别A在所有图片中的预测框数量之和有100个,就可以计算100组类别A的Precision-Recall值。</p>
<p>假设现在数据集中一共有5张图片,</p>
<p>①第1张图片中有2个A类别的gt,有三个A类别的预测框,score分别为(0.3, 0.5, 0.9),按照上述计算TP的方法(按score从大到小的顺序匹配)发现score为0.3和0.9的与gt相匹配,则将这两个记为TP。建立用于计算PR曲线的数组metric和记录A类别gt总数的变量ngt,向数组中加入(0.3, 1), (0.5, 0), (0.9, 1)三组</p>
<p>数据(每组数据的第一个代表预测框的score,第二个代表这个预测框是否是TP),并将n_gt累加2;使用相同的方法计算接下来的几张图片,</p>
<p>(0.3,1)(0.5, 0)(0.9,1) gt=2</p>
<p>②第2张图片中没有A类别的物体(gt数量为0),则n_gt+=0,但有一个关于A类别的预测框,score为0.45,则向metric中加入(0.45, 0);</p>
<p>(0.3,1)(0.5, 0)(0.9,1)(0.45, 0) gt=2</p>
<p>③第3张图片中有1个A类别的物体,但没有预测框,则n_gt+=1;</p>
<p>(0.3,1)(0.5, 0)(0.9,1)(0.45, 0) gt=3</p>
<p>④第4张图片中有3个A类别的物体,有5个预测框,其中有3个与gt相匹配,最终n_gt+=3,metric中加入(0.85, 1), (0.8, 1), (0.7, 1), (0.35, 0), (0.1, 0);</p>
<p>(0.3,1)(0.5, 0)(0.9,1)(0.45, 0) (0.85, 1), (0.8, 1), (0.7, 1), (0.35, 0), (0.1, 0) gt=6</p>
<p>⑤第5张图片中没有A类别的物体,也没有A类别的预测框。</p>
<p>(0.3,1)(0.5, 0)(0.9,1)(0.45, 0) (0.85, 1), (0.8, 1), (0.7, 1), (0.35, 0), (0.1, 0) gt=6</p>
<p>对score进行从大到小排序,之所以使用由大向小排列是因为判断条件为>=score,是因为小的阈值向上兼容大的阈值</p>
<p> accTP accFP precition recall</p>
<p>(0.9, 1) 1 0 1/1 1/6 </p>
<p> #score =0.9 正确分类1个(0.9, 1),错分0个. </p>
<p> precision=1/(1+0)=1, recall =1/6</p>
<p>(0.85,1) 2 0 2/2 2/6 </p>
<p> #score =0.85 正确分类2个(0.85,1)(0.9,1),错分0个. </p>
<p> precision=2/(2+0)=1, recall =2/6</p>
<p>(0.8, 1) |
|