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

Are these the expected results of tensorflow object-detection evaluation using model_main.py?

运行 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. tensorboard 上的总损失实际上是评估损失,如果损失开始上升,则可能是您的模型过度拟合。请参阅类似案例 .
  2. 的较早答案
  3. 评测结果为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

如果我们将IoU=0.4,那么所有三个检测都是正确的检测(true positives),如果我们设置IoU=0.6,那么只有两个是正确的,而当IoU=0.9时,只有一个检测是正确的。

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