如何为张量流对象检测模型运行eval.py作业

时间:2018-06-20 14:56:05

标签: python-3.x tensorflow object-detection google-colaboratory

我已经使用Google Colab上的Tensorflow的对象检测API训练了对象检测器。在一天中的大部分时间里都在互联网上进行研究之后,我无法找到有关如何对模型进行评估的教程,因此我可以获得诸如mAP之类的指标。

我发现必须使用来自models / research / object_detection文件夹的eval.py,但是我不确定应该将哪些参数传递给脚本。

简短地说,到目前为止,我所做的就是生成测试标签和训练图像,并将其存储在object_detection / images文件夹下。我还生成了train.record和test.record文件,并编写了labelmap.pbtxt文件。我正在使用来自Tensorflow模型Zoo的faster_rcnn_inception_v2_coco模型,因此我已经配置了faster_rcnn_inception_v2_coco.config文件,并将其存储在object_detection / training文件夹中。 训练过程运行得很好,所有检查点也都存储在object_detection / training文件夹中。

现在我必须评估模型,我像这样运行eval.py脚本:

!python eval.py --logtostderr --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config --checkpoint_dir=training/ --eval_dir=eval/

这样可以吗?因为这开始运行良好,但是当我打开张量板时,只有两个选项卡,即图像和图形,但没有标量。另外,我用logdir = eval运行张量板。

我是tensorflow的新手,因此欢迎任何帮助。 谢谢。

3 个答案:

答案 0 :(得分:6)

设置看起来不错。我需要等待很长时间才能使Scalars选项卡与其他两个选项一起加载/显示-例如评估工作完成后的10分钟。

enter image description here

但是在评估作业结束时,它将在控制台中打印将在“标量”选项卡中显示的所有标量指标:

Accumulating evaluation results...
DONE (t=1.57s).
Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.434
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.693
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.470
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000

如果您想使用新的model_main.py脚本而不是legacy/eval.py,则可以这样调用它

python model_main.py --alsologtostderr --run_once --checkpoint_dir=/dir/with/checkpoint/at/one/timestamp --model_dir=eval/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config 

请注意,此新API将需要optimizer中的train_config字段,该字段可能已经在您的pipeline.config中,因为您在培训和评估时都使用了该字段。 >

答案 1 :(得分:3)

我将尝试扩展和补充先前的答案。

如果要根据验证数据评估模型,则应使用:

python models/research/object_detection/model_main.py --pipeline_config_path=/path/to/pipeline_file --model_dir=/path/to/output_results --checkpoint_dir=/path/to/directory_holding_checkpoint --run_once=True

如果要根据训练数据评估模型,则应将“ eval_training_data”设置为True,即:

python models/research/object_detection/model_main.py --pipeline_config_path=/path/to/pipeline_file --model_dir=/path/to/output_results --eval_training_data=True --checkpoint_dir=/path/to/directory_holding_checkpoint --run_once=True

我还添加了注释以阐明一些先前的选项:

-pipeline_config_path:用于训练检测模型的“ pipeline.config”文件的路径。此文件应包含您要评估的TFRecords文件(训练和测试文件)的路径,即:

    ...
    train_input_reader: {
        tf_record_input_reader {
                #path to the training TFRecord
                input_path: "/path/to/train.record"
        }
        #path to the label map 
        label_map_path: "/path/to/label_map.pbtxt"
    }
    ...
    eval_input_reader: {
        tf_record_input_reader {
            #path to the testing TFRecord
            input_path: "/path/to/test.record"
        }
        #path to the label map 
        label_map_path: "/path/to/label_map.pbtxt"
    }
    ...

-model_dir :将在其中写入生成的度量标准的输出目录,尤其是可由tensorboard读取的“ events。*”文件。

-checkpoint_dir :具有检查点的目录。在训练过程中或通过使用“ export_inference_graph.py”导出检查点文件(“ model.ckpt。*”)后,即在该目录中写入了模型目录。

-run_once :真,仅运行一次评估。

答案 2 :(得分:2)

仅适用于希望在评估模式下运行新model_main.py的用户。您可以在参数中设置一个标志来实现此目的。该标记为checkpoint_dir,如果将其设置为等于包含过去训练检查点的文件夹,则该模型将仅在评估中运行。

希望我能像我一样帮助一些错过它的人! 干杯,