在具有8个类的自定义数据集上运行TensorFlow对象检测API培训和评估,关于使用model_main.py运行该任务的结果,我有两个问题
总损失在10k步后开始(相对)开始..它在8000步后降至1以下,但从10k步开始缓慢上升到80k步并最终以1.4损失结束。发生了吗?
关于评估结果,为什么只有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
答案 0 :(得分:1)
是的,这些结果是合理的。回答您的问题:
[ 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包括在内,则所有三个检测都是正确的检测(真阳性),如果我们将IoU = 0.6设置为仅两个,则是正确的;而当IoU = 0.9时,只有一个检测是正确的。
一些further reading关于如何计算mAP。