mmdetection输出precision指标(VOC数据集)

本文指导如何在使用VOC数据集训练MMDetection模型时,获取并显示precision指标。只需修改mean_ap.py中的print_map_summary函数,同时提供手动计算混淆矩阵的方法以评估模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用VOC格式数据集训练mmdetection模型时,测试只输出recall和AP。想要输出precision指标,其实很简单,实际上mmdet/core/evaluation/mean_ap.py的eval_map()函数中已经得到了precision的值并写入了字典,通过修改print_map_summary()函数打印出来即可。

在mmdet/core/evaluation/mean_ap.py中,找到print_map_summary()函数,添加几行代码:

def print_map_summary(mean_ap,
                      results,
                      dataset=None,
                      scale_ranges=None,
                      logger=None):
    """Print mAP and results of each class.

    A table will be printed to show the gts/dets/recall/AP of each class and
    the mAP.

    Args:
        mean_ap (float): Calculated from `eval_map()`.
        results (list[dict]): Calculated from `eval_map()`.
        dataset (list[str] | str | None): Dataset name or dataset classes.
        scale_ranges (list[tuple] | None): Range of scales to be evaluated.
        logger (logging.Logger | str | None): The way to print the mAP
            summary. See `mmcv.utils.print_log()` for details. Default: None.
    """

    if logger == 'silent':
        return

    if isinstance(results[0]['ap'], np.ndarray):
        num_scales = len(results[0]['ap'])
    else:
        num_scales = 1

    if scale_ranges is not None:
        assert len(scale_ranges) == num_scales

    num_classes = len(results)

    recalls = np.zeros((num_scales, num_classes), dtype=np.float32)
    precisions = np.zeros((num_scales, num_classes), dtype=np.float32)  #定义
    aps = np.zeros((num_scales, num_classes), dtype=np.float32)
    num_gts = np.zeros((num_scales, num_classes), dtype=int)
    for i, cls_result in enumerate(results):
        if cls_result['recall'].size > 0:
            recalls[:, i] = np.array(cls_result['recall'], ndmin=2)[:, -1]
        if cls_result['precision'].size > 0:
            precisions[:, i] = np.array(cls_result['precision'], ndmin=2)[:, -1]  #添加值
        aps[:, i] = cls_result['ap']
        num_gts[:, i] = cls_result['num_gts']

    if dataset is None:
        label_names = [str(i) for i in range(num_classes)]
    elif mmcv.is_str(dataset):
        label_names = get_classes(dataset)
    else:
        label_names = dataset

    if not isinstance(mean_ap, list):
        mean_ap = [mean_ap]

    header = ['class', 'gts', 'dets', 'recall', 'precision', 'ap']  #打印precision标题
    for i in range(num_scales):
        if scale_ranges is not None:
            print_log(f'Scale range {scale_ranges[i]}', logger=logger)
        table_data = [header]
        for j in range(num_classes):
            row_data = [
                label_names[j], num_gts[i, j], results[j]['num_dets'],
                f'{recalls[i, j]:.3f}', f'{precisions[i, j]:.3f}', f'{aps[i, j]:.3f}'  #打印precision的值
            ]
            table_data.append(row_data)
        table_data.append(['mAP', '', '', '', '', f'{mean_ap[i]:.3f}'])  #多加个''对齐
        table = AsciiTable(table_data)
        table.inner_footing_row_border = True
        print_log('\n' + table.table, logger=logger)

另外,除了这种方法,实际上根据混淆矩阵也可以手算得到precision。

tools/analysis_tools/confusion_matrix.py可以得到混淆矩阵,但在这之前先使用test.py得到pkl文件,根据pkl文件计算混淆矩阵。但还是需要经过一些修改,confusion_matrix.py得到的混淆矩阵中的数值是经过归一化了的,可以在166行改成不进行归一化,分母删掉就行。然后211行打印%去掉,这样输出的混淆矩阵,就可以用来手算各种指标了,TP、FP、TN、FN、F1-Score、Precision、Recall、ACC等都可以根据公式计算。

