【问题标题】:how to print out each class's Average Precision using Mxnet Faster RCNN for object detection如何使用 Mxnet Faster RCNN 打印每个类的平均精度以进行对象检测
【发布时间】:2018-05-14 03:04:02
【问题描述】:
我正在使用更快的 rcnn(mxnet) 对我自己的数据集进行对象检测,该数据集有 9 个类(包括背景)。但是,我发现最后它只打印出训练过程中所有 9 个类的平均准确率。此外,在测试过程中,它也只打印出所有 9 个类别的平均精度和召回率。我想知道如何在训练过程中打印出每个班级的准确率,以及在测试过程中每个班级的召回率和精度?
或者有人可以告诉我应该在哪里看才能接近我的目标?
一个理想的例子将显示在图像中。 enter image description here
【问题讨论】:
标签:
computer-vision
deep-learning
object-detection
mxnet
【解决方案1】:
您可以为此使用 Scikit-learn 函数 sklearn.metrics.precision_recall_fscore_support¶。 sklearn.metrics.classification_report 是美化版。
在测试时,您将获得一组真实值 (Y_true) 和一组预测每个类别的概率 (Y_prob)。如下使用这些;
Y_pred = np.argmax(Y_prob, axis=1)
print(classification_report(Y_true, Y_pred))
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
avg / total 0.70 0.60 0.61 5
需要做更多的工作才能在训练时每 N 个批次列出这些。如果您使用的是module.fit 方法,则可以设置回调参数和自定义eval_metric;
model = mx.mod.Module(symbol=...)
model.fit(..., batch_end_callback = mx.callback.Speedometer(batch_size),
eval_metric=custom_metric, ...)
您需要为 custom_metric 创建一个新类,该类扩展 mxnet.metric.EvalMetric 并实现一个 get 方法来打印(甚至返回)每个类的指标。