训练SSD后如何预测Precision、Recall和F1分数

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 的其他部分),我可以为您提供更好的帮助。如果你不反对我的回答会更好:-)

以上是关于训练SSD后如何预测Precision、Recall和F1分数的主要内容,如果未能解决你的问题,请参考以下文章

深度学习SSD算法

如何使用ssd训练自己的数据

f1分数,map,recall,precision怎么计算

使用 dlib 进行狗脸检测 - 需要有关改进 recal 的建议

Pytorch—SSD模型训练—步骤一:训练前的了解

CV案例:应用Keras SSD进行物体检测