这些是使用model_main.py进行张量流对象检测评估的预期结果吗?

时间:2019-05-06 09:19:31

标签: tensorflow object-detection evaluation

在具有8个类的自定义数据集上运行TensorFlow对象检测API培训和评估,关于使用model_main.py运行该任务的结果,我有两个问题

  1. 总损失在10k步后开始(相对)开始..它在8000步后降至1以下,但从10k步开始缓慢上升到80k步并最终以1.4损失结束。发生了吗?

  2. 关于评估结果,为什么只有IoU = 0.50的精度为0.966,而其余的均低于0.5,如下所示:

Accumulating evaluation results...
DONE (t=0.07s).
Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.471
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.966
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.438
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.471
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.447
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.562
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.587
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.587
INFO:tensorflow:Finished evaluation at 2019-05-06-03:56:37
INFO:tensorflow:Saving dict for global step 80000: DetectionBoxes_Precision/mAP

1 个答案:

答案 0 :(得分:1)

是的,这些结果是合理的。回答您的问题:

  1. 张量板上的总损失实际上是评估损失,如果这种损失开始上升,则可能是您的模型过度拟合了。看到类似情况here的更早答案。
  2. 评估结果为COCO评估格式。跨不同的IoU,不同的区域和不同的最大检测次数(maxDets)计算精度和召回率。例如,[ IoU=0.50:0.95 | area= all | maxDets=100 ]表示计算精度时使用的IoU在0.5到0.95之间(步长为0.05,所有在此范围内的IoU检测都被认为是阳性检测),面积范围从小,中和大,和最多100次检测。您可以想象,较低的IoU阈值意味着更多的检测将被计为真阳性,因此IoU=0.5的精度得分最高,因为它的计数最高的阳性检测数,而当IoU=0.95时,较少的检测值算作真正的阳性。 IoU=0.50:0.95是不同IoU的所有精度的平均值,因此该类别的精度低于IoU=0.5时的精度。

顺便说一句,当area=small, medium表示没有此类时,-1.00,请参见here。因此,这意味着数据集中的所有对象都非常大。

这很好地说明了为什么更低的IoU意味着更多的检测是真实阳性。 (图片source

enter image description here

如果我们将IoU = 0.4包括在内,则所有三个检测都是正确的检测(真阳性),如果我们将IoU = 0.6设置为仅两个,则是正确的;而当IoU = 0.9时,只有一个检测是正确的。

一些further reading关于如何计算mAP。