По сути, я запускаю оценочный скрипт, предоставляемый API Tf Object Detection, используя:
python3 object_detection/legacy/eval.py \
--pipeline_config_path=../../faster_rcnn_resnet101_voc12.pbtxt\
--checkpoint_dir=../../trainedmodel_voc07 \
--eval_dir=../../eval_results \
--run_once=True \
--alsologtostderr
Теперь этот скрипт выводит ограничивающие рамки на изображение вместе с оценочными значениями. Но мне нужно вычислить метрики.
Когда я посмотрел в eval.py, я обнаружил, что он ничего не возвращает. Он запускает оценку, вычисляет показатели, но не возвращает их. Итак, я просто изменил код, чтобы вернуть метрики и распечатать его на консоли.
metrics = evaluator.evaluate(
create_input_dict_fn,
model_fn,
eval_config,
categories,
FLAGS.checkpoint_dir,
FLAGS.eval_dir,
graph_hook_fn=graph_rewriter_fn,
)
print(metrics)
Но, как мы знаем, это не будет печатать значения внутри метри c. Я пробовал несколько вещей, таких как metrics.numpy()
, которые не будут работать, когда нетерпеливое выполнение выключено. Я также пытался использовать metrics.eval()
, создавая сеанс, но он просто зависает P C и ничего не делает.
Кроме того, tf.print () не будет работать, поскольку он работает в графическом режиме.
Затем я обнаружил, что TF хранит сводку метрик, и мы можем визуализировать ее с помощью тензорной доски. Ничего страшного ... но что я хотел извлечь из других тензоров?
Итак, в принципе, как я могу получить доступ к промежуточным тензорам в скрипте?