常见的评价指标有交并比(iou及改进),准确率,精度,召回率,FPR,F1-Score,PR曲线-AP值,ROC曲线-AUC值,mAP值和FPS
✨ 1 交并比
假设有两个矩形,分别为A和B:
则交并比公式:
即A交B比A并B。
代码实现:
主函数
eps = torch.finfo(torch.float32).eps bboxes1_area = (bboxes1[..., 2] - bboxes1[..., 0]).clamp_(min=0) * (bboxes1[..., 3] - bboxes1[..., 1]).clamp_(min=0) bboxes2_area = (bboxes2[..., 2] - bboxes2[..., 0]).clamp_(min=0) * (bboxes2[..., 3] - bboxes2[..., 1]).clamp_(min=0) w_intersect = (torch.min(bboxes1[..., 2], bboxes2[..., 2]) - torch.max(bboxes1[..., 0], bboxes2[..., 0])).clamp_(min=0) h_intersect = (torch.min(bboxes1[..., 3], bboxes2[..., 3]) - torch.max(bboxes1[..., 1], bboxes2[..., 1])).clamp_(min=0) area_intersect = w_intersect * h_intersect area_union = bboxes2_area + bboxes1_area - area_intersect ious = area_intersect / area_union.clamp(min=eps)
bboxes1_area和bboxes2_area即bboxes1和bboxes2即面积。
w_intersect和h_intersect是bboxes1和bboxes2相交部分的宽和高,比如(torch.min(bboxes1[…, 2], bboxes2[…,2])即在x1_max和x2_max中找到较小的,即相交部分的右下角x轴坐标,其余同理。
area_intersect即计算相交面积。
area_union计算A并B的面积。 clamp函数规定下限。
👻 1.2 giou
✨ 2 precision(精度)和recall(召回率)
在论文里面经常会遇到precision(精度)和recall(召回率),下面进行介绍。
首先,我们要了解一下混淆矩阵,其中包含四个元素:
TP(True Positive):真正例,即实际为正样本且被预测为正样本的数量。
FN(FalseNegative):假反例,即实际为正样本但被预测为负样本的数量。
TN(TrueNegative):真反例,即实际为负样本且被预测为负样本的数量。
FP(FalsePositive):假正例,即实际为负样本但被预测为正样本的数量。
利用该混淆矩阵,可以==计算precision和recall==。 ****
precision表示模型预测为正类的样本中,实际上真正属于正类的比例,公式为:
精确率越高:说明模型在预测正类样本时的准确性越高,即预测为正类的样本中,真正属于正类的比例越大。这意味着模型在区分正类和负类方面表现得更好,误报率较低。但精确率忽略了实际为正类的样本中,被模型漏报(即预测为负类)的情况。
recall表示实际为正类的样本中,被模型正确预测为正类的比例,公式为:
召回率越高:说明模型在识别正类样本方面的效果越好,即实际为正类的样本中,被正确预测为正类的比例越大。这意味着模型在捕捉正类样本方面表现得更好,漏报率较低。但召回率忽略了模型预测为正类的样本中,实际上属于负类(即误报)的情况。
精确度和召回率之间的关系:
当精确度升高,即模型更加严格地预测正类时,可能将更多的正样本预测为负样本,那么实际为正样本中预测正确的就变少了,则召回率降低。
反之同理。
(这也体现了,两个各自忽略的即对方关注的)
✨ 3 AP和mAP
从第二节我们知道了精准度和召回率之间的关系,如上图PR曲线所示。
两个部分都有关注与忽略的地方,那么如何将两者结合平衡呢?
PR曲线下方的面积即是一种方案,称为AP值。
mAP就是对所有类AP值取平均值。
👻 3.1 具体计算
- 剔除类别置信度低的预测框(每个包含目标预测框都有一个包含目标类别的分数预测),一般为0.5。
- 计算预测框与GT的IOU。IOU>0.5设置为TP,IOU<=0.5设置为FP,没有检测到的GT的数量设置为FN
- 计算recall和precision
- 计算PR曲线面积,下面是一个计算示例(某点函数值代替某段函数值)