Tensorflow对象检测评估损失

时间:2017-07-26 13:27:16

标签: tensorflow

我对在Tensorflow的对象检测库中验证数据集运行验证图像并获得损失(类似于培训期间的损失)感兴趣。

我试图修改evaluateator.py(https://github.com/tensorflow/models/blob/master/object_detection/evaluator.py#L38)中的_extract_prediction_tensors函数,如下所示。我正在向tensor_dict添加一个丢失的dict,以便评估损失。

groundtruth_boxes_list = 
[input_dict[fields.InputDataFields.groundtruth_boxes]]
label_id_offset = 1
groundtruth_classes_list = 
tf.cast(input_dict[fields.InputDataFields.groundtruth_classes],
                  tf.int32)
groundtruth_classes_list -= label_id_offset
groundtruth_classes_list = 
[ops.padded_one_hot_encoding(indices=groundtruth_classes_list,
                    depth=model.num_classes, left_pad=0)]
model.provide_groundtruth(groundtruth_boxes_list, 
groundtruth_classes_list)          
losses_dict = model.loss(prediction_dict)    
tensor_dict['loss'] = losses_dict

但即使我可以看到它已经正确分类,我所获得的分类损失也是错误的。不确定实现中是否仍有错误。

1 个答案:

答案 0 :(得分:0)

损失已由评估脚本计算。我目前正在用几行代码来提取它。这样做的方法是修改文件“ /models/research/object_detection/eval_util.py”。在重复的_checkpoint_run()行中:

  write_metrics(metrics, global_step, summary_dir)

“度量”是一本包含所有AP类以及所有损失的字典。要提取它们,请添加以下新行(缩进为上一行):

  for k,v in iter(metrics.items()):
    if 'mAP' in k:
      mAP = v
    elif 'localization_loss' in k:
      loc_loss = v
    elif 'classification_loss' in k:
      cls_loss = v

  print('-> mAP:{} loc_loss:{} cls_loss:{} tot_loss {}'.format(mAP,loc_loss,cls_loss,loc_loss + cls_loss))

这些值应该是您在配置文件中设置的评估数据的mAP,本地化和分类损失。