### 回答1: mmdetection是一个用于目标检测任务的开源框架,它提供了一系列常用的评价指标,用于评估训练模型的性能和准确率。 mmdetection主要包括以下几个评价指标: 1. 平均精度均值(mAP):mAP是目标检测任务中最常用的评价指标之一。它计算了检测模型在不同IOU阈值下的平均精度,并综合考虑了检测框的准确性和召回率。 2. Precision-Recall 曲线(PR 曲线):PR曲线展示了在不同阈值下模型的召回率和准确率之间的关系,可以帮助了解模型的性能表现。 3. IoU(Intersection over Union):IoU是指预测框(Detection)与真实框(Ground Truth)之间的交并比。IoU通常被用来计算检测模型预测的准确度,当IoU大于设定阈值时,认为该预测框与真实框匹配。 4. Recall(召回率):召回率是指模型能够正确检测到所有正样本的能力。召回率越高,说明模型的检测能力越强。 5. Precision(精确度):精确度是指模型正确检测到的正样本与所有检测到的样本之间的比例。精确度越高,说明模型的误检率越低。 6. F1-Score:F1-Score综合了精确度和召回率两个指标。它是二者的调和平均数,能够更好地评估模型的性能。 通过对这些指标的评估,可以综合分析模型的准确性和鲁棒性,为模型的优化和改进提供指导和依据。 ### 回答2: MMDetection是一个用于目标检测的开源项目,它提供了一种将深度学习模型与目标检测任务结合的框架。评价指标是衡量模型性能的标准,可以用来比较不同模型的准确性和鲁棒性。 在MMDetection中,常用的评价指标包括精确率(Precision)、召回率(Recall)和F1值。精确率是指模型正确预测为正例的样本占所有预测为正例的样本的比例,召回率是指模型正确预测为正例的样本占真实正例样本的比例。F1值是精确率和召回率的加权调和平均,可以综合评估模型的性能。 除了精确率、召回率和F1值,还有其他一些常见的评价指标,例如平均精确率均值(mAP)和Mean Average Precision at different IoU thresholds (mAP@[0.5:0.95])。mAP是对所有类别的平均精确率进行平均,用于度量模型的综合目标检测性能。而mAP@[0.5:0.95]是在不同的IoU阈值下计算的mAP值,可以更全面地评估模型在不同IoU要求下的准确性。 此外,MMDetection还可以计算不同尺度下的mAP和不同透明度下的mAP。这些指标可以更详细地评估模型在不同条件下的表现,帮助研究者和开发者选择合适的模型和调整训练策略。 总之,MMDetection提供了一系列评价指标来评估目标检测模型的性能,通过比较这些指标可以选择最佳的模型和优化训练策略,提高目标检测任务的准确性和鲁棒性。 ### 回答3: MMDetection 是一个用于目标检测的开源深度学习框架。评价指标是用来衡量目标检测算法性能的标准,可以帮助我们比较不同算法在目标检测任务上的表现。 在 MMDetection 中,常用的评价指标有以下几个: 1. 平均精度(Average Precision,AP):AP 是最常用的目标检测评价指标之一。它通过计算预测框和真实标注框之间的 IOU(交并比),来判断检测是否成功。AP 值越高,表示检测算法的性能越好。 2. 平均召回率(Average Recall,AR):AR 是指在不同的置信度阈值下,检测算法能够检测到的真实标注框的比例。AR 值越高,表示检测算法在不同置信度下的稳定性越好。 3. 精确率(Precision):精确率表示检测出的正样本中真实标注为正的比例。精确率越高,表示检测算法的误检率越低。 4. 召回率(Recall):召回率表示真实标注为正的样本被检测出的比例。召回率越高,表示检测算法的漏检率越低。 5. 特定类别指标(Class-specific metrics):对于多类别目标检测任务,可以计算每个类别的精确率、召回率、AP 值等指标,用于衡量不同类别的检测性能。 通过以上评价指标,我们可以客观地评估 MMDetection 框架在目标检测任务上的性能,并比较不同算法在准确率、召回率等方面的优劣。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值