У меня есть файл tfrecord, содержащий изображения и ограничивающие рамки. Есть переменное количество ограничивающих рамок, связанных с каждым изображением. Я создаю свои SequenceExamples вроде
def image_example(image_string, obj_vectors):
box_feature_list = []
for vec in obj_vectors:
box_features = tf.train.Feature(float_list=tf.train.FloatList(value=vec))
box_feature_list.append(box_features)
all_box_features = tf.train.FeatureList(feature=box_feature_list)
box_dict = {
'Box Vectors': all_box_features
}
boxes = tf.train.FeatureLists(feature_list=box_dict)
image = tf.train.Features(feature={
'image': _bytes_feature(image_string),
})
example = tf.train.SequenceExample(
context=image,
feature_lists=boxes
)
return example
Затем я читаю их с помощью
def _parse_image_function(example):
# Create a dictionary describing the features.
context_feature = {
'image': tf.io.FixedLenFeature([], dtype=tf.string)
}
sequence_features = {
'Box Vectors': tf.io.VarLenFeature(dtype=tf.float32)
}
context_data, sequence_data = tf.io.parse_single_sequence_example(serialized=example,
context_features=context_feature, sequence_features=sequence_features)
print(context_data)
image = context_data['image']
print(image)
#tf.io.decode_raw(image, tf.string)
#print(image.numpy())
image = tf.image.decode_jpeg(context_data['image'])
print(image)
print(sequence_data['Box Vectors'])
return context_data, sequence_data
Когда я печатаю context_data, он печатает {'image': <tf.Tensor 'ParseSingleSequenceExample/ParseSingleSequenceExample:0' shape=() dtype=string>}
, а когда я печатаю context_data['image']
, это печатает Tensor("ParseSingleSequenceExample/ParseSingleSequenceExample:0", shape=(), dtype=string)
. Я ожидал получить необработанную строку, когда выполнил context_data['image']
, но не получаю.
Я использую _parse_image_function
в качестве входных данных для dataset.map, как
dataset = tf.data.TFRecordDataset(FILENAME)
dataset = dataset.map(_parse_image_function)
Затем я могу получить необработанную строку изображения, выполнив
for x, y in dataset:
vecs = y['Box Vectors']
image = x['image']
image = tf.reshape(image, [])
#print(image)
image = tf.image.decode_jpeg(image)
vecs = tf.sparse.to_dense(vecs)
Но я хочу преобразовать мои данные в тензоры в моей функции карты _parse_image_function
. Я хочу сделать это, чтобы я мог пакетировать свои данные, я собирался попытаться использовать dataset.padded_batch
в сопоставленном наборе данных. Я собираюсь об этом неправильно?