【问题标题】:Are these the expected results of tensorflow object-detection evaluation using model_main.py?这些是使用 model_main.py 进行 tensorflow 对象检测评估的预期结果吗?
【发布时间】:2019-09-23 21:55:30
【问题描述】:

在具有 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

【问题讨论】:

    标签: tensorflow object-detection evaluation


    【解决方案1】:

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

    1. tensorboard 上的总损失实际上是 Evaluation Loss,如果这个损失开始上升,那么您的模型可能是过拟合的。请参阅类似案例 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

    如果我们包含IoU=0.4,那么所有三个检测都是正确的检测(真阳性),如果我们设置IoU=0.6,那么只有两个是正确的,当IoU=0.9时,只有一个检测是正确的。

    一些further reading 关于mAP 的计算方式。

    【讨论】:

    • 感谢您的澄清,我对我的训练图像数据有进一步的询问。您是否建议在图像中使用不同大小的对象而不是所有中到大型对象(使用边界框标记)?另一个问题是.. 模型配置是否会自动调整所有图像的大小?因此不需要预处理?
    • 我没看懂第一个问题,但通常大物体比小物体更容易检测。关于第二个问题,模型有一个预处理步骤,看你的配置文件,你可能会找到image_resizer,所以模型可以接受不同大小的输入图像。
    猜你喜欢
    • 2019-01-09
    • 2018-08-07
    • 2020-06-03
    • 2019-08-22
    • 2018-07-22
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多