我已经使用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的新手,因此欢迎任何帮助。 谢谢。
答案 0 :(得分:6)
设置看起来不错。我需要等待很长时间才能使Scalars选项卡与其他两个选项一起加载/显示-例如评估工作完成后的10分钟。
但是在评估作业结束时,它将在控制台中打印将在“标量”选项卡中显示的所有标量指标:
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
,如果将其设置为等于包含过去训练检查点的文件夹,则该模型将仅在评估中运行。
希望我能像我一样帮助一些错过它的人! 干杯,