如何在一个特定的类上评估 Tensorflow 对象检测 API?



我已经在大约10个类上训练了来自Tensorflow Object Detection APIfaster_rcnn_inception_resnet_v2_atrous_coco的对象检测模型。当我运行model_main.py文件来评估模型时,它似乎只给出了所有 10 个类的平均平均精度 (AP( 和平均召回率 (AR(,如下所示:

Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.331
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.479
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.395
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.600
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.407
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.333
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.358
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.544
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.548
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.600
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.545
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.551

但是,如果我想只评估 1 个特定类的性能,而不是所有 30 个检测到的类,我该怎么办?

在检测后添加以下代码以过滤感兴趣的对象 -


objectOfInterest = 1  # Interested object class number as per label file 
box = np.asarray(boxes)
cls = np.asarray(classes).astype(np.int32)
scr = np.asarray(scores)
bl = (cls == objectOfInterest) 
classes = np.extract(boolar,cls)
scores = np.extract(boolar,scr)
boxes = np.extract(boolar,box)

迟到总比没有好 - 来自这篇文章

1. 使用不同的评估配置

只需将模型的*.config文件中的metrics_set值更改为"pascal_voc_detection_metrics"

TensorFlow Object Detection API 支持各种评估指标,详见此处的文档。PASCAL VOC 2010 检测指标为每个类别提供 AP 分数。

2. 编辑 pycotools 包中的cocoeval.py文件

此方法涉及将 8 行代码粘贴到cocoeval.py文件中。这篇文章对此进行了很好的解释和记录。

相关内容

  • 没有找到相关文章

最新更新