如何在Tensorflow对象检测API中添加自定义评估指标?

时间:2019-06-21 03:42:49

标签: tensorflow tensorboard object-detection-api

在Tensorflow的对象检测API中评估实例细分模型时,我希望获得自定义指标列表,总结如下:

  • IOU的精确值在0.5-0.95之间,增量为0.05
  • IOU的调用值介于0.5-0.95之间,增量为0.05
  • 精度和召回率的AUC值介于0-1之间,增量为0.05

我目前正在测试的方法是通过调整pycocotools的PythonAPI中的一些代码以及Tensorflow研究模型中的其他指标文件来修改已经存在的coco评估指标。当前,COCO评估的默认输出值为以下

Precision/mAP
Precision/mAP@.50IOU
Precision/mAP@.75IOU
Precision/mAP (small)
Precision/mAP (medium)
Precision/mAP (large)
Recall/AR@1
Recall/AR@10
Recall/AR@100
Recall/AR@100 (small)
Recall/AR@100 (medium)
Recall/AR@100 (large)

因此,我决定首先在用于培训的.config文件中的coco_detection_metrics字段中使用eval_config

eval_config: {
  metrics_set: "coco_detection_metrics"
}

然后通过向统计信息列表和统计摘要字典中添加更多项来多次编辑cocoeval.pycocotools.py(与值的数量成比例),以获得所需的结果。出于演示目的,我将仅通过在IOU = 0.5的精度基础上增加IOU = 0.55的精度来显示一个示例。

因此,这是cocoeval.pyCOCOeval类的修改方法

def _summarizeDets():
    stats[1] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])
    stats[12] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])

以及coco_tools.pyCOCOEvalWrapper类下的编辑方法

summary_metrics = OrderedDict([
    ('Precision/mAP@.50IOU', self.stats[1]),
    ('Precision/mAP@.55IOU', self.stats[12])
for category_index, category_id in enumerate(self.GetCategoryIdList()):
    per_category_ap['Precision mAP@.50IOU ByCategory/{}'.format( category)] = self.category_stats[1][category_index]
    per_category_ap['Precision mAP@.55IOU ByCategory/{}'.format( category)] = self.category_stats[12][category_index]

了解一种更有效的方法来解决我的问题并轻松地请求自定义评估指标列表,而无需调整已经存在的COCO文件,将很有用。理想情况下,我的主要目标是

  • 能够根据问题开头提供的指标创建自定义控制台输出

我的次要目标是

  • 以JSON格式导出指标及其各自的值
  • 在Tensorboard中可视化三个图形

0 个答案:

没有答案