我已经在云上使用对象检测API训练了一个模型,我想知道它如何处理我拥有的一组图像(因为Tensorboard只能显示10张图像)。
训练完模型后,我已经使用记录的infer_detections脚本运行了推理。
python -m object_detection/inference/infer_detections \
--input_tfrecord_paths=inputImages.tfrecord \
--output_tfrecord_path=outputImages.tfrecord \
--inference_graph=frozen_inference_graph.pb \
我现在有了outputImages记录,其中包含推断的框。初步了解文件的原始内容,可以看到检测到的框有一些字典,例如:
"image/detection/bbox/ymin": {
"floatList": {
"value": [
0.6493546962738037,
0.5936318635940552,
0.35681775212287903,
0.3537094295024872,
以及分数和被推断的类别。所以我的假设是推断的盒子在那里。
现在,我想以一种简单的方式阅读这些框,以将其打印在图像上。对于包含基本事实框的tfRecords,我一直在使用:
decoded_image = tensor_result[fields.InputDataFields.image]
image = Image.fromarray(decoded_image)
boxes = tensor_result[fields.InputDataFields.groundtruth_boxes]
labels = tensor_result[fields.InputDataFields.groundtruth_classes]
filename = tensor_result[fields.InputDataFields.filename]
,效果很好。因此,为了进行检测,我尝试了各种可用的密钥:
decoded_image = tensor_result[fields.InputDataFields.image]
image = Image.fromarray(decoded_image)
boxes = tensor_result[fields.DetectionResultFields.detection_boxes]
labels = tensor_result[fields.DetectionResultFields.detection_classes]
filename = tensor_result[fields.InputDataFields.filename]
但是这些键不存在。
我注意到解码器似乎是无法正确读取这些字段的解码器:
def tensors_for_record(file_path):
record_iterator = tf.python_io.tf_record_iterator(path=file_path)
tensor_dict = list()
maxRecords = 100
count = 0
for string_record in record_iterator:
if (count > maxRecords):
return tensor_dict
print("Iterating... " + str(count)+" of " + str(maxRecords))
example = tf.train.Example()
example.ParseFromString(string_record)
example_decoder = tf_example_decoder.TfExampleDecoder()
tensor_dict.append(example_decoder.decode(tf.convert_to_tensor(string_record)))
count += 1
return tensor_dict
我还应该使用其他解码器吗?