导航:
1. keras版的mask rcnn环境配置https://blog.csdn.net/hesongzefairy/article/details/104702119
2. keras版的mask rcnn训练自己的数据集https://blog.csdn.net/hesongzefairy/article/details/105738318
3. 一文理解精确率Precision、召回率Recall以及ROC曲线https://blog.csdn.net/hesongzefairy/article/details/104295431
之前的两篇文章已经对mask rcnn的用法做了详细介绍,那么还剩最后一个任务,对目标检测模型评价其性能所用到的指标,PR曲线怎么画,AP、mAP(mean Average Precision)怎么计算?
首先在概念上应该有导航3的基础,本文再简单的解释一下TP、FP、TN、FN
T为True,表示检测类别正确 F为False,表示检测类别错误
P为Positive,表示正样本 N为Negative,表示负样本
TP为True Positive,表示检测正确的正样本
FP为False Positive,表示检测错误的正样本
TN为True Negative,表示检测正确的负样本
FN为False Negative,表示检测错误的负样本
在mAP的计算过程中,会用到TP、FP、FN
计算mAP,首先需要计算precision和recall
精确率Precision:
又称查准率,能够体现模型分类为正样本的数量中分类正确的比例,分母靠预测值决定。
正样本的预测数/被预测为正样本的数量(包含错误预测为正样本的负样本)
召回率Recall:
又称查全率,即上述的TPR。
分类正确的样本书/正样本的数量
计算出precision和recall之后,就可以调整阈值来获取一组组的(P,R)点,绘制出PR曲线,进一步计算出AP和mAP
那么在代码中如何实现:
在utils中有一个函数compute_ap()是专门用来计算AP的,可以看一下源码
def compute_ap(gt_boxes, gt_class_ids, gt_masks,
pred_boxes, pred_class_ids, pred_scores, pred_masks,
iou_threshold=0.5):
"""Compute Average Precision at a set IoU threshold (default 0.5).
Returns:
mAP: Mean Average Precision
precisions: List of precisions at different class score thresholds.
recalls: List of recall values at different class score thresholds.
overlaps: [pred_boxes, gt_boxes] IoU overlaps.
"""
函数需要的输入是:
gt_boxes:读取json文件中mask并生成相应的bounding box(目标数量,4)
gt_class_ids:读取json文件中的目标类别(目标数量,)
gt_masks:读取json文件中的mask边缘坐标点生成mask(512,512,目标数量)
pred_boxes:模型预测生成的box(目标数量,4)
pred_class_ids:模型预测生成的