平均精度和平均召回率在TFOD中始终为0

时间:2020-06-20 00:16:18

标签: tensorflow config object-detection

在使用TensorFlow Object Detection API进行训练时,我得到的累计评估结果始终为0。以下是我得到的相应详细信息:

Accumulating evaluation results...
DONE (t=1.51s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000

为什么会这样?作为TFOD文档,我向模型提供了train.record和'test.record'文件。但是没有单独提供任何验证或评估数据集或类似的东西,因为我没有找到像这样的要求。是这个原因吗?

此外,还有训练命令:

!python /content/models/research/object_detection/model_main.py \
    --pipeline_config_path={pipeline_fname} \
    --model_dir={model_dir} \
    --alsologtostderr \
    --num_train_steps={num_train_steps} \
    --num_eval_steps={num_eval_steps}

在这里,我为这些变量设置以下值:

  • pipeline_fname:“ ssd_mobilenet_v2_coco.config”
  • model_dir:'/ training'#只是用于保存模型的示例文件夹
  • num_train_steps:50000
  • num_eval_steps:1

其他信息:

  • 使用的预训练模型:'ssd_mobilenet_v1_coco_2017_11_17'
  • 批量大小:8
  • COLAB中使用的Tensorflow-GPU 1.x
  • 预先安装了
  • NumPy == 1.17.5,因为最新版本正在创建名为Out of range: End of sequence的错误,并且可能是由于另一个名为TypeError: 'numpy.float64' object cannot be interpreted as an integer的错误而发生的。通过降级NumPy版本,修复了这两个问题。

编辑:除此之外,我还发现了另一个问题。在测试输出时,测试图像上不会显示任何边界框。

1 个答案:

答案 0 :(得分:0)

好的!我发现了这背后的可疑原因。问题可能出在预训练模型上。最初,我使用ssd_mobilenet_v1_coco_2017_11_17作为预训练模型并得到错误。因此,当我更改模型时,错误消失了。当前,我正在使用ssd_mobilenet_v2_coco_2018_03_29,它是它的更新版本。以下是详细内容的一部分,希望可以显示现在一切正常:

Accumulating evaluation results...
DONE (t=1.05s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.329
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.835
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.111
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.200
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.298
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.392
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.206
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.439
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.441
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.274
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.409
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.502

编辑:如上所述,更改预训练模型后,不显示边界框的问题也自动得到解决。