Я пытаюсь написать изображения переменного размера в формате Protobuf TensorFlow с помощью следующего кода:Как сохранить и читать изображения переменного размера в Protobuf формате TensorFlow в
img_feature = tf.train.Feature(
bytes_list=tf.train.BytesList(value=[
img.flatten().tostring()]))
# Define how the sequence length is stored
seq_len_feature = tf.train.Feature(
int64_list=tf.train.Int64List(value=[seq_len]))
# Define how the label list is stored
label_list_feature = tf.train.Feature(
int64_list=tf.train.Int64List(value=label_list))
# Define the feature dictionary that defines how the data is stored
feature = {
IMG_FEATURE_NAME: img_feature,
SEQ_LEN_FEATURE_NAME: seq_len_feature,
LABEL_LIST_FEATURE_NAME: label_list_feature}
# Create an example object to store
example = tf.train.Example(
features=tf.train.Features(feature=feature))
Где образы img
, что я откладываю имеет фиксированная высота, но переменная длина.
Теперь, если я хочу, чтобы разобрать этот файл со следующим кодом:
# Define how the features are read from the example
features_dict = {
IMG_FEATURE_NAME: tf.FixedLenFeature([], tf.string),
SEQ_LEN_FEATURE_NAME: tf.FixedLenFeature([1], tf.int64),
LABEL_LIST_FEATURE_NAME: tf.VarLenFeature(tf.int64),
}
features = tf.parse_single_example(
serialized_example,
features=features_dict)
# Decode string to uint8 and reshape to image shape
img = tf.decode_raw(features[IMG_FEATURE_NAME], tf.uint8)
img = tf.reshape(img, (self.img_shape, -1))
seq_len = tf.cast(features[SEQ_LEN_FEATURE_NAME], tf.int32)
# Convert list of labels
label_list = tf.cast(features[LABEL_LIST_FEATURE_NAME], tf.int32)
Я получаю следующее сообщение об ошибке: ValueError: All shapes must be fully defined: [TensorShape([Dimension(28), Dimension(None)]), TensorShape([Dimension(1)]), TensorShape([Dimension(3)])]
Есть ли способ для хранения изображений с переменным размером (более конкретно переменных ширина в моем случае) и прочитать их с TFRecordReader
?