[代码解析]如何计算TP和FP

相关文件:py/metrics/map/voc_map.py

前提条件

  • 获取所有的预测边界框信息({"confidence": "0.999", "file_id": "cucumber_61", "bbox": [16, 42, 225, 163]}
  • 按置信度从大到小排序:value.sort(key=lambda x: float(x['confidence']), reverse=True)

TP/FP

下面计算每个预测边界框对应的是TP还是FP

  • 首先创建列表tpfp,其长度等同于边界框个数,默认为0
  • 遍历每一个边界框(在之前已按置信度从大到小排序
  • 计算该预测边界框与对应文件中的标注文件框的IoU
  • 判断其最大IoU是否超过IoU阈值(默认为0.5
    • 若超过
    • 判断对应的真值边界框是否已被使用(在它之前是否存在符合IoU>=Thresh_IoU的情况)
      • 若未被使用,则设置为TP, tp[idx]=1
      • 若已被使用,则设置为FP, fp[idx]=1
    • 若未超过,则设置为FP, fp[idx]=1