Я пытаюсь использовать формат tfrecords tensorflows для хранения своих наборов данных.
Мне удалось прочитать изображения в формате jpeg, декодировать их в необработанный формат и записать в файл tfrecord. Затем я могу прочитать их позже, используя tf.decode_raw.
Проблема в том, что это приводит к огромным размерам файлов, потому что я храню изображения как необработанные. Теперь я видел много руководств и блогов, в которых говорилось, что я могу хранить их в закодированном формате, а затем при чтении просто декодировать их. Я не могу найти ни одного примера этого. Я пытался какое-то время, но независимо от того, как я это делаю, я получаю ошибки форматирования.
TLDR Кто-нибудь знает, как записывать изображения в файл tfrecord как jpeg, а не как raw.
Спасибо, Дэвид.
Моя писательская функция.
def convert(image_paths, labels, out_path):
num_images = len(image_paths)
with tf.python_io.TFRecordWriter(out_path) as writer:
for i, (path, label) in enumerate(zip(image_paths, labels)):
print_progress(count=i, total=num_images-1)
img = open(path, 'rb').read()
data ={'image': wrap_bytes(img),
'label': wrap_int64(label)}
feature = tf.train.Features(feature=data)
example = tf.train.Example(features=feature)
serialized = example.SerializeToString()
writer.write(serialized)
Преобразуйте набор данных с помощью этого:
{convert(image_paths=image_paths_train,
labels=cls_train,
out_path=path_tfrecords_train)}
Моя функция чтения
def parse(serialized):
features = \
{
'image': tf.FixedLenFeature([], tf.string),
'label': tf.FixedLenFeature([], tf.int64)
}
parsed_example = tf.parse_single_example(serialized=serialized,
features=features)
# Get the image as raw bytes.
image_raw = parsed_example['image']
# Decode the raw bytes so it becomes a tensor with type.
image = tf.image.decode_image(image_raw,channels=3)
#image = tf.decode_raw(image_raw, tf.uint8)
# The type is now uint8 but we need it to be float.
image = tf.cast(image, tf.float32)
# Get the label associated with the image.
label = parsed_example['label']
# The image and label are now correct TensorFlow types.
return image, label