检测精度评价指标为:
1、召回率(Recall Rate ) 2、平均精度均值(mAP) 3、平均对数漏检率(MR-2)
计算 TP 和 FP 的示例
假设你有一个目标检测模型,并使用它检测图像中的目标。你需要计算 TP 和 FP 以评估模型的性能。我们假设有以下数据:
- ground_truth: 实际的目标位置。
- detections: 模型检测到的目标位置。
import cv2
import numpy as np# 这是一个假设的 ground_truth 和 detections 数据
ground_truth = [(50, 50, 100, 100), # 真实的目标区域(200, 200, 250, 250)
]detections = [(55, 55, 105, 105), # 检测到的目标区域(TP)(60, 60, 110, 110), # 检测到的目标区域(TP)(210, 210, 260, 260),# 检测到的目标区域(TP)(300, 300, 350, 350) # 错误检测到的目标区域(FP)
]# 计算 IoU(Intersection over Union)
def compute_iou(box1, box2):x1, y1, x2, y2 = box1x1g, y1g, x2g, y2g = box2xi1 = max(x1, x1g)yi1 = max(y1, y1g)xi2 = min(x2, x2g)yi2 = min(y2, y2g)inter_area = max(0, xi2 - xi1) * max(0, yi2 - yi1)box1_area = (x2 - x1) * (y2 - y1)box2_area = (x2g - x1g) * (y2g - y1g)union_area = box1_area + box2_area - inter_areaiou = inter_area / union_areareturn iou# 设置 IoU 阈值
iou_threshold = 0.5# 初始化 TP 和 FP 计数器
TP = 0
FP = 0# 遍历检测结果并计算 TP 和 FP
for detection in detections:is_tp = Falsefor gt in ground_truth:iou = compute_iou(detection, gt)if iou >= iou_threshold:is_tp = Truebreakif is_tp:TP += 1else:FP += 1print(f'True Positives (TP): {TP}')
print(f'False Positives (FP): {FP}')
解释
- 计算 IoU:
compute_iou
函数计算两个边界框之间的 IoU(Intersection over Union),用于判断检测结果是否与真实目标匹配。 - 设置阈值:设置一个 IoU 阈值(如 0.5),超过该阈值则认为检测结果是一个 TP。
- 遍历检测结果:对于每个检测结果,计算其与所有 ground truth 的 IoU,如果有一个超过阈值,则认为该检测结果是 TP,否则为 FP。
补充:
- 真正例(True Positive, TP):
解释:模型正确地将正类别样本预测为正类别。
例子:在疾病诊断中,一个病人实际患有疾病,模型也预测他患有疾病。
- 假正例(False Positive, FP)
解释:模型错误地将负类别样本预测为正类别。
例子:在垃圾邮件检测中,一个正常的邮件被模型错误地标记为垃圾邮件。
- 真负例(True Negative, TN)
解释:模型正确地将负类别样本预测为负类别。
例子:在疾病诊断中,一个病人实际上没有患病,模型也预测他没有患病。
- 假负例(False Negative, FN)
解释:模型错误地将正类别样本预测为负类别。
例子:在疾病诊断中,一个病人实际患有疾病,但模型预测他没有患病。
这些指标在评估分类模型时非常重要,因为它们可以用来计算更复杂的性能指标,如准确率(Accuracy)、召回率(Recall)或敏感度、精确率(Precision)、F1分数等。例如:
准确率:分类正确的样本占总样本数的比率:计算公式为:(TP+TN)/(TP+TN+FP+FN)
召回率:正类别中被正确预测的样本比例;计算公式为TP/(TP+FN)
精确率:被预测为正类别中实际为正类别的样本比例;计算公式为:TP/(TP+FP)
F1分数:精确率和召回率的调和平均数,计算公式为2×(精确率×召回率)/(精确率+召回率)