pytorch 从头开始YOLOV3(四):测试

本文详细介绍了如何在PyTorch中实现YOLOV3的mAP(平均精度均值)计算,包括精确率(Precision)和召回率(Recall)的计算方法。通过理解IOU矩阵和匹配真值框,以及按照VOC标准取11个recall点计算平均精确率来确定AP值。
摘要由CSDN通过智能技术生成

本文实现了mAP函数,其中计算了精确率(Precision),召回率(Recall)

首先需要了解mAP的概念和计算方式.

具体原理可以查看:https://www.cnblogs.com/lixiunan/articles/9566627.html

https://tarangshah.com/blog/2018-01-27/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models/

以下为参考上文的代码实现,最好配合上文一起理解.

1.recall-precious

def calc_detection_voc_prec_rec(pred_bboxes, pred_labels, pred_scores, gt_bboxes, gt_labels,
                                gt_difficults=None, iou_thresh=0.5):
    '''
    输入为pred_bboxes(total_image,N,4)
    gt_bboxes(total_image,M,4)
    '''
    # 存放每一类真值标签个数,用于计算recall
    gt_number = np.zeros(opt.classes)
    # 用于存储预测窗口是否正确TP
    TP_FP = defaultdict(list)
    # 用于存储预测窗口的置信度
    pred_score_all = defaultdict(list)
    for i in range(len(gt_labels)):
        # 取出每一个图像中的预测和真值
        pred_bbox, pred_label, pred_score, gt_bbox, gt_label = pred_bboxes[
            i], pred_labels[i], pred_scores[i], gt_bboxes[i], gt_labels[i]
        pred_bbox = np.array(pred_bbox)
        pred_label = np.array(pred_label)
        pred_score = np.array(pred_score)
        gt_difficult = np.zeros(gt_bbox.shape[0], dtype=bool)

        # 用于计算每一类中预测窗口的TP
        for l in np.unique(np.concatenate((pred_label, gt_label)).astype(int)):
            # 选出该图像中的l类预测和真值
            gt_bbox_l = gt_bbox[gt_label == int(l)]
            gt_label_l = gt_label[gt_label == int(l)]
            if len(pred_bbox) == 0:
                continue
            pred_bbox_l = pred_bbox[pred_label == int(l)]
            pred_score_l = pred_score[pred_label == int(l)]
            pred_label_l = pred_label[pred_label == int(l)]

            pred_score_all[l].extend(pred_score_l)
            if len(pred_bbox_l) == 0:
                continue
            if len(gt_bbox_l) == 0:
                TP_FP[l].extend(np.zeros(len(pred_label_l)))
                continue
            # 计算每一类真值标签个数
            gt_number[l] += len(gt_bbox_l)
            # 计算iou(N,M) N为预测bbox大小,M为真值bbox大小
            iou = bbox_iou2(pred_bbox_l, gt_bbox_l)
            # pred_label_l.shape == pre_index.shape
            # 找到预测标签与所有真值标签中iou最大值
            pre_index = iou.argmax(axi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值