【问题标题】:How to predict Precision, Recall and F1 score after training SSD训练SSD后如何预测Precision、Recall和F1分数
【发布时间】:2021-11-24 05:43:57
【问题描述】:

我是深度学习的新手,我希望能够使用 F1 分数评估在某些时期接受过训练的模型。我相信它首先需要计算精度和召回率。

训练的模型是 SSD-300-Tensorflow。是否有代码或可以产生这些结果的东西?我没有使用 sci-kit 或任何东西,因为我不确定计算分数是否需要这样做,但感谢任何指导。

在文件夹 tf_extended 中有一个用于评估的文件,名为 metrics.py,其中包含用于精确度和召回率的代码。训练我的文件后,我在日志文件夹中有检查点。如何计算我的指标?由于硬件限制(GPU 问题),我正在使用 Google Collab

【问题讨论】:

    标签: python tensorflow computer-vision object-detection single-shot-detector


    【解决方案1】:

    如果您使用的是 Tensorflow 对象检测 API,它提供了一种运行模型评估的方法,可以针对不同的指标进行配置。如何做到这一点的教程是here。

    COCO 评估指标包括对象检测用例的精度和召回率的类似度量。这些指标的一个很好的概述是here。精确度和召回率的概念需要在一定程度上适应对象检测场景,因为您必须定义预测的边界框需要与地面实况边界框匹配的“紧密程度”才能被视为真阳性。

    我不确定 F1 分数对于对象检测场景的模拟是什么。通常,我见过使用 mAP 作为单一评估指标比较模型。

    【讨论】:

    • 我可以设置 tensorflow,但它没有提供 F1 分数和精度的接口,召回
    • 我已经更新了我的问题。如何使用 metrics.py 生成 F1 分数的精度和召回率?张量板提供了除我需要的指标之外的所有内容。 @chubbs
    • 您能否澄清一下,您使用的是什么代码?如果是github.com/balancap/SSD-Tensorflow,那么我会在自述文件中看到关于如何从检查点运行评估的说明:github.com/balancap/…。
    • 我跟着那个。有一个名为 eval_ssd_network 的文件,其中包含用于计算 mAP 的参数。它同时具有召回率和精度。 @chubbs 如何分别找到 Recall 和 Precision?
    • 嗯,我不太确定你的意思。准确率和召回率通过置信度得分联系起来。如果您只是想单独获取这些值,看起来它们在这里被解压:github.com/balancap/SSD-Tensorflow/blob/master/…
    【解决方案2】:

    您应该首先计算假阳性、假阴性、真阳​​性和真阴性。要获得这些值,您必须使用测试数据集评估您的模型。 This link 可能会有所帮助

    使用这些公式,您可以计算准确率和召回率,下面是一些示例代码:

    y_hat = []
    y = []
    threshold = 0.5
    for data, label in test_dataset:
        y_hat.extend(model.predict(data))
        y.extend(label.numpy()[:, 1])
        y_hat = np.asarray(y_hat)
        y = np.asarray(y)
        m = len(y)
        y_hat = np.asarray([1 if i > threshold else 0 for i in y_hat[:, 1]])
        true_positive = np.logical_and(y, y_hat).sum()
        true_negative = np.logical_and(np.logical_not(y_hat), np.logical_not(y)).sum()
        false_positive = np.logical_and(np.logical_not(y), y_hat).sum()
        false_negative = np.logical_and(np.logical_not(y_hat), y).sum()
        total = true_positive + true_negative + false_negative + false_positive
        assert total == m
        precision = true_positive / (true_positive + false_positive)
        recall = true_positive / (true_positive + false_negative)
        accuracy = (true_positive + true_negative) / total
        f1score = 2 * precision * recall / (precision + recall)
    

    【讨论】:

    • 已经有一个 metrics.py 有一些用于精确和召回的代码,但我不知道如何使用它来生成指标
    • 如果您可以分享一些代码或介绍您的项目(例如您正在使用对象检测 api 或 tensorflow 的其他部分),我可以为您提供更好的帮助。如果你不反对我的回答会更好:-)
    猜你喜欢
    • 2017-12-30
    • 2020-12-11
    • 2016-05-23
    • 2019-06-01
    • 2021-02-22
    • 2016-10-13
    • 1970-01-01
    • 2017-10-15
    • 2023-02-08
    相关资源
    最近更新 更